diff --git a/protocol-units/bridge/contracts/src/AtomicBridgeCounterparty.sol b/protocol-units/bridge/contracts/src/AtomicBridgeCounterparty.sol index a73a6f9b8..3d3ac99ae 100644 --- a/protocol-units/bridge/contracts/src/AtomicBridgeCounterparty.sol +++ b/protocol-units/bridge/contracts/src/AtomicBridgeCounterparty.sol @@ -4,6 +4,7 @@ pragma solidity ^0.8.22; import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; import {IAtomicBridgeCounterparty} from "./IAtomicBridgeCounterparty.sol"; import {AtomicBridgeInitiator} from "./AtomicBridgeInitiator.sol"; +import {console} from "forge-std/console.sol"; contract AtomicBridgeCounterparty is IAtomicBridgeCounterparty, OwnableUpgradeable { enum MessageState { diff --git a/protocol-units/bridge/integration-tests/src/lib.rs b/protocol-units/bridge/integration-tests/src/lib.rs index 96a354c93..84478a63a 100644 --- a/protocol-units/bridge/integration-tests/src/lib.rs +++ b/protocol-units/bridge/integration-tests/src/lib.rs @@ -1,32 +1,39 @@ -#![allow(dead_code)] -use alloy::node_bindings::AnvilInstance; -use alloy::primitives::Address; -use alloy::primitives::{keccak256, U256}; -use alloy::providers::ProviderBuilder; -use alloy::signers::local::PrivateKeySigner; +use alloy::{ + node_bindings::AnvilInstance, + primitives::{keccak256, Address, FixedBytes, U256}, + providers::ProviderBuilder, + signers::local::PrivateKeySigner, +}; use alloy_network::EthereumWallet; -use aptos_sdk::rest_client::aptos_api_types::Transaction as AptosTransaction; -use aptos_sdk::rest_client::{Client, FaucetClient}; -use aptos_sdk::types::account_address::AccountAddress; -use aptos_sdk::types::LocalAccount; +use aptos_sdk::{ + rest_client::{aptos_api_types::Transaction as AptosTransaction, Client, FaucetClient}, + types::{account_address::AccountAddress, LocalAccount}, +}; use bridge_config::Config; -use bridge_service::chains::bridge_contracts::BridgeContractError; -use bridge_service::chains::ethereum::types::AlloyProvider; -use bridge_service::chains::ethereum::types::EthAddress; -use bridge_service::chains::ethereum::{client::EthClient, types::EthHash}; -use bridge_service::chains::movement::utils::MovementAddress; -use bridge_service::chains::movement::{client::MovementClient, client_framework::MovementClientFramework, utils::MovementHash}; -use bridge_service::types::Amount; -use bridge_service::types::BridgeTransferId; -use bridge_service::types::HashLockPreImage; -use bridge_service::{chains::bridge_contracts::BridgeContractResult, types::BridgeAddress}; +use bridge_service::{ + chains::{ + bridge_contracts::{BridgeContractError, BridgeContractResult}, + ethereum::{ + client::EthClient, + types::{ + AlloyProvider, AtomicBridgeInitiator, CounterpartyContract, EthAddress, EthHash, + }, + utils::{send_transaction, send_transaction_rules}, + }, + movement::{ + client::{MovementClient, MovementClientFramework}, + utils::{self as movement_utils, MovementAddress, MovementHash}, + }, + }, + types::{Amount, BridgeAddress, BridgeTransferId, HashLock, HashLockPreImage}, +}; use godfig::{backend::config_file::ConfigFile, Godfig}; -use rand::SeedableRng; -use rand::{thread_rng, Rng}; -use rand::distributions::Alphanumeric; -use std::convert::TryInto; -use std::str::FromStr; -use std::sync::{Arc, RwLock}; +use rand::{distributions::Alphanumeric, thread_rng, Rng, SeedableRng}; +use std::{ + convert::TryInto, + str::FromStr, + sync::{Arc, RwLock}, +}; use url::Url; pub mod utils; @@ -52,35 +59,32 @@ pub struct MovementToEthCallArgs { } impl Default for EthToMovementCallArgs { - fn default() -> Self { - // Generate 6 random alphanumeric characters - let random_suffix: String = thread_rng() - .sample_iter(&Alphanumeric) - .take(6) - .map(char::from) - .collect(); - - // Construct the bridge_transfer_id with the random suffix - let mut bridge_transfer_id = b"00000000000000000000000tra".to_vec(); - bridge_transfer_id.extend_from_slice(random_suffix.as_bytes()); - - Self { + fn default() -> Self { + // Generate 6 random alphanumeric characters + let random_suffix: String = + thread_rng().sample_iter(&Alphanumeric).take(6).map(char::from).collect(); + + // Construct the bridge_transfer_id with the random suffix + let mut bridge_transfer_id = b"00000000000000000000000tra".to_vec(); + bridge_transfer_id.extend_from_slice(random_suffix.as_bytes()); + + Self { // Dummy valid EIP-55 address used in framework modules - initiator: b"32Be343B94f860124dC4fEe278FDCBD38C102D88".to_vec(), + initiator: b"32Be343B94f860124dC4fEe278FDCBD38C102D88".to_vec(), // Dummy recipient address - recipient: MovementAddress(AccountAddress::new(*b"0x00000000000000000000000000face")), - // Convert to [u8; 32] with explicit type annotation - bridge_transfer_id: MovementHash( - bridge_transfer_id - .as_slice() - .try_into() - .expect("Expected bridge_transfer_id to be 32 bytes"), - ), - hash_lock: MovementHash(*keccak256(b"secret")), - time_lock: 3600, - amount: 100, - } - } + recipient: MovementAddress(AccountAddress::new(*b"0x00000000000000000000000000face")), + // Convert to [u8; 32] with explicit type annotation + bridge_transfer_id: MovementHash( + bridge_transfer_id + .as_slice() + .try_into() + .expect("Expected bridge_transfer_id to be 32 bytes"), + ), + hash_lock: MovementHash(*keccak256(b"secret")), + time_lock: 3600, + amount: 100, + } + } } impl Default for MovementToEthCallArgs { @@ -165,6 +169,50 @@ impl HarnessEthClient { .expect("Failed to deposit WETH"); Ok(()) } + + pub async fn initiate_eth_bridge_transfer( + config: &Config, + initiator_privatekey: PrivateKeySigner, + recipient: MovementAddress, + hash_lock: HashLock, + amount: Amount, + ) -> Result<(), anyhow::Error> { + let initiator_address = initiator_privatekey.address(); + let rpc_provider = ProviderBuilder::new() + .with_recommended_fillers() + .wallet(EthereumWallet::from(initiator_privatekey)) + .on_builtin(&config.eth.eth_rpc_connection_url()) + .await?; + + let contract = + AtomicBridgeInitiator::new(config.eth.eth_initiator_contract.parse()?, &rpc_provider); + + let initiator_address = BridgeAddress(EthAddress(initiator_address)); + + let recipient_address = BridgeAddress(Into::>::into(recipient)); + + let recipient_bytes: [u8; 32] = + recipient_address.0.try_into().expect("Recipient address must be 32 bytes"); + let call = contract + .initiateBridgeTransfer( + U256::from(amount.weth_value()), + FixedBytes(recipient_bytes), + FixedBytes(hash_lock.0), + ) + .value(U256::from(amount.eth_value())) + .from(*initiator_address.0); + let _ = send_transaction( + call, + &send_transaction_rules(), + config.eth.transaction_send_retries, + config.eth.gas_limit as u128, + ) + .await + .map_err(|e| { + BridgeContractError::GenericError(format!("Failed to send transaction: {}", e)) + })?; + Ok(()) + } } pub struct HarnessMvtClient { @@ -212,6 +260,77 @@ impl HarnessMvtClient { account } + pub async fn init_set_timelock(&mut self, timelock: u64) -> Result<(), BridgeContractError> { + self.movement_client.initiator_set_timelock(timelock).await?; + Ok(()) + } + + //Mint the specified amount in MovEth. + pub async fn mint_moveeth( + &self, + address: &MovementAddress, + amount: u64, + ) -> Result<(), BridgeContractError> { + // Mint MovETH to the initiator's address + let mint_amount = amount; // Assuming 8 decimals for MovETH + + let mint_args = vec![ + movement_utils::serialize_address_initiator(&address.0)?, // Mint to initiator's address + movement_utils::serialize_u64_initiator(&mint_amount)?, // Amount to mint + ]; + + let mint_payload = movement_utils::make_aptos_payload( + self.movement_client.native_address, // Address where moveth module is published + "moveth", + "mint", + Vec::new(), + mint_args, + ); + + // Send transaction to mint MovETH + movement_utils::send_and_confirm_aptos_transaction( + &self.movement_client.rest_client(), + self.movement_client.signer(), + mint_payload, + ) + .await + .map_err(|_| BridgeContractError::MintError)?; + Ok(()) + } + + pub async fn initiate_bridge_transfer( + &mut self, + initiator: &LocalAccount, + recipient: EthAddress, + hash_lock: HashLock, + amount: u64, + ) -> BridgeContractResult<()> { + let recipient_bytes: Vec = recipient.into(); + let args = vec![ + movement_utils::serialize_vec_initiator(&recipient_bytes)?, + movement_utils::serialize_vec_initiator(&hash_lock.0[..])?, + movement_utils::serialize_u64_initiator(&amount)?, + ]; + + let payload = movement_utils::make_aptos_payload( + self.movement_client.native_address, + "atomic_bridge_initiator", + "initiate_bridge_transfer", + Vec::new(), + args, + ); + + let _ = movement_utils::send_and_confirm_aptos_transaction( + &self.movement_client.rest_client, + initiator, + payload, + ) + .await + .map_err(|_| BridgeContractError::InitiateTransferError)?; + + Ok(()) + } + pub async fn counterparty_complete_bridge_transfer( &mut self, recipient_privatekey: LocalAccount, @@ -364,9 +483,7 @@ impl TestHarnessFramework { (test_harness, config, movement_process) } - pub async fn new_with_suzuka( - config: Config, - ) -> (HarnessMvtClientFramework, Config) { + pub async fn new_with_suzuka(config: Config) -> (HarnessMvtClientFramework, Config) { let test_harness = HarnessMvtClientFramework::build(&config).await; (test_harness, config) } diff --git a/protocol-units/bridge/integration-tests/tests/bridge_e2e_test.rs b/protocol-units/bridge/integration-tests/tests/bridge_e2e_test.rs index b0490df10..d3468652c 100644 --- a/protocol-units/bridge/integration-tests/tests/bridge_e2e_test.rs +++ b/protocol-units/bridge/integration-tests/tests/bridge_e2e_test.rs @@ -1,76 +1,21 @@ use alloy::primitives::keccak256; -use alloy::primitives::{FixedBytes, U256}; -use alloy::providers::ProviderBuilder; -use alloy::signers::local::PrivateKeySigner; -use alloy_network::EthereumWallet; use anyhow::Result; -use aptos_types::account_address::AccountAddress; -use bridge_config::Config; use bridge_integration_tests::HarnessEthClient; use bridge_integration_tests::TestHarness; -use bridge_service::chains::bridge_contracts::BridgeContractError; use bridge_service::chains::bridge_contracts::BridgeContractEvent; use bridge_service::chains::ethereum::event_monitoring::EthMonitoring; -use bridge_service::chains::ethereum::types::AtomicBridgeInitiator; -use bridge_service::chains::ethereum::utils::send_transaction; -use bridge_service::chains::ethereum::utils::send_transaction_rules; use bridge_service::chains::{ ethereum::types::EthAddress, - movement::{ - client::MovementClient, event_monitoring::MovementMonitoring, utils::MovementAddress, - }, + movement::{event_monitoring::MovementMonitoring, utils::MovementAddress}, }; use bridge_service::rest::BridgeRest; use bridge_service::types::Amount; use bridge_service::types::AssetType; -use bridge_service::types::BridgeAddress; use bridge_service::types::HashLock; use bridge_service::types::HashLockPreImage; use futures::StreamExt; use tracing_subscriber::EnvFilter; -async fn initiate_eth_bridge_transfer( - config: &Config, - initiator_privatekey: PrivateKeySigner, - recipient: MovementAddress, - hash_lock: HashLock, - amount: Amount, -) -> Result<(), anyhow::Error> { - let initiator_address = initiator_privatekey.address(); - let rpc_provider = ProviderBuilder::new() - .with_recommended_fillers() - .wallet(EthereumWallet::from(initiator_privatekey)) - .on_builtin(&config.eth.eth_rpc_connection_url()) - .await?; - - let contract = - AtomicBridgeInitiator::new(config.eth.eth_initiator_contract.parse()?, &rpc_provider); - - let initiator_address = BridgeAddress(EthAddress(initiator_address)); - - let recipient_address = BridgeAddress(Into::>::into(recipient)); - - let recipient_bytes: [u8; 32] = - recipient_address.0.try_into().expect("Recipient address must be 32 bytes"); - let call = contract - .initiateBridgeTransfer( - U256::from(amount.weth_value()), - FixedBytes(recipient_bytes), - FixedBytes(hash_lock.0), - ) - .value(U256::from(amount.eth_value())) - .from(*initiator_address.0); - let _ = send_transaction( - call, - &send_transaction_rules(), - config.eth.transaction_send_retries, - config.eth.gas_limit as u128, - ) - .await - .map_err(|e| BridgeContractError::GenericError(format!("Failed to send transaction: {}", e)))?; - Ok(()) -} - #[tokio::test] async fn test_bridge_transfer_eth_movement_happy_path() -> Result<(), anyhow::Error> { tracing_subscriber::fmt() @@ -101,7 +46,7 @@ async fn test_bridge_transfer_eth_movement_happy_path() -> Result<(), anyhow::Er let hash_lock_pre_image = HashLockPreImage::random(); let hash_lock = HashLock(From::from(keccak256(hash_lock_pre_image))); let amount = Amount(AssetType::EthAndWeth((1, 0))); - initiate_eth_bridge_transfer( + HarnessEthClient::initiate_eth_bridge_transfer( &config, HarnessEthClient::get_initiator_private_key(&config), recipient_address, @@ -150,38 +95,35 @@ async fn test_bridge_transfer_eth_movement_happy_path() -> Result<(), anyhow::Er } #[tokio::test] -async fn test_movement_event() -> Result<(), anyhow::Error> { +async fn test_bridge_transfer_movement_eth_happy_path() -> Result<(), anyhow::Error> { tracing_subscriber::fmt() .with_env_filter( EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("info")), ) .init(); - println!("Start test_movement_event",); + let (eth_client_harness, mut mvt_client_harness, config) = + TestHarness::new_with_eth_and_movement().await?; - let config = TestHarness::read_bridge_config().await?; - println!("after test_movement_event",); + mvt_client_harness.init_set_timelock(60).await?; //Set to 1mn - // 1) initialize transfer - // let hash_lock_pre_image = HashLockPreImage::random(); - // let hash_lock = HashLock(From::from(keccak256(hash_lock_pre_image))); - // let mov_recipient = MovementAddress(AccountAddress::new(*b"0x00000000000000000000000000face")); + tracing::info!("Init initiator and counter part test account."); - // let amount = Amount(AssetType::EthAndWeth((1, 0))); - // initiate_eth_bridge_transfer( - // &config, - // HarnessEthClient::get_initiator_private_key(&config), - // mov_recipient, - // hash_lock, - // amount, - // ) - // .await - // .expect("Failed to initiate bridge transfer"); + // Init mvt addresses + let movement_client_signer_address = mvt_client_harness.movement_client.signer().address(); - use bridge_integration_tests::MovementToEthCallArgs; + { + let faucet_client = mvt_client_harness.faucet_client.write().unwrap(); + faucet_client.fund(movement_client_signer_address, 100_000_000_000).await?; + } - let mut movement_client = MovementClient::new(&config.movement).await.unwrap(); + let recipient_privkey = mvt_client_harness.fund_account().await; + let recipient_address = MovementAddress(recipient_privkey.address()); +<<<<<<< HEAD + let counterpart_privekey = HarnessEthClient::get_initiator_private_key(&config); + let counter_party_address = EthAddress(counterpart_privekey.address()); +======= let args = MovementToEthCallArgs::default(); // let signer_privkey = config.movement.movement_signer_key.clone(); // let sender_address = format!("0x{}", Ed25519PublicKey::from(&signer_privkey).to_string()); @@ -197,136 +139,216 @@ async fn test_movement_event() -> Result<(), anyhow::Error> { ) .await .expect("Failed to initiate bridge transfer"); +>>>>>>> main - //Wait for the tx to be executed - let _ = tokio::time::sleep(tokio::time::Duration::from_millis(2000)).await; - let event_type = format!( - "{}::atomic_bridge_initiator::BridgeTransferStore", - config.movement.movement_native_address - ); + //mint initiator to have enough moveeth to do the transfer + mvt_client_harness.mint_moveeth(&recipient_address, 1).await?; +<<<<<<< HEAD + // 1) initialize Movement transfer + let hash_lock_pre_image = HashLockPreImage::random(); + let hash_lock = HashLock(From::from(keccak256(hash_lock_pre_image))); + let amount = 1; + mvt_client_harness + .initiate_bridge_transfer(&recipient_privkey, counter_party_address, hash_lock, amount) + .await?; +======= // let signer_privkey = config.movement.movement_signer_key.clone(); // let signer_public_key = format!("0x{}", Ed25519PublicKey::from(&signer_privkey).to_string()); +>>>>>>> main - // println!("signer_public_key {signer_public_key}",); - - // let res = fetch_account_events( - // &config.movement.mvt_rpc_connection_url(), - // &signer_public_key, - // &event_type, - // ) - // .await; - // println!("res: {res:?}",); - - // let res = test_get_events_by_account_event_handle( - // &config.movement.mvt_rpc_connection_url(), - // "0xf90391c81027f03cdea491ed8b36ffaced26b6df208a9b569e5baf2590eb9b16", - // &event_type, - // ) - // .await; - // println!("res: {res:?}",); - - let res = test_get_events_by_account_event_handle( - &config.movement.mvt_rpc_connection_url(), - &config.movement.movement_native_address, - &event_type, - ) - .await; - println!("res: {res:?}",); - - let res = fetch_account_events( - &config.movement.mvt_rpc_connection_url(), - &config.movement.movement_native_address, - &event_type, - ) - .await; - println!("res: {res:?}",); - - // let mut one_stream = MovementMonitoring::build(&config.movement).await?; - - // //listen to event. - // let mut error_counter = 0; - // loop { - // tokio::select! { - // // Wait on chain one events. - // Some(one_event_res) = one_stream.next() =>{ - // match one_event_res { - // Ok(one_event) => { - // println!("Receive event {:?}", one_event); - // } - // Err(err) => { - // println!("Receive error {:?}", err); - // error_counter +=1; - // if error_counter > 5 { - // break; - // } - // } - // } - // } - // } - // } + let mut eth_monitoring = EthMonitoring::build(&config.eth).await.unwrap(); + // Wait for InitialtorCompleted event + tracing::info!("Wait for Bridge Lock event."); + loop { + let event = + tokio::time::timeout(std::time::Duration::from_secs(30), eth_monitoring.next()).await?; + if let Some(Ok(BridgeContractEvent::Locked(_))) = event { + break; + } + } Ok(()) } -async fn test_get_events_by_account_event_handle( - rest_url: &str, - account_address: &str, - event_type: &str, -) { - // let url = - // format!("{}/v1/accounts/{}/events?event_type={}", rest_url, account_address, event_type); - let url = format!( - "{}/v1/accounts/{}/events/{}/bridge_transfer_initiated_events", - rest_url, account_address, event_type - ); - - println!("url: {:?}", url); - let client = reqwest::Client::new(); - - // Send the GET request - let response = client - .get(&url) - .query(&[("start", "0"), ("limit", "10")]) - .send() - .await - .unwrap() - .text() - .await; - println!("Account direct response: {response:?}",); -} - -use aptos_sdk::rest_client::Client; -use std::str::FromStr; - -async fn fetch_account_events(rest_url: &str, account_address: &str, event_type: &str) { - // Initialize the RestClient - let node_connection_url = url::Url::from_str(rest_url).unwrap(); - let client = Client::new(node_connection_url); // Use the correct node URL - let native_address = AccountAddress::from_hex_literal(account_address).unwrap(); - - // Get the events for the specified account - let response = client - .get_account_events( - native_address, - event_type, - "bridge_transfer_initiated_events", - Some(1), - None, - ) - .await; - - println!("response{response:?}",); - - // let core_code_address: AccountAddress = AccountAddress::from_hex_literal("0x1").unwrap(); - // let response = client - // .get_account_events_bcs( - // core_code_address, - // "0x1::block::BlockResource", - // "new_block_events", - // Some(1), - // None, - // ) - // .await; - // println!("new_block_events response: {response:?}",); -} +// #[tokio::test] +// async fn test_movement_event() -> Result<(), anyhow::Error> { +// tracing_subscriber::fmt() +// .with_env_filter( +// EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("info")), +// ) +// .init(); + +// println!("Start test_movement_event",); + +// let config = TestHarness::read_bridge_config().await?; +// println!("after test_movement_event",); + +// // 1) initialize transfer +// // let hash_lock_pre_image = HashLockPreImage::random(); +// // let hash_lock = HashLock(From::from(keccak256(hash_lock_pre_image))); +// // let mov_recipient = MovementAddress(AccountAddress::new(*b"0x00000000000000000000000000face")); + +// // let amount = Amount(AssetType::EthAndWeth((1, 0))); +// // initiate_eth_bridge_transfer( +// // &config, +// // HarnessEthClient::get_initiator_private_key(&config), +// // mov_recipient, +// // hash_lock, +// // amount, +// // ) +// // .await +// // .expect("Failed to initiate bridge transfer"); + +// use bridge_integration_tests::MovementToEthCallArgs; + +// let mut movement_client = MovementClient::new(&config.movement).await.unwrap(); + +// let args = MovementToEthCallArgs::default(); +// // let signer_privkey = config.movement.movement_signer_address.clone(); +// // let sender_address = format!("0x{}", Ed25519PublicKey::from(&signer_privkey).to_string()); +// // let sender_address = movement_client.signer().address(); +// // test_utils::fund_and_check_balance(&mut mvt_client_harness, 100_000_000_000).await?; +// bridge_integration_tests::utils::initiate_bridge_transfer_helper( +// &mut movement_client, +// args.initiator.0, +// args.recipient.clone(), +// args.hash_lock.0, +// args.amount, +// true, +// ) +// .await +// .expect("Failed to initiate bridge transfer"); + +// //Wait for the tx to be executed +// let _ = tokio::time::sleep(tokio::time::Duration::from_millis(2000)).await; +// let event_type = format!( +// "{}::atomic_bridge_initiator::BridgeTransferStore", +// config.movement.movement_native_address +// ); + +// // let signer_privkey = config.movement.movement_signer_address.clone(); +// // let signer_public_key = format!("0x{}", Ed25519PublicKey::from(&signer_privkey).to_string()); + +// // println!("signer_public_key {signer_public_key}",); + +// // let res = fetch_account_events( +// // &config.movement.mvt_rpc_connection_url(), +// // &signer_public_key, +// // &event_type, +// // ) +// // .await; +// // println!("res: {res:?}",); + +// // let res = test_get_events_by_account_event_handle( +// // &config.movement.mvt_rpc_connection_url(), +// // "0xf90391c81027f03cdea491ed8b36ffaced26b6df208a9b569e5baf2590eb9b16", +// // &event_type, +// // ) +// // .await; +// // println!("res: {res:?}",); + +// let res = test_get_events_by_account_event_handle( +// &config.movement.mvt_rpc_connection_url(), +// &config.movement.movement_native_address, +// &event_type, +// ) +// .await; +// println!("res: {res:?}",); + +// let res = fetch_account_events( +// &config.movement.mvt_rpc_connection_url(), +// &config.movement.movement_native_address, +// &event_type, +// ) +// .await; +// println!("res: {res:?}",); + +// // let mut one_stream = MovementMonitoring::build(&config.movement).await?; + +// // //listen to event. +// // let mut error_counter = 0; +// // loop { +// // tokio::select! { +// // // Wait on chain one events. +// // Some(one_event_res) = one_stream.next() =>{ +// // match one_event_res { +// // Ok(one_event) => { +// // println!("Receive event {:?}", one_event); +// // } +// // Err(err) => { +// // println!("Receive error {:?}", err); +// // error_counter +=1; +// // if error_counter > 5 { +// // break; +// // } +// // } +// // } +// // } +// // } +// // } + +// Ok(()) +// } + +// async fn test_get_events_by_account_event_handle( +// rest_url: &str, +// account_address: &str, +// event_type: &str, +// ) { +// // let url = +// // format!("{}/v1/accounts/{}/events?event_type={}", rest_url, account_address, event_type); +// let url = format!( +// "{}/v1/accounts/{}/events/{}/bridge_transfer_initiated_events", +// rest_url, account_address, event_type +// ); + +// println!("url: {:?}", url); +// let client = reqwest::Client::new(); + +// // Send the GET request +// let response = client +// .get(&url) +// .query(&[("start", "0"), ("limit", "10")]) +// .send() +// .await +// .unwrap() +// .text() +// .await; +// println!("Account direct response: {response:?}",); +// } + +// use aptos_sdk::rest_client::Client; +// use std::str::FromStr; + +// async fn fetch_account_events(rest_url: &str, account_address: &str, event_type: &str) { +// // Initialize the RestClient +// let node_connection_url = url::Url::from_str(rest_url).unwrap(); +// let client = Client::new(node_connection_url); // Use the correct node URL +// let native_address = AccountAddress::from_hex_literal(account_address).unwrap(); + +// // Get the events for the specified account +// let response = client +// .get_account_events( +// native_address, +// event_type, +// "bridge_transfer_initiated_events", +// Some(1), +// None, +// ) +// .await; + +// println!("response{response:?}",); + +// // let core_code_address: AccountAddress = AccountAddress::from_hex_literal("0x1").unwrap(); +// // let response = client +// // .get_account_events_bcs( +// // core_code_address, +// // "0x1::block::BlockResource", +// // "new_block_events", +// // Some(1), +// // None, +// // ) +// // .await; +// // println!("new_block_events response: {response:?}",); +// } diff --git a/protocol-units/bridge/integration-tests/tests/client_eth_movement.rs b/protocol-units/bridge/integration-tests/tests/client_eth_movement.rs index 8fdf6cb88..b292f095c 100644 --- a/protocol-units/bridge/integration-tests/tests/client_eth_movement.rs +++ b/protocol-units/bridge/integration-tests/tests/client_eth_movement.rs @@ -4,21 +4,28 @@ use alloy::{ }; use anyhow::Result; use aptos_sdk::coin_client::CoinClient; +use aptos_sdk::types::LocalAccount; use bridge_config::Config; use bridge_integration_tests::utils as test_utils; use bridge_integration_tests::EthToMovementCallArgs; use bridge_integration_tests::HarnessMvtClient; use bridge_integration_tests::TestHarness; +use bridge_service::chains::bridge_contracts::BridgeContractEvent; +use bridge_service::chains::ethereum::event_monitoring::EthMonitoring; use bridge_service::chains::ethereum::types::EthAddress; +use bridge_service::chains::movement::utils::MovementAddress; use bridge_service::chains::{ bridge_contracts::BridgeContract, ethereum::types::EthHash, movement::utils::MovementHash, }; use bridge_service::types::{ Amount, AssetType, BridgeAddress, BridgeTransferId, HashLock, HashLockPreImage, }; +use futures::StreamExt; +use std::io::BufRead; use tokio::time::{sleep, Duration}; use tokio::{self}; use tracing::info; +use tracing_subscriber::EnvFilter; #[tokio::test] async fn test_movement_client_build_and_fund_accounts() -> Result<(), anyhow::Error> { @@ -456,3 +463,99 @@ async fn test_eth_client_should_successfully_complete_transfer() { //TODO: Here call complete with the id captured from the event } + +#[tokio::test] +async fn test_eth_client_lock_then_complete_transfer() -> Result<(), anyhow::Error> { + tracing_subscriber::fmt() + .with_env_filter( + EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("info")), + ) + .init(); + + let config = Config::default(); + let (mut eth_client_harness, config, mut anvil) = + TestHarness::new_only_eth(config.clone()).await; + + let signer_address: alloy::primitives::Address = eth_client_harness.signer_address(); + + let recipient_privkey = LocalAccount::generate(&mut rand::rngs::OsRng); + let recipient_address = MovementAddress(recipient_privkey.address()); + let recipient_bytes: Vec = recipient_address.into(); + + let secret = "secret".to_string(); + let hash_lock = keccak256(secret.as_bytes()); + let hash_lock: [u8; 32] = hash_lock.into(); + + println!("Before initiate_bridge_transfer"); + + eth_client_harness + .eth_client + .initiate_bridge_transfer( + BridgeAddress(EthAddress(signer_address)), + BridgeAddress(recipient_bytes.clone()), + HashLock(EthHash(hash_lock).0), + Amount(AssetType::EthAndWeth((42, 0))), + ) + .await + .expect("Failed to initiate bridge transfer"); + + let mut eth_monitoring = EthMonitoring::build(&config.eth).await.unwrap(); + // Wait for InitialtorCompleted event + tracing::info!("Wait for Bridge Lock event."); + let bridge_transfer_id; + loop { + let event = + tokio::time::timeout(std::time::Duration::from_secs(30), eth_monitoring.next()).await?; + if let Some(Ok(BridgeContractEvent::Initiated(detail))) = event { + bridge_transfer_id = detail.bridge_transfer_id; + break; + } + } + println!("Before lock_bridge_transfer"); + + //let bridge_transfer_id = BridgeTransferId::gen_unique_hash(&mut rand::rngs::OsRng); + + // let secret = b"secret"; + // let mut padded_secret = [0u8; 32]; + // padded_secret[..secret.len()].copy_from_slice(secret); + + // BridgeContract::counterparty_complete_bridge_transfer( + // &mut eth_client_harness.eth_client, + // bridge_transfer_id, + // HashLockPreImage(padded_secret), + // ) + // .await + // .expect("Failed to complete bridge transfer"); + + let res = eth_client_harness + .eth_client + .lock_bridge_transfer( + bridge_transfer_id, + HashLock([1; 32]), + BridgeAddress(vec![2; 32]), + BridgeAddress(EthAddress(signer_address)), + Amount(AssetType::EthAndWeth((0, 42))), + ) + .await; + // loop { + // let event = + // tokio::time::timeout(std::time::Duration::from_secs(30), eth_monitoring.next()).await?; + // if let Some(Ok(BridgeContractEvent::Locked(detail))) = event { + // break; + // } + // } + + println!("{res:?}",); + + let stdout = anvil.child_mut().stdout.take().unwrap(); + let mut reader = std::io::BufReader::new(stdout).lines(); + while let Some(Ok(line)) = reader.next() { + println!(">:{:?}", line); + // writer.write_all(line.as_bytes()).await?; + // writer.write_all(b"\n").await?; + // output.push_str(&line); + // output.push('\n'); + } + + Ok(()) +} diff --git a/protocol-units/bridge/service/abis/AtomicBridgeCounterparty.json b/protocol-units/bridge/service/abis/AtomicBridgeCounterparty.json index 19021a8f8..d5790ff8a 100644 --- a/protocol-units/bridge/service/abis/AtomicBridgeCounterparty.json +++ b/protocol-units/bridge/service/abis/AtomicBridgeCounterparty.json @@ -1 +1 @@ -{"abi":[{"type":"function","name":"abortBridgeTransfer","inputs":[{"name":"bridgeTransferId","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"atomicBridgeInitiator","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract AtomicBridgeInitiator"}],"stateMutability":"view"},{"type":"function","name":"bridgeTransfers","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"originator","type":"bytes32","internalType":"bytes32"},{"name":"recipient","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"hashLock","type":"bytes32","internalType":"bytes32"},{"name":"timeLock","type":"uint256","internalType":"uint256"},{"name":"state","type":"uint8","internalType":"enum AtomicBridgeCounterparty.MessageState"}],"stateMutability":"view"},{"type":"function","name":"completeBridgeTransfer","inputs":[{"name":"bridgeTransferId","type":"bytes32","internalType":"bytes32"},{"name":"preImage","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"counterpartyTimeLockDuration","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"_atomicBridgeInitiator","type":"address","internalType":"address"},{"name":"owner","type":"address","internalType":"address"},{"name":"_timeLockDuration","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"lockBridgeTransfer","inputs":[{"name":"originator","type":"bytes32","internalType":"bytes32"},{"name":"bridgeTransferId","type":"bytes32","internalType":"bytes32"},{"name":"hashLock","type":"bytes32","internalType":"bytes32"},{"name":"recipient","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setAtomicBridgeInitiator","inputs":[{"name":"_atomicBridgeInitiator","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setTimeLockDuration","inputs":[{"name":"_timeLockDuration","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"BridgeTransferAborted","inputs":[{"name":"bridgeTransferId","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"BridgeTransferCompleted","inputs":[{"name":"bridgeTransferId","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"pre_image","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"BridgeTransferLocked","inputs":[{"name":"bridgeTransferId","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"initiator","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"recipient","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"hashLock","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"timeLock","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"BridgeTransferHasBeenCompleted","inputs":[]},{"type":"error","name":"BridgeTransferInvalid","inputs":[]},{"type":"error","name":"BridgeTransferStateNotInitialized","inputs":[]},{"type":"error","name":"BridgeTransferStateNotPending","inputs":[]},{"type":"error","name":"InsufficientWethBalance","inputs":[]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"InvalidSecret","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"}]},{"type":"error","name":"TimeLockExpired","inputs":[]},{"type":"error","name":"TimeLockNotExpired","inputs":[]},{"type":"error","name":"Unauthorized","inputs":[]},{"type":"error","name":"WETHTransferFailed","inputs":[]},{"type":"error","name":"ZeroAddress","inputs":[]},{"type":"error","name":"ZeroAmount","inputs":[]}],"bytecode":{"object":"0x6080604052348015600e575f80fd5b50610b3d8061001c5f395ff3fe608060405234801561000f575f80fd5b50600436106100b1575f3560e01c806396d17d491161006e57806396d17d49146101645780639f8f87991461017b578063c95b659f1461018e578063e0d9cbc4146101a1578063ee2c59f814610203578063f2fde38b14610215575f80fd5b80631794bb3c146100b557806327b3ea07146100ca57806371115eb2146100f2578063715018a6146101055780637ce087481461010d5780638da5cb5b14610120575b5f80fd5b6100c86100c336600461098b565b610228565b005b6100dd6100d83660046109c5565b61037e565b60405190151581526020015b60405180910390f35b6100c8610100366004610a08565b61056e565b6100c861057b565b6100c861011b366004610a1f565b61058e565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b0390911681526020016100e9565b61016d60025481565b6040519081526020016100e9565b6100c8610189366004610a3f565b6105de565b6100c861019c366004610a08565b610753565b6101f16101af366004610a08565b600160208190525f91825260409091208054918101546002820154600383015460048401546005909401546001600160a01b0390931693919290919060ff1686565b6040516100e996959493929190610a73565b5f5461014c906001600160a01b031681565b6100c8610223366004610a1f565b610801565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f8115801561026d5750825b90505f8267ffffffffffffffff1660011480156102895750303b155b905081158015610297575080155b156102b55760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156102df57845460ff60401b1916600160401b1785555b6001600160a01b0388166103065760405163d92e233d60e01b815260040160405180910390fd5b5f80546001600160a01b0319166001600160a01b038a1617905561032987610843565b6002869055831561037457845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b5f610387610854565b815f036103a757604051631f2a200560e01b815260040160405180910390fd5b5f546040805163258d975160e21b8152905184926001600160a01b0316916396365d449160048083019260209291908290030181865afa1580156103ed573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104119190610acb565b1015610430576040516318fb0fc360e11b815260040160405180910390fd5b5f6002544261043f9190610ae2565b90506040518060c00160405280888152602001856001600160a01b031681526020018481526020018681526020018281526020015f600281111561048557610485610a5f565b90525f87815260016020818152604092839020845181559084015181830180546001600160a01b0319166001600160a01b0390921691909117905591830151600280840191909155606084015160038401556080840151600484015560a08401516005840180549193909260ff1990921691849081111561050857610508610a5f565b021790555050600254604080518681526020810189905280820192909252516001600160a01b0387169250899189917f6fd7399514eb976acd637ed4a2435c9466e55428753b71e73e9d00fdcc50f44c9181900360600190a45060019695505050505050565b610576610854565b600255565b610583610854565b61058c5f6108af565b565b610596610854565b6001600160a01b0381166105bd5760405163d92e233d60e01b815260040160405180910390fd5b5f80546001600160a01b0319166001600160a01b0392909216919091179055565b5f82815260016020526040812090600582015460ff16600281111561060557610605610a5f565b146106235760405163a92c04c760e01b815260040160405180910390fd5b5f8260405160200161063791815260200190565b604051602081830303815290604052805190602001209050816003015481146106735760405163abab6bd760e01b815260040160405180910390fd5b81600401544211156106985760405163179a39d160e01b815260040160405180910390fd5b60058201805460ff191660019081179091555f549083015460028401546040516324c44ed760e21b81526001600160a01b03928316600482015260248101919091529116906393113b5c906044015f604051808303815f87803b1580156106fd575f80fd5b505af115801561070f573d5f803e3d5ffd5b50505050837f05ddc886acde01b77731bfad1dcfb6abf529f05c28ea66556fe87429bb2789ea8460405161074591815260200190565b60405180910390a250505050565b61075b610854565b5f81815260016020526040812090600582015460ff16600281111561078257610782610a5f565b146107a05760405163a92c04c760e01b815260040160405180910390fd5b806004015442116107c45760405163191f4d1b60e31b815260040160405180910390fd5b60058101805460ff1916600217905560405182907f9b398e0a546c4aa218ac0b98f5e2196a7aff605b50c19eb795f9cb3b2f5d5b55905f90a25050565b610809610854565b6001600160a01b03811661083757604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b610840816108af565b50565b61084b61091f565b61084081610968565b336108867f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b03161461058c5760405163118cdaa760e01b815233600482015260240161082e565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661058c57604051631afcd79f60e31b815260040160405180910390fd5b61080961091f565b80356001600160a01b0381168114610986575f80fd5b919050565b5f805f6060848603121561099d575f80fd5b6109a684610970565b92506109b460208501610970565b929592945050506040919091013590565b5f805f805f60a086880312156109d9575f80fd5b8535945060208601359350604086013592506109f760608701610970565b949793965091946080013592915050565b5f60208284031215610a18575f80fd5b5035919050565b5f60208284031215610a2f575f80fd5b610a3882610970565b9392505050565b5f8060408385031215610a50575f80fd5b50508035926020909101359150565b634e487b7160e01b5f52602160045260245ffd5b8681526001600160a01b038616602082015260408101859052606081018490526080810183905260c0810160038310610aba57634e487b7160e01b5f52602160045260245ffd5b8260a0830152979650505050505050565b5f60208284031215610adb575f80fd5b5051919050565b80820180821115610b0157634e487b7160e01b5f52601160045260245ffd5b9291505056fea26469706673582212201b6d65aa2eb41f0f8e49dbf2ebcee6f889cb66448fc1d0ae675e1551a4e9f32e64736f6c634300081a0033","sourceMap":"303:3636:39:-:0;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561000f575f80fd5b50600436106100b1575f3560e01c806396d17d491161006e57806396d17d49146101645780639f8f87991461017b578063c95b659f1461018e578063e0d9cbc4146101a1578063ee2c59f814610203578063f2fde38b14610215575f80fd5b80631794bb3c146100b557806327b3ea07146100ca57806371115eb2146100f2578063715018a6146101055780637ce087481461010d5780638da5cb5b14610120575b5f80fd5b6100c86100c336600461098b565b610228565b005b6100dd6100d83660046109c5565b61037e565b60405190151581526020015b60405180910390f35b6100c8610100366004610a08565b61056e565b6100c861057b565b6100c861011b366004610a1f565b61058e565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b0390911681526020016100e9565b61016d60025481565b6040519081526020016100e9565b6100c8610189366004610a3f565b6105de565b6100c861019c366004610a08565b610753565b6101f16101af366004610a08565b600160208190525f91825260409091208054918101546002820154600383015460048401546005909401546001600160a01b0390931693919290919060ff1686565b6040516100e996959493929190610a73565b5f5461014c906001600160a01b031681565b6100c8610223366004610a1f565b610801565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f8115801561026d5750825b90505f8267ffffffffffffffff1660011480156102895750303b155b905081158015610297575080155b156102b55760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156102df57845460ff60401b1916600160401b1785555b6001600160a01b0388166103065760405163d92e233d60e01b815260040160405180910390fd5b5f80546001600160a01b0319166001600160a01b038a1617905561032987610843565b6002869055831561037457845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b5f610387610854565b815f036103a757604051631f2a200560e01b815260040160405180910390fd5b5f546040805163258d975160e21b8152905184926001600160a01b0316916396365d449160048083019260209291908290030181865afa1580156103ed573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104119190610acb565b1015610430576040516318fb0fc360e11b815260040160405180910390fd5b5f6002544261043f9190610ae2565b90506040518060c00160405280888152602001856001600160a01b031681526020018481526020018681526020018281526020015f600281111561048557610485610a5f565b90525f87815260016020818152604092839020845181559084015181830180546001600160a01b0319166001600160a01b0390921691909117905591830151600280840191909155606084015160038401556080840151600484015560a08401516005840180549193909260ff1990921691849081111561050857610508610a5f565b021790555050600254604080518681526020810189905280820192909252516001600160a01b0387169250899189917f6fd7399514eb976acd637ed4a2435c9466e55428753b71e73e9d00fdcc50f44c9181900360600190a45060019695505050505050565b610576610854565b600255565b610583610854565b61058c5f6108af565b565b610596610854565b6001600160a01b0381166105bd5760405163d92e233d60e01b815260040160405180910390fd5b5f80546001600160a01b0319166001600160a01b0392909216919091179055565b5f82815260016020526040812090600582015460ff16600281111561060557610605610a5f565b146106235760405163a92c04c760e01b815260040160405180910390fd5b5f8260405160200161063791815260200190565b604051602081830303815290604052805190602001209050816003015481146106735760405163abab6bd760e01b815260040160405180910390fd5b81600401544211156106985760405163179a39d160e01b815260040160405180910390fd5b60058201805460ff191660019081179091555f549083015460028401546040516324c44ed760e21b81526001600160a01b03928316600482015260248101919091529116906393113b5c906044015f604051808303815f87803b1580156106fd575f80fd5b505af115801561070f573d5f803e3d5ffd5b50505050837f05ddc886acde01b77731bfad1dcfb6abf529f05c28ea66556fe87429bb2789ea8460405161074591815260200190565b60405180910390a250505050565b61075b610854565b5f81815260016020526040812090600582015460ff16600281111561078257610782610a5f565b146107a05760405163a92c04c760e01b815260040160405180910390fd5b806004015442116107c45760405163191f4d1b60e31b815260040160405180910390fd5b60058101805460ff1916600217905560405182907f9b398e0a546c4aa218ac0b98f5e2196a7aff605b50c19eb795f9cb3b2f5d5b55905f90a25050565b610809610854565b6001600160a01b03811661083757604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b610840816108af565b50565b61084b61091f565b61084081610968565b336108867f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b03161461058c5760405163118cdaa760e01b815233600482015260240161082e565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661058c57604051631afcd79f60e31b815260040160405180910390fd5b61080961091f565b80356001600160a01b0381168114610986575f80fd5b919050565b5f805f6060848603121561099d575f80fd5b6109a684610970565b92506109b460208501610970565b929592945050506040919091013590565b5f805f805f60a086880312156109d9575f80fd5b8535945060208601359350604086013592506109f760608701610970565b949793965091946080013592915050565b5f60208284031215610a18575f80fd5b5035919050565b5f60208284031215610a2f575f80fd5b610a3882610970565b9392505050565b5f8060408385031215610a50575f80fd5b50508035926020909101359150565b634e487b7160e01b5f52602160045260245ffd5b8681526001600160a01b038616602082015260408101859052606081018490526080810183905260c0810160038310610aba57634e487b7160e01b5f52602160045260245ffd5b8260a0830152979650505050505050565b5f60208284031215610adb575f80fd5b5051919050565b80820180821115610b0157634e487b7160e01b5f52601160045260245ffd5b9291505056fea26469706673582212201b6d65aa2eb41f0f8e49dbf2ebcee6f889cb66448fc1d0ae675e1551a4e9f32e64736f6c634300081a0033","sourceMap":"303:3636:39:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;948:412;;;;;;:::i;:::-;;:::i;:::-;;1761:1052;;;;;;:::i;:::-;;:::i;:::-;;;1403:14:47;;1396:22;1378:41;;1366:2;1351:18;1761:1052:39;;;;;;;;1615:140;;;;;;:::i;:::-;;:::i;3155:101:23:-;;;:::i;1366:243:39:-;;;;;;:::i;:::-;;:::i;2441:144:23:-;1313:22;2570:8;-1:-1:-1;;;;;2570:8:23;2441:144;;;-1:-1:-1;;;;;2016:32:47;;;1998:51;;1986:2;1971:18;2441:144:23;1852:203:47;898:43:39;;;;;;;;;2206:25:47;;;2194:2;2179:18;898:43:39;2060:177:47;2819:676:39;;;;;;:::i;:::-;;:::i;3501:436::-;;;;;;:::i;:::-;;:::i;788:64::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;788:64:39;;;;;;;;;;;;;;;;;;;;;;;;;:::i;732:50::-;;;;;-1:-1:-1;;;;;732:50:39;;;3405:215:23;;;;;;:::i;:::-;;:::i;948:412:39:-;8870:21:24;4302:15;;-1:-1:-1;;;4302:15:24;;;;4301:16;;4348:14;;4158:30;4726:16;;:34;;;;;4746:14;4726:34;4706:54;;4770:17;4790:11;:16;;4805:1;4790:16;:50;;;;-1:-1:-1;4818:4:24;4810:25;:30;4790:50;4770:70;;4856:12;4855:13;:30;;;;;4873:12;4872:13;4855:30;4851:91;;;4908:23;;-1:-1:-1;;;4908:23:24;;;;;;;;;;;4851:91;4951:18;;-1:-1:-1;;4951:18:24;4968:1;4951:18;;;4979:67;;;;5013:22;;-1:-1:-1;;;;5013:22:24;-1:-1:-1;;;5013:22:24;;;4979:67;-1:-1:-1;;;;;1075:36:39;::::1;1071:62;;1120:13;;-1:-1:-1::0;;;1120:13:39::1;;;;;;;;;;;1071:62;1143:21;:69:::0;;-1:-1:-1;;;;;;1143:69:39::1;-1:-1:-1::0;;;;;1143:69:39;::::1;;::::0;;1222:21:::1;1237:5:::0;1222:14:::1;:21::i;:::-;1305:28;:48:::0;;;5066:101:24;;;;5100:23;;-1:-1:-1;;;;5100:23:24;;;5142:14;;-1:-1:-1;4083:50:47;;5142:14:24;;4071:2:47;4056:18;5142:14:24;;;;;;;5066:101;4092:1081;;;;;948:412:39;;;:::o;1761:1052::-;1962:4;2334:13:23;:11;:13::i;:::-;1982:6:39::1;1992:1;1982:11:::0;1978:36:::1;;2002:12;;-1:-1:-1::0;;;2002:12:39::1;;;;;;;;;;;1978:36;2029:21;::::0;:35:::1;::::0;;-1:-1:-1;;;2029:35:39;;;;2067:6;;-1:-1:-1;;;;;2029:21:39::1;::::0;:33:::1;::::0;:35:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:21;:35:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;2025:82;;;2082:25;;-1:-1:-1::0;;;2082:25:39::1;;;;;;;;;;;2025:82;2312:16;2349:28;;2331:15;:46;;;;:::i;:::-;2312:65;;2424:236;;;;;;;;2506:10;2424:236;;;;2471:9;-1:-1:-1::0;;;;;2424:236:39::1;;;;;2538:6;2424:236;;;;2568:8;2424:236;;;;2600:8;2424:236;;;;2629:20;2424:236;;;;;;;;:::i;:::-;::::0;;2388:33:::1;::::0;;;:15:::1;:33;::::0;;;;;;;;:272;;;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;;2388:272:39::1;-1:-1:-1::0;;;;;2388:272:39;;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;;2388:272:39;;::::1;::::0;;;;::::1;;;;;;:::i;:::-;;;::::0;;-1:-1:-1;;2756:28:39::1;::::0;2676:109:::1;::::0;;4762:25:47;;;4818:2;4803:18;;4796:34;;;4846:18;;;4839:34;;;;2676:109:39;-1:-1:-1;;;;;2676:109:39;::::1;::::0;-1:-1:-1;2715:10:39;;2697:16;;2676:109:::1;::::0;;;;4750:2:47;2676:109:39;;::::1;-1:-1:-1::0;2802:4:39::1;::::0;1761:1052;-1:-1:-1;;;;;;1761:1052:39:o;1615:140::-;2334:13:23;:11;:13::i;:::-;1700:28:39::1;:48:::0;1615:140::o;3155:101:23:-;2334:13;:11;:13::i;:::-;3219:30:::1;3246:1;3219:18;:30::i;:::-;3155:101::o:0;1366:243:39:-;2334:13:23;:11;:13::i;:::-;-1:-1:-1;;;;;1465:36:39;::::1;1461:62;;1510:13;;-1:-1:-1::0;;;1510:13:39::1;;;;;;;;;;;1461:62;1533:21;:69:::0;;-1:-1:-1;;;;;;1533:69:39::1;-1:-1:-1::0;;;;;1533:69:39;;;::::1;::::0;;;::::1;::::0;;1366:243::o;2819:676::-;2914:37;2954:33;;;:15;:33;;;;;;3001:13;;;;;;:37;;;;;;;;:::i;:::-;;2997:81;;3047:31;;-1:-1:-1;;;3047:31:39;;;;;;;;;;;2997:81;3088:20;3138:8;3121:26;;;;;;5013:19:47;;5057:2;5048:12;;4884:182;3121:26:39;;;;;;;;;;;;;3111:37;;;;;;3088:60;;3178:7;:16;;;3162:12;:32;3158:60;;3203:15;;-1:-1:-1;;;3203:15:39;;;;;;;;;;;3158:60;3250:7;:16;;;3232:15;:34;3228:64;;;3275:17;;-1:-1:-1;;;3275:17:39;;;;;;;;;;;3228:64;3303:13;;;:38;;-1:-1:-1;;3303:38:39;3319:22;3303:38;;;;;;-1:-1:-1;3352:21:39;3387:17;;;;3406:14;;;;3352:69;;-1:-1:-1;;;3352:69:39;;-1:-1:-1;;;;;3387:17:39;;;3352:69;;;5245:51:47;5312:18;;;5305:34;;;;3352:21:39;;;:34;;5218:18:47;;3352:69:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3461:16;3437:51;3479:8;3437:51;;;;2206:25:47;;2194:2;2179:18;;2060:177;3437:51:39;;;;;;;;2904:591;;2819:676;;:::o;3501:436::-;2334:13:23;:11;:13::i;:::-;3585:37:39::1;3625:33:::0;;;:15:::1;:33;::::0;;;;;3672:13:::1;::::0;::::1;::::0;::::1;;:37;::::0;::::1;;;;;;:::i;:::-;;3668:81;;3718:31;;-1:-1:-1::0;;;3718:31:39::1;;;;;;;;;;;3668:81;3782:7;:16;;;3763:15;:35;3759:68;;3807:20;;-1:-1:-1::0;;;3807:20:39::1;;;;;;;;;;;3759:68;3838:13;::::0;::::1;:37:::0;;-1:-1:-1;;3838:37:39::1;3854:21;3838:37;::::0;;3891:39:::1;::::0;3913:16;;3891:39:::1;::::0;-1:-1:-1;;3891:39:39::1;3575:362;3501:436:::0;:::o;3405:215:23:-;2334:13;:11;:13::i;:::-;-1:-1:-1;;;;;3489:22:23;::::1;3485:91;;3534:31;::::0;-1:-1:-1;;;3534:31:23;;3562:1:::1;3534:31;::::0;::::1;1998:51:47::0;1971:18;;3534:31:23::1;;;;;;;;3485:91;3585:28;3604:8;3585:18;:28::i;:::-;3405:215:::0;:::o;1847:127::-;6931:20:24;:18;:20::i;:::-;1929:38:23::1;1954:12;1929:24;:38::i;2658:162::-:0;966:10:25;2717:7:23;1313:22;2570:8;-1:-1:-1;;;;;2570:8:23;;2441:144;2717:7;-1:-1:-1;;;;;2717:23:23;;2713:101;;2763:40;;-1:-1:-1;;;2763:40:23;;966:10:25;2763:40:23;;;1998:51:47;1971:18;;2763:40:23;1852:203:47;3774:248:23;1313:22;3923:8;;-1:-1:-1;;;;;;3941:19:23;;-1:-1:-1;;;;;3941:19:23;;;;;;;;3975:40;;3923:8;;;;;3975:40;;3847:24;;3975:40;3837:185;;3774:248;:::o;7084:141:24:-;8870:21;8560:40;-1:-1:-1;;;8560:40:24;;;;7146:73;;7191:17;;-1:-1:-1;;;7191:17:24;;;;;;;;;;;1980:235:23;6931:20:24;:18;:20::i;14:173:47:-;82:20;;-1:-1:-1;;;;;131:31:47;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:374::-;269:6;277;285;338:2;326:9;317:7;313:23;309:32;306:52;;;354:1;351;344:12;306:52;377:29;396:9;377:29;:::i;:::-;367:39;;425:38;459:2;448:9;444:18;425:38;:::i;:::-;192:374;;415:48;;-1:-1:-1;;;532:2:47;517:18;;;;504:32;;192:374::o;571:662::-;666:6;674;682;690;698;751:3;739:9;730:7;726:23;722:33;719:53;;;768:1;765;758:12;719:53;813:23;;;-1:-1:-1;933:2:47;918:18;;905:32;;-1:-1:-1;1036:2:47;1021:18;;1008:32;;-1:-1:-1;1085:38:47;1119:2;1104:18;;1085:38;:::i;:::-;571:662;;;;-1:-1:-1;571:662:47;;1196:3;1181:19;1168:33;;571:662;-1:-1:-1;;571:662:47:o;1430:226::-;1489:6;1542:2;1530:9;1521:7;1517:23;1513:32;1510:52;;;1558:1;1555;1548:12;1510:52;-1:-1:-1;1603:23:47;;1430:226;-1:-1:-1;1430:226:47:o;1661:186::-;1720:6;1773:2;1761:9;1752:7;1748:23;1744:32;1741:52;;;1789:1;1786;1779:12;1741:52;1812:29;1831:9;1812:29;:::i;:::-;1802:39;1661:186;-1:-1:-1;;;1661:186:47:o;2242:346::-;2310:6;2318;2371:2;2359:9;2350:7;2346:23;2342:32;2339:52;;;2387:1;2384;2377:12;2339:52;-1:-1:-1;;2432:23:47;;;2552:2;2537:18;;;2524:32;;-1:-1:-1;2242:346:47:o;2824:127::-;2885:10;2880:3;2876:20;2873:1;2866:31;2916:4;2913:1;2906:15;2940:4;2937:1;2930:15;2956:730;3259:25;;;-1:-1:-1;;;;;3320:32:47;;3315:2;3300:18;;3293:60;3384:2;3369:18;;3362:34;;;3427:2;3412:18;;3405:34;;;3470:3;3455:19;;3448:35;;;3246:3;3231:19;;3513:1;3502:13;;3492:144;;3558:10;3553:3;3549:20;3546:1;3539:31;3593:4;3590:1;3583:15;3621:4;3618:1;3611:15;3492:144;3673:6;3667:3;3656:9;3652:19;3645:35;2956:730;;;;;;;;;:::o;4144:184::-;4214:6;4267:2;4255:9;4246:7;4242:23;4238:32;4235:52;;;4283:1;4280;4273:12;4235:52;-1:-1:-1;4306:16:47;;4144:184;-1:-1:-1;4144:184:47:o;4333:222::-;4398:9;;;4419:10;;;4416:133;;;4471:10;4466:3;4462:20;4459:1;4452:31;4506:4;4503:1;4496:15;4534:4;4531:1;4524:15;4416:133;4333:222;;;;:::o","linkReferences":{}},"methodIdentifiers":{"abortBridgeTransfer(bytes32)":"c95b659f","atomicBridgeInitiator()":"ee2c59f8","bridgeTransfers(bytes32)":"e0d9cbc4","completeBridgeTransfer(bytes32,bytes32)":"9f8f8799","counterpartyTimeLockDuration()":"96d17d49","initialize(address,address,uint256)":"1794bb3c","lockBridgeTransfer(bytes32,bytes32,bytes32,address,uint256)":"27b3ea07","owner()":"8da5cb5b","renounceOwnership()":"715018a6","setAtomicBridgeInitiator(address)":"7ce08748","setTimeLockDuration(uint256)":"71115eb2","transferOwnership(address)":"f2fde38b"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"BridgeTransferHasBeenCompleted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeTransferInvalid\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeTransferStateNotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeTransferStateNotPending\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientWethBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSecret\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TimeLockExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TimeLockNotExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WETHTransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAmount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"bridgeTransferId\",\"type\":\"bytes32\"}],\"name\":\"BridgeTransferAborted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"bridgeTransferId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"pre_image\",\"type\":\"bytes32\"}],\"name\":\"BridgeTransferCompleted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"bridgeTransferId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"initiator\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"hashLock\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timeLock\",\"type\":\"uint256\"}],\"name\":\"BridgeTransferLocked\",\"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\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"bridgeTransferId\",\"type\":\"bytes32\"}],\"name\":\"abortBridgeTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"atomicBridgeInitiator\",\"outputs\":[{\"internalType\":\"contract AtomicBridgeInitiator\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"bridgeTransfers\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"originator\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"hashLock\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"timeLock\",\"type\":\"uint256\"},{\"internalType\":\"enum AtomicBridgeCounterparty.MessageState\",\"name\":\"state\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"bridgeTransferId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"preImage\",\"type\":\"bytes32\"}],\"name\":\"completeBridgeTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"counterpartyTimeLockDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_atomicBridgeInitiator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_timeLockDuration\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originator\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"bridgeTransferId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"hashLock\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"lockBridgeTransfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_atomicBridgeInitiator\",\"type\":\"address\"}],\"name\":\"setAtomicBridgeInitiator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_timeLockDuration\",\"type\":\"uint256\"}],\"name\":\"setTimeLockDuration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"}},\"kind\":\"dev\",\"methods\":{\"abortBridgeTransfer(bytes32)\":{\"details\":\"Cancels the bridge transfer and refunds the initiator if the timelock has expired\",\"params\":{\"bridgeTransferId\":\"Unique identifier for the BridgeTransfer\"}},\"completeBridgeTransfer(bytes32,bytes32)\":{\"details\":\"Completes the bridge transfer and withdraws WETH to the recipient\",\"params\":{\"bridgeTransferId\":\"Unique identifier for the BridgeTransfer\",\"preImage\":\"The secret that unlocks the funds\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/AtomicBridgeCounterparty.sol\":\"AtomicBridgeCounterparty\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xee2337af2dc162a973b4be6d3f7c16f06298259e0af48c5470d2839bfa8a22f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30c476b4b2f405c1bb3f0bae15b006d129c80f1bfd9d0f2038160a3bb9745009\",\"dweb:/ipfs/Qmb3VcuDufv6xbHeVgksC4tHpc5gKYVqBEwjEXW72XzSvN\"]},\"src/AtomicBridgeCounterparty.sol\":{\"keccak256\":\"0xd19b77150bb338ff6888266daf727a718076be3c3b2fa9b8d7e3775956d494ba\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8b0a4a373cb1f72ae57cf472dc42f13a733c44ac4921696c449a48ea0b72905\",\"dweb:/ipfs/QmWatkgLiibK3EFZ3QmD8perXjrDp3yrp4wQPeTqT4KiQo\"]},\"src/AtomicBridgeInitiator.sol\":{\"keccak256\":\"0xa331acc393bc52e014ca46b18b5b3127075c995509fb2b898415087ea3276c32\",\"urls\":[\"bzz-raw://e7f05a3dc5fddae0daf8617027f2704493d0214c95e80888a2f40ddbbc3c85ab\",\"dweb:/ipfs/Qmc9VjwVQ9aNVC5S7Vfsh1pmUbCDQBiXiqJ3JcbEfaZ5wd\"]},\"src/IAtomicBridgeCounterparty.sol\":{\"keccak256\":\"0x8065ecbe50db48acb79eae9e8184996f95b75407de9f79b9aee473190e069f50\",\"urls\":[\"bzz-raw://2d401c7b17ec7cb49133c1c03724e3285687699f168e1b6f4a5ee8c10f95f507\",\"dweb:/ipfs/QmTaiGr4Pa1uYrwBJ5uywFbZSLxWT9KH9NbgdET2J7ADwr\"]},\"src/IAtomicBridgeInitiator.sol\":{\"keccak256\":\"0x8397d0de470d4fe4f52ae03292085532b2d1681b5bd332992d303d3e630047be\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4c8826a0ee54c30746ddb91e35a7ef9c0e33acb68c19a0424a05237b3b02753f\",\"dweb:/ipfs/QmPrPd8hpdmiXryYYSycChgrnHwsaTgHp4xJL3wLT3mRmz\"]},\"src/IWETH9.sol\":{\"keccak256\":\"0xff29528c0f48eaad5156c8d66ccd8f754037bba234434807db302e604db9f9a5\",\"urls\":[\"bzz-raw://a7322b029eb6cd2bbf204fb879947a91aad09bca79373583e5c5b7a2630a6c6b\",\"dweb:/ipfs/QmfLWmtiEhdTiD5kFNruHiMYs4dY5joGgJQ4HU2wCTHF6E\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[],"type":"error","name":"BridgeTransferHasBeenCompleted"},{"inputs":[],"type":"error","name":"BridgeTransferInvalid"},{"inputs":[],"type":"error","name":"BridgeTransferStateNotInitialized"},{"inputs":[],"type":"error","name":"BridgeTransferStateNotPending"},{"inputs":[],"type":"error","name":"InsufficientWethBalance"},{"inputs":[],"type":"error","name":"InvalidInitialization"},{"inputs":[],"type":"error","name":"InvalidSecret"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"OwnableInvalidOwner"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"type":"error","name":"OwnableUnauthorizedAccount"},{"inputs":[],"type":"error","name":"TimeLockExpired"},{"inputs":[],"type":"error","name":"TimeLockNotExpired"},{"inputs":[],"type":"error","name":"Unauthorized"},{"inputs":[],"type":"error","name":"WETHTransferFailed"},{"inputs":[],"type":"error","name":"ZeroAddress"},{"inputs":[],"type":"error","name":"ZeroAmount"},{"inputs":[{"internalType":"bytes32","name":"bridgeTransferId","type":"bytes32","indexed":true}],"type":"event","name":"BridgeTransferAborted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"bridgeTransferId","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"pre_image","type":"bytes32","indexed":false}],"type":"event","name":"BridgeTransferCompleted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"bridgeTransferId","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"initiator","type":"bytes32","indexed":true},{"internalType":"address","name":"recipient","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false},{"internalType":"bytes32","name":"hashLock","type":"bytes32","indexed":false},{"internalType":"uint256","name":"timeLock","type":"uint256","indexed":false}],"type":"event","name":"BridgeTransferLocked","anonymous":false},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"bridgeTransferId","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"abortBridgeTransfer"},{"inputs":[],"stateMutability":"view","type":"function","name":"atomicBridgeInitiator","outputs":[{"internalType":"contract AtomicBridgeInitiator","name":"","type":"address"}]},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"bridgeTransfers","outputs":[{"internalType":"bytes32","name":"originator","type":"bytes32"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32","name":"hashLock","type":"bytes32"},{"internalType":"uint256","name":"timeLock","type":"uint256"},{"internalType":"enum AtomicBridgeCounterparty.MessageState","name":"state","type":"uint8"}]},{"inputs":[{"internalType":"bytes32","name":"bridgeTransferId","type":"bytes32"},{"internalType":"bytes32","name":"preImage","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"completeBridgeTransfer"},{"inputs":[],"stateMutability":"view","type":"function","name":"counterpartyTimeLockDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"_atomicBridgeInitiator","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"_timeLockDuration","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[{"internalType":"bytes32","name":"originator","type":"bytes32"},{"internalType":"bytes32","name":"bridgeTransferId","type":"bytes32"},{"internalType":"bytes32","name":"hashLock","type":"bytes32"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"lockBridgeTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"address","name":"_atomicBridgeInitiator","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setAtomicBridgeInitiator"},{"inputs":[{"internalType":"uint256","name":"_timeLockDuration","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"setTimeLockDuration"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"}],"devdoc":{"kind":"dev","methods":{"abortBridgeTransfer(bytes32)":{"details":"Cancels the bridge transfer and refunds the initiator if the timelock has expired","params":{"bridgeTransferId":"Unique identifier for the BridgeTransfer"}},"completeBridgeTransfer(bytes32,bytes32)":{"details":"Completes the bridge transfer and withdraws WETH to the recipient","params":{"bridgeTransferId":"Unique identifier for the BridgeTransfer","preImage":"The secret that unlocks the funds"}},"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/AtomicBridgeCounterparty.sol":"AtomicBridgeCounterparty"},"evmVersion":"cancun","libraries":{}},"sources":{"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a","urls":["bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6","dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b","urls":["bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609","dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397","urls":["bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9","dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0xee2337af2dc162a973b4be6d3f7c16f06298259e0af48c5470d2839bfa8a22f4","urls":["bzz-raw://30c476b4b2f405c1bb3f0bae15b006d129c80f1bfd9d0f2038160a3bb9745009","dweb:/ipfs/Qmb3VcuDufv6xbHeVgksC4tHpc5gKYVqBEwjEXW72XzSvN"],"license":"MIT"},"src/AtomicBridgeCounterparty.sol":{"keccak256":"0xd19b77150bb338ff6888266daf727a718076be3c3b2fa9b8d7e3775956d494ba","urls":["bzz-raw://d8b0a4a373cb1f72ae57cf472dc42f13a733c44ac4921696c449a48ea0b72905","dweb:/ipfs/QmWatkgLiibK3EFZ3QmD8perXjrDp3yrp4wQPeTqT4KiQo"],"license":"MIT"},"src/AtomicBridgeInitiator.sol":{"keccak256":"0xa331acc393bc52e014ca46b18b5b3127075c995509fb2b898415087ea3276c32","urls":["bzz-raw://e7f05a3dc5fddae0daf8617027f2704493d0214c95e80888a2f40ddbbc3c85ab","dweb:/ipfs/Qmc9VjwVQ9aNVC5S7Vfsh1pmUbCDQBiXiqJ3JcbEfaZ5wd"],"license":null},"src/IAtomicBridgeCounterparty.sol":{"keccak256":"0x8065ecbe50db48acb79eae9e8184996f95b75407de9f79b9aee473190e069f50","urls":["bzz-raw://2d401c7b17ec7cb49133c1c03724e3285687699f168e1b6f4a5ee8c10f95f507","dweb:/ipfs/QmTaiGr4Pa1uYrwBJ5uywFbZSLxWT9KH9NbgdET2J7ADwr"],"license":null},"src/IAtomicBridgeInitiator.sol":{"keccak256":"0x8397d0de470d4fe4f52ae03292085532b2d1681b5bd332992d303d3e630047be","urls":["bzz-raw://4c8826a0ee54c30746ddb91e35a7ef9c0e33acb68c19a0424a05237b3b02753f","dweb:/ipfs/QmPrPd8hpdmiXryYYSycChgrnHwsaTgHp4xJL3wLT3mRmz"],"license":"MIT"},"src/IWETH9.sol":{"keccak256":"0xff29528c0f48eaad5156c8d66ccd8f754037bba234434807db302e604db9f9a5","urls":["bzz-raw://a7322b029eb6cd2bbf204fb879947a91aad09bca79373583e5c5b7a2630a6c6b","dweb:/ipfs/QmfLWmtiEhdTiD5kFNruHiMYs4dY5joGgJQ4HU2wCTHF6E"],"license":null}},"version":1},"id":39} +{"abi":[{"type":"function","name":"abortBridgeTransfer","inputs":[{"name":"bridgeTransferId","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"atomicBridgeInitiator","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract AtomicBridgeInitiator"}],"stateMutability":"view"},{"type":"function","name":"bridgeTransfers","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"originator","type":"bytes32","internalType":"bytes32"},{"name":"recipient","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"hashLock","type":"bytes32","internalType":"bytes32"},{"name":"timeLock","type":"uint256","internalType":"uint256"},{"name":"state","type":"uint8","internalType":"enum AtomicBridgeCounterparty.MessageState"}],"stateMutability":"view"},{"type":"function","name":"completeBridgeTransfer","inputs":[{"name":"bridgeTransferId","type":"bytes32","internalType":"bytes32"},{"name":"preImage","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"counterpartyTimeLockDuration","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"_atomicBridgeInitiator","type":"address","internalType":"address"},{"name":"owner","type":"address","internalType":"address"},{"name":"_timeLockDuration","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"lockBridgeTransfer","inputs":[{"name":"originator","type":"bytes32","internalType":"bytes32"},{"name":"bridgeTransferId","type":"bytes32","internalType":"bytes32"},{"name":"hashLock","type":"bytes32","internalType":"bytes32"},{"name":"recipient","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setAtomicBridgeInitiator","inputs":[{"name":"_atomicBridgeInitiator","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setTimeLockDuration","inputs":[{"name":"_timeLockDuration","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"BridgeTransferAborted","inputs":[{"name":"bridgeTransferId","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"BridgeTransferCompleted","inputs":[{"name":"bridgeTransferId","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"pre_image","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"BridgeTransferLocked","inputs":[{"name":"bridgeTransferId","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"initiator","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"recipient","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"hashLock","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"timeLock","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"BridgeTransferHasBeenCompleted","inputs":[]},{"type":"error","name":"BridgeTransferInvalid","inputs":[]},{"type":"error","name":"BridgeTransferStateNotInitialized","inputs":[]},{"type":"error","name":"BridgeTransferStateNotPending","inputs":[]},{"type":"error","name":"InsufficientWethBalance","inputs":[]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"InvalidSecret","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"}]},{"type":"error","name":"TimeLockExpired","inputs":[]},{"type":"error","name":"TimeLockNotExpired","inputs":[]},{"type":"error","name":"Unauthorized","inputs":[]},{"type":"error","name":"WETHTransferFailed","inputs":[]},{"type":"error","name":"ZeroAddress","inputs":[]},{"type":"error","name":"ZeroAmount","inputs":[]}],"bytecode":{"object":"0x6080604052348015600e575f80fd5b50610d348061001c5f395ff3fe608060405234801561000f575f80fd5b50600436106100b1575f3560e01c806396d17d491161006e57806396d17d49146101645780639f8f87991461017b578063c95b659f1461018e578063e0d9cbc4146101a1578063ee2c59f814610203578063f2fde38b14610215575f80fd5b80631794bb3c146100b557806327b3ea07146100ca57806371115eb2146100f2578063715018a6146101055780637ce087481461010d5780638da5cb5b14610120575b5f80fd5b6100c86100c3366004610b21565b610228565b005b6100dd6100d8366004610b5b565b61037e565b60405190151581526020015b60405180910390f35b6100c8610100366004610b9e565b610654565b6100c8610661565b6100c861011b366004610bb5565b610674565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b0390911681526020016100e9565b61016d60025481565b6040519081526020016100e9565b6100c8610189366004610bd5565b6106c4565b6100c861019c366004610b9e565b610839565b6101f16101af366004610b9e565b600160208190525f91825260409091208054918101546002820154600383015460048401546005909401546001600160a01b0390931693919290919060ff1686565b6040516100e996959493929190610c09565b5f5461014c906001600160a01b031681565b6100c8610223366004610bb5565b6108e7565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f8115801561026d5750825b90505f8267ffffffffffffffff1660011480156102895750303b155b905081158015610297575080155b156102b55760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156102df57845460ff60401b1916600160401b1785555b6001600160a01b0388166103065760405163d92e233d60e01b815260040160405180910390fd5b5f80546001600160a01b0319166001600160a01b038a1617905561032987610929565b6002869055831561037457845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b5f61038761093a565b6103af604051806040016040528060068152602001651250d248095960d21b81525083610995565b815f036103cf57604051631f2a200560e01b815260040160405180910390fd5b6103f46040518060400160405280600481526020016324a1a49960e11b8152506109de565b61048d6040518060400160405280600681526020016518985b0e895960d21b8152505f8054906101000a90046001600160a01b03166001600160a01b03166396365d446040518163ffffffff1660e01b8152600401602060405180830381865afa158015610464573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104889190610c61565b610995565b5f546040805163258d975160e21b8152905184926001600160a01b0316916396365d449160048083019260209291908290030181865afa1580156104d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104f79190610c61565b1015610516576040516318fb0fc360e11b815260040160405180910390fd5b5f600254426105259190610c78565b90506040518060c00160405280888152602001856001600160a01b031681526020018481526020018681526020018281526020015f600281111561056b5761056b610bf5565b90525f87815260016020818152604092839020845181559084015181830180546001600160a01b0319166001600160a01b0390921691909117905591830151600280840191909155606084015160038401556080840151600484015560a08401516005840180549193909260ff199092169184908111156105ee576105ee610bf5565b021790555050600254604080518681526020810189905280820192909252516001600160a01b0387169250899189917f6fd7399514eb976acd637ed4a2435c9466e55428753b71e73e9d00fdcc50f44c9181900360600190a45060019695505050505050565b61065c61093a565b600255565b61066961093a565b6106725f610a21565b565b61067c61093a565b6001600160a01b0381166106a35760405163d92e233d60e01b815260040160405180910390fd5b5f80546001600160a01b0319166001600160a01b0392909216919091179055565b5f82815260016020526040812090600582015460ff1660028111156106eb576106eb610bf5565b146107095760405163a92c04c760e01b815260040160405180910390fd5b5f8260405160200161071d91815260200190565b604051602081830303815290604052805190602001209050816003015481146107595760405163abab6bd760e01b815260040160405180910390fd5b816004015442111561077e5760405163179a39d160e01b815260040160405180910390fd5b60058201805460ff191660019081179091555f549083015460028401546040516324c44ed760e21b81526001600160a01b03928316600482015260248101919091529116906393113b5c906044015f604051808303815f87803b1580156107e3575f80fd5b505af11580156107f5573d5f803e3d5ffd5b50505050837f05ddc886acde01b77731bfad1dcfb6abf529f05c28ea66556fe87429bb2789ea8460405161082b91815260200190565b60405180910390a250505050565b61084161093a565b5f81815260016020526040812090600582015460ff16600281111561086857610868610bf5565b146108865760405163a92c04c760e01b815260040160405180910390fd5b806004015442116108aa5760405163191f4d1b60e31b815260040160405180910390fd5b60058101805460ff1916600217905560405182907f9b398e0a546c4aa218ac0b98f5e2196a7aff605b50c19eb795f9cb3b2f5d5b55905f90a25050565b6108ef61093a565b6001600160a01b03811661091d57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b61092681610a21565b50565b610931610a91565b61092681610ada565b3361096c7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146106725760405163118cdaa760e01b8152336004820152602401610914565b6109da82826040516024016109ab929190610ccb565b60408051601f198184030181529190526020810180516001600160e01b03166309710a9d60e41b179052610ae2565b5050565b610926816040516024016109f29190610cec565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b179052610ae2565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661067257604051631afcd79f60e31b815260040160405180910390fd5b6108ef610a91565b6109268180516a636f6e736f6c652e6c6f67602083015f808483855afa5050505050565b80356001600160a01b0381168114610b1c575f80fd5b919050565b5f805f60608486031215610b33575f80fd5b610b3c84610b06565b9250610b4a60208501610b06565b929592945050506040919091013590565b5f805f805f60a08688031215610b6f575f80fd5b853594506020860135935060408601359250610b8d60608701610b06565b949793965091946080013592915050565b5f60208284031215610bae575f80fd5b5035919050565b5f60208284031215610bc5575f80fd5b610bce82610b06565b9392505050565b5f8060408385031215610be6575f80fd5b50508035926020909101359150565b634e487b7160e01b5f52602160045260245ffd5b8681526001600160a01b038616602082015260408101859052606081018490526080810183905260c0810160038310610c5057634e487b7160e01b5f52602160045260245ffd5b8260a0830152979650505050505050565b5f60208284031215610c71575f80fd5b5051919050565b80820180821115610c9757634e487b7160e01b5f52601160045260245ffd5b92915050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b604081525f610cdd6040830185610c9d565b90508260208301529392505050565b602081525f610bce6020830184610c9d56fea2646970667358221220fea88b87503001979529cb916d4db2d04b68691126d12bb5db3bca7d9a4e430a64736f6c634300081a0033","sourceMap":"350:3772:42:-:0;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561000f575f80fd5b50600436106100b1575f3560e01c806396d17d491161006e57806396d17d49146101645780639f8f87991461017b578063c95b659f1461018e578063e0d9cbc4146101a1578063ee2c59f814610203578063f2fde38b14610215575f80fd5b80631794bb3c146100b557806327b3ea07146100ca57806371115eb2146100f2578063715018a6146101055780637ce087481461010d5780638da5cb5b14610120575b5f80fd5b6100c86100c3366004610b21565b610228565b005b6100dd6100d8366004610b5b565b61037e565b60405190151581526020015b60405180910390f35b6100c8610100366004610b9e565b610654565b6100c8610661565b6100c861011b366004610bb5565b610674565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b0390911681526020016100e9565b61016d60025481565b6040519081526020016100e9565b6100c8610189366004610bd5565b6106c4565b6100c861019c366004610b9e565b610839565b6101f16101af366004610b9e565b600160208190525f91825260409091208054918101546002820154600383015460048401546005909401546001600160a01b0390931693919290919060ff1686565b6040516100e996959493929190610c09565b5f5461014c906001600160a01b031681565b6100c8610223366004610bb5565b6108e7565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f8115801561026d5750825b90505f8267ffffffffffffffff1660011480156102895750303b155b905081158015610297575080155b156102b55760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156102df57845460ff60401b1916600160401b1785555b6001600160a01b0388166103065760405163d92e233d60e01b815260040160405180910390fd5b5f80546001600160a01b0319166001600160a01b038a1617905561032987610929565b6002869055831561037457845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b5f61038761093a565b6103af604051806040016040528060068152602001651250d248095960d21b81525083610995565b815f036103cf57604051631f2a200560e01b815260040160405180910390fd5b6103f46040518060400160405280600481526020016324a1a49960e11b8152506109de565b61048d6040518060400160405280600681526020016518985b0e895960d21b8152505f8054906101000a90046001600160a01b03166001600160a01b03166396365d446040518163ffffffff1660e01b8152600401602060405180830381865afa158015610464573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104889190610c61565b610995565b5f546040805163258d975160e21b8152905184926001600160a01b0316916396365d449160048083019260209291908290030181865afa1580156104d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104f79190610c61565b1015610516576040516318fb0fc360e11b815260040160405180910390fd5b5f600254426105259190610c78565b90506040518060c00160405280888152602001856001600160a01b031681526020018481526020018681526020018281526020015f600281111561056b5761056b610bf5565b90525f87815260016020818152604092839020845181559084015181830180546001600160a01b0319166001600160a01b0390921691909117905591830151600280840191909155606084015160038401556080840151600484015560a08401516005840180549193909260ff199092169184908111156105ee576105ee610bf5565b021790555050600254604080518681526020810189905280820192909252516001600160a01b0387169250899189917f6fd7399514eb976acd637ed4a2435c9466e55428753b71e73e9d00fdcc50f44c9181900360600190a45060019695505050505050565b61065c61093a565b600255565b61066961093a565b6106725f610a21565b565b61067c61093a565b6001600160a01b0381166106a35760405163d92e233d60e01b815260040160405180910390fd5b5f80546001600160a01b0319166001600160a01b0392909216919091179055565b5f82815260016020526040812090600582015460ff1660028111156106eb576106eb610bf5565b146107095760405163a92c04c760e01b815260040160405180910390fd5b5f8260405160200161071d91815260200190565b604051602081830303815290604052805190602001209050816003015481146107595760405163abab6bd760e01b815260040160405180910390fd5b816004015442111561077e5760405163179a39d160e01b815260040160405180910390fd5b60058201805460ff191660019081179091555f549083015460028401546040516324c44ed760e21b81526001600160a01b03928316600482015260248101919091529116906393113b5c906044015f604051808303815f87803b1580156107e3575f80fd5b505af11580156107f5573d5f803e3d5ffd5b50505050837f05ddc886acde01b77731bfad1dcfb6abf529f05c28ea66556fe87429bb2789ea8460405161082b91815260200190565b60405180910390a250505050565b61084161093a565b5f81815260016020526040812090600582015460ff16600281111561086857610868610bf5565b146108865760405163a92c04c760e01b815260040160405180910390fd5b806004015442116108aa5760405163191f4d1b60e31b815260040160405180910390fd5b60058101805460ff1916600217905560405182907f9b398e0a546c4aa218ac0b98f5e2196a7aff605b50c19eb795f9cb3b2f5d5b55905f90a25050565b6108ef61093a565b6001600160a01b03811661091d57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b61092681610a21565b50565b610931610a91565b61092681610ada565b3361096c7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146106725760405163118cdaa760e01b8152336004820152602401610914565b6109da82826040516024016109ab929190610ccb565b60408051601f198184030181529190526020810180516001600160e01b03166309710a9d60e41b179052610ae2565b5050565b610926816040516024016109f29190610cec565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b179052610ae2565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661067257604051631afcd79f60e31b815260040160405180910390fd5b6108ef610a91565b6109268180516a636f6e736f6c652e6c6f67602083015f808483855afa5050505050565b80356001600160a01b0381168114610b1c575f80fd5b919050565b5f805f60608486031215610b33575f80fd5b610b3c84610b06565b9250610b4a60208501610b06565b929592945050506040919091013590565b5f805f805f60a08688031215610b6f575f80fd5b853594506020860135935060408601359250610b8d60608701610b06565b949793965091946080013592915050565b5f60208284031215610bae575f80fd5b5035919050565b5f60208284031215610bc5575f80fd5b610bce82610b06565b9392505050565b5f8060408385031215610be6575f80fd5b50508035926020909101359150565b634e487b7160e01b5f52602160045260245ffd5b8681526001600160a01b038616602082015260408101859052606081018490526080810183905260c0810160038310610c5057634e487b7160e01b5f52602160045260245ffd5b8260a0830152979650505050505050565b5f60208284031215610c71575f80fd5b5051919050565b80820180821115610c9757634e487b7160e01b5f52601160045260245ffd5b92915050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b604081525f610cdd6040830185610c9d565b90508260208301529392505050565b602081525f610bce6020830184610c9d56fea2646970667358221220fea88b87503001979529cb916d4db2d04b68691126d12bb5db3bca7d9a4e430a64736f6c634300081a0033","sourceMap":"350:3772:42:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;995:412;;;;;;:::i;:::-;;:::i;:::-;;1808:1188;;;;;;:::i;:::-;;:::i;:::-;;;1403:14:54;;1396:22;1378:41;;1366:2;1351:18;1808:1188:42;;;;;;;;1662:140;;;;;;:::i;:::-;;:::i;3155:101:23:-;;;:::i;1413:243:42:-;;;;;;:::i;:::-;;:::i;2441:144:23:-;1313:22;2570:8;-1:-1:-1;;;;;2570:8:23;2441:144;;;-1:-1:-1;;;;;2016:32:54;;;1998:51;;1986:2;1971:18;2441:144:23;1852:203:54;945:43:42;;;;;;;;;2206:25:54;;;2194:2;2179:18;945:43:42;2060:177:54;3002:676:42;;;;;;:::i;:::-;;:::i;3684:436::-;;;;;;:::i;:::-;;:::i;835:64::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;835:64:42;;;;;;;;;;;;;;;;;;;;;;;;;:::i;779:50::-;;;;;-1:-1:-1;;;;;779:50:42;;;3405:215:23;;;;;;:::i;:::-;;:::i;995:412:42:-;8870:21:24;4302:15;;-1:-1:-1;;;4302:15:24;;;;4301:16;;4348:14;;4158:30;4726:16;;:34;;;;;4746:14;4726:34;4706:54;;4770:17;4790:11;:16;;4805:1;4790:16;:50;;;;-1:-1:-1;4818:4:24;4810:25;:30;4790:50;4770:70;;4856:12;4855:13;:30;;;;;4873:12;4872:13;4855:30;4851:91;;;4908:23;;-1:-1:-1;;;4908:23:24;;;;;;;;;;;4851:91;4951:18;;-1:-1:-1;;4951:18:24;4968:1;4951:18;;;4979:67;;;;5013:22;;-1:-1:-1;;;;5013:22:24;-1:-1:-1;;;5013:22:24;;;4979:67;-1:-1:-1;;;;;1122:36:42;::::1;1118:62;;1167:13;;-1:-1:-1::0;;;1167:13:42::1;;;;;;;;;;;1118:62;1190:21;:69:::0;;-1:-1:-1;;;;;;1190:69:42::1;-1:-1:-1::0;;;;;1190:69:42;::::1;;::::0;;1269:21:::1;1284:5:::0;1269:14:::1;:21::i;:::-;1352:28;:48:::0;;;5066:101:24;;;;5100:23;;-1:-1:-1;;;;5100:23:24;;;5142:14;;-1:-1:-1;4083:50:54;;5142:14:24;;4071:2:54;4056:18;5142:14:24;;;;;;;5066:101;4092:1081;;;;;995:412:42;;;:::o;1808:1188::-;2009:4;2334:13:23;:11;:13::i;:::-;2025:29:42::1;;;;;;;;;;;;;;-1:-1:-1::0;;;2025:29:42::1;;::::0;2047:6:::1;2025:11;:29::i;:::-;2068:6;2078:1;2068:11:::0;2064:36:::1;;2088:12;;-1:-1:-1::0;;;2088:12:42::1;;;;;;;;;;;2064:36;2110:19;;;;;;;;;;;;;;-1:-1:-1::0;;;2110:19:42::1;;::::0;:11:::1;:19::i;:::-;2139:58;;;;;;;;;;;;;;-1:-1:-1::0;;;2139:58:42::1;;::::0;2161:21:::1;::::0;::::1;;;;;;-1:-1:-1::0;;;;;2161:21:42::1;-1:-1:-1::0;;;;;2161:33:42::1;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2139:11;:58::i;:::-;2212:21;::::0;:35:::1;::::0;;-1:-1:-1;;;2212:35:42;;;;2250:6;;-1:-1:-1;;;;;2212:21:42::1;::::0;:33:::1;::::0;:35:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:21;:35:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;2208:82;;;2265:25;;-1:-1:-1::0;;;2265:25:42::1;;;;;;;;;;;2208:82;2495:16;2532:28;;2514:15;:46;;;;:::i;:::-;2495:65;;2607:236;;;;;;;;2689:10;2607:236;;;;2654:9;-1:-1:-1::0;;;;;2607:236:42::1;;;;;2721:6;2607:236;;;;2751:8;2607:236;;;;2783:8;2607:236;;;;2812:20;2607:236;;;;;;;;:::i;:::-;::::0;;2571:33:::1;::::0;;;:15:::1;:33;::::0;;;;;;;;:272;;;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;;2571:272:42::1;-1:-1:-1::0;;;;;2571:272:42;;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;;2571:272:42;;::::1;::::0;;;;::::1;;;;;;:::i;:::-;;;::::0;;-1:-1:-1;;2939:28:42::1;::::0;2859:109:::1;::::0;;4762:25:54;;;4818:2;4803:18;;4796:34;;;4846:18;;;4839:34;;;;2859:109:42;-1:-1:-1;;;;;2859:109:42;::::1;::::0;-1:-1:-1;2898:10:42;;2880:16;;2859:109:::1;::::0;;;;4750:2:54;2859:109:42;;::::1;-1:-1:-1::0;2985:4:42::1;::::0;1808:1188;-1:-1:-1;;;;;;1808:1188:42:o;1662:140::-;2334:13:23;:11;:13::i;:::-;1747:28:42::1;:48:::0;1662:140::o;3155:101:23:-;2334:13;:11;:13::i;:::-;3219:30:::1;3246:1;3219:18;:30::i;:::-;3155:101::o:0;1413:243:42:-;2334:13:23;:11;:13::i;:::-;-1:-1:-1;;;;;1512:36:42;::::1;1508:62;;1557:13;;-1:-1:-1::0;;;1557:13:42::1;;;;;;;;;;;1508:62;1580:21;:69:::0;;-1:-1:-1;;;;;;1580:69:42::1;-1:-1:-1::0;;;;;1580:69:42;;;::::1;::::0;;;::::1;::::0;;1413:243::o;3002:676::-;3097:37;3137:33;;;:15;:33;;;;;;3184:13;;;;;;:37;;;;;;;;:::i;:::-;;3180:81;;3230:31;;-1:-1:-1;;;3230:31:42;;;;;;;;;;;3180:81;3271:20;3321:8;3304:26;;;;;;5013:19:54;;5057:2;5048:12;;4884:182;3304:26:42;;;;;;;;;;;;;3294:37;;;;;;3271:60;;3361:7;:16;;;3345:12;:32;3341:60;;3386:15;;-1:-1:-1;;;3386:15:42;;;;;;;;;;;3341:60;3433:7;:16;;;3415:15;:34;3411:64;;;3458:17;;-1:-1:-1;;;3458:17:42;;;;;;;;;;;3411:64;3486:13;;;:38;;-1:-1:-1;;3486:38:42;3502:22;3486:38;;;;;;-1:-1:-1;3535:21:42;3570:17;;;;3589:14;;;;3535:69;;-1:-1:-1;;;3535:69:42;;-1:-1:-1;;;;;3570:17:42;;;3535:69;;;5245:51:54;5312:18;;;5305:34;;;;3535:21:42;;;:34;;5218:18:54;;3535:69:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3644:16;3620:51;3662:8;3620:51;;;;2206:25:54;;2194:2;2179:18;;2060:177;3620:51:42;;;;;;;;3087:591;;3002:676;;:::o;3684:436::-;2334:13:23;:11;:13::i;:::-;3768:37:42::1;3808:33:::0;;;:15:::1;:33;::::0;;;;;3855:13:::1;::::0;::::1;::::0;::::1;;:37;::::0;::::1;;;;;;:::i;:::-;;3851:81;;3901:31;;-1:-1:-1::0;;;3901:31:42::1;;;;;;;;;;;3851:81;3965:7;:16;;;3946:15;:35;3942:68;;3990:20;;-1:-1:-1::0;;;3990:20:42::1;;;;;;;;;;;3942:68;4021:13;::::0;::::1;:37:::0;;-1:-1:-1;;4021:37:42::1;4037:21;4021:37;::::0;;4074:39:::1;::::0;4096:16;;4074:39:::1;::::0;-1:-1:-1;;4074:39:42::1;3758:362;3684:436:::0;:::o;3405:215:23:-;2334:13;:11;:13::i;:::-;-1:-1:-1;;;;;3489:22:23;::::1;3485:91;;3534:31;::::0;-1:-1:-1;;;3534:31:23;;3562:1:::1;3534:31;::::0;::::1;1998:51:54::0;1971:18;;3534:31:23::1;;;;;;;;3485:91;3585:28;3604:8;3585:18;:28::i;:::-;3405:215:::0;:::o;1847:127::-;6931:20:24;:18;:20::i;:::-;1929:38:23::1;1954:12;1929:24;:38::i;2658:162::-:0;966:10:26;2717:7:23;1313:22;2570:8;-1:-1:-1;;;;;2570:8:23;;2441:144;2717:7;-1:-1:-1;;;;;2717:23:23;;2713:101;;2763:40;;-1:-1:-1;;;2763:40:23;;966:10:26;2763:40:23;;;1998:51:54;1971:18;;2763:40:23;1852:203:54;7032:139:14;7096:68;7156:2;7160;7112:51;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;7112:51:14;;;;;;;;;;;;;;-1:-1:-1;;;;;7112:51:14;-1:-1:-1;;;7112:51:14;;;7096:15;:68::i;:::-;7032:139;;:::o;6114:121::-;6169:59;6224:2;6185:42;;;;;;;;:::i;:::-;;;;-1:-1:-1;;6185:42:14;;;;;;;;;;;;;;-1:-1:-1;;;;;6185:42:14;-1:-1:-1;;;6185:42:14;;;6169:15;:59::i;3774:248:23:-;1313:22;3923:8;;-1:-1:-1;;;;;;3941:19:23;;-1:-1:-1;;;;;3941:19:23;;;;;;;;3975:40;;3923:8;;;;;3975:40;;3847:24;;3975:40;3837:185;;3774:248;:::o;7084:141:24:-;8870:21;8560:40;-1:-1:-1;;;8560:40:24;;;;7146:73;;7191:17;;-1:-1:-1;;;7191:17:24;;;;;;;;;;;1980:235:23;6931:20:24;:18;:20::i;408:133:14:-;479:55;526:7;645:14;;131:42;818:2;805:16;;621:21;;645:14;805:16;131:42;854:5;843:68;834:77;;771:150;;547:380;:::o;14:173:54:-;82:20;;-1:-1:-1;;;;;131:31:54;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:374::-;269:6;277;285;338:2;326:9;317:7;313:23;309:32;306:52;;;354:1;351;344:12;306:52;377:29;396:9;377:29;:::i;:::-;367:39;;425:38;459:2;448:9;444:18;425:38;:::i;:::-;192:374;;415:48;;-1:-1:-1;;;532:2:54;517:18;;;;504:32;;192:374::o;571:662::-;666:6;674;682;690;698;751:3;739:9;730:7;726:23;722:33;719:53;;;768:1;765;758:12;719:53;813:23;;;-1:-1:-1;933:2:54;918:18;;905:32;;-1:-1:-1;1036:2:54;1021:18;;1008:32;;-1:-1:-1;1085:38:54;1119:2;1104:18;;1085:38;:::i;:::-;571:662;;;;-1:-1:-1;571:662:54;;1196:3;1181:19;1168:33;;571:662;-1:-1:-1;;571:662:54:o;1430:226::-;1489:6;1542:2;1530:9;1521:7;1517:23;1513:32;1510:52;;;1558:1;1555;1548:12;1510:52;-1:-1:-1;1603:23:54;;1430:226;-1:-1:-1;1430:226:54:o;1661:186::-;1720:6;1773:2;1761:9;1752:7;1748:23;1744:32;1741:52;;;1789:1;1786;1779:12;1741:52;1812:29;1831:9;1812:29;:::i;:::-;1802:39;1661:186;-1:-1:-1;;;1661:186:54:o;2242:346::-;2310:6;2318;2371:2;2359:9;2350:7;2346:23;2342:32;2339:52;;;2387:1;2384;2377:12;2339:52;-1:-1:-1;;2432:23:54;;;2552:2;2537:18;;;2524:32;;-1:-1:-1;2242:346:54:o;2824:127::-;2885:10;2880:3;2876:20;2873:1;2866:31;2916:4;2913:1;2906:15;2940:4;2937:1;2930:15;2956:730;3259:25;;;-1:-1:-1;;;;;3320:32:54;;3315:2;3300:18;;3293:60;3384:2;3369:18;;3362:34;;;3427:2;3412:18;;3405:34;;;3470:3;3455:19;;3448:35;;;3246:3;3231:19;;3513:1;3502:13;;3492:144;;3558:10;3553:3;3549:20;3546:1;3539:31;3593:4;3590:1;3583:15;3621:4;3618:1;3611:15;3492:144;3673:6;3667:3;3656:9;3652:19;3645:35;2956:730;;;;;;;;;:::o;4144:184::-;4214:6;4267:2;4255:9;4246:7;4242:23;4238:32;4235:52;;;4283:1;4280;4273:12;4235:52;-1:-1:-1;4306:16:54;;4144:184;-1:-1:-1;4144:184:54:o;4333:222::-;4398:9;;;4419:10;;;4416:133;;;4471:10;4466:3;4462:20;4459:1;4452:31;4506:4;4503:1;4496:15;4534:4;4531:1;4524:15;4416:133;4333:222;;;;:::o;5532:289::-;5574:3;5612:5;5606:12;5639:6;5634:3;5627:19;5695:6;5688:4;5681:5;5677:16;5670:4;5665:3;5661:14;5655:47;5747:1;5740:4;5731:6;5726:3;5722:16;5718:27;5711:38;5810:4;5803:2;5799:7;5794:2;5786:6;5782:15;5778:29;5773:3;5769:39;5765:50;5758:57;;;5532:289;;;;:::o;5826:291::-;6003:2;5992:9;5985:21;5966:4;6023:45;6064:2;6053:9;6049:18;6041:6;6023:45;:::i;:::-;6015:53;;6104:6;6099:2;6088:9;6084:18;6077:34;5826:291;;;;;:::o;6122:220::-;6271:2;6260:9;6253:21;6234:4;6291:45;6332:2;6321:9;6317:18;6309:6;6291:45;:::i","linkReferences":{}},"methodIdentifiers":{"abortBridgeTransfer(bytes32)":"c95b659f","atomicBridgeInitiator()":"ee2c59f8","bridgeTransfers(bytes32)":"e0d9cbc4","completeBridgeTransfer(bytes32,bytes32)":"9f8f8799","counterpartyTimeLockDuration()":"96d17d49","initialize(address,address,uint256)":"1794bb3c","lockBridgeTransfer(bytes32,bytes32,bytes32,address,uint256)":"27b3ea07","owner()":"8da5cb5b","renounceOwnership()":"715018a6","setAtomicBridgeInitiator(address)":"7ce08748","setTimeLockDuration(uint256)":"71115eb2","transferOwnership(address)":"f2fde38b"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"BridgeTransferHasBeenCompleted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeTransferInvalid\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeTransferStateNotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeTransferStateNotPending\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientWethBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSecret\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TimeLockExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TimeLockNotExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WETHTransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAmount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"bridgeTransferId\",\"type\":\"bytes32\"}],\"name\":\"BridgeTransferAborted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"bridgeTransferId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"pre_image\",\"type\":\"bytes32\"}],\"name\":\"BridgeTransferCompleted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"bridgeTransferId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"initiator\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"hashLock\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timeLock\",\"type\":\"uint256\"}],\"name\":\"BridgeTransferLocked\",\"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\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"bridgeTransferId\",\"type\":\"bytes32\"}],\"name\":\"abortBridgeTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"atomicBridgeInitiator\",\"outputs\":[{\"internalType\":\"contract AtomicBridgeInitiator\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"bridgeTransfers\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"originator\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"hashLock\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"timeLock\",\"type\":\"uint256\"},{\"internalType\":\"enum AtomicBridgeCounterparty.MessageState\",\"name\":\"state\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"bridgeTransferId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"preImage\",\"type\":\"bytes32\"}],\"name\":\"completeBridgeTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"counterpartyTimeLockDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_atomicBridgeInitiator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_timeLockDuration\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"originator\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"bridgeTransferId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"hashLock\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"lockBridgeTransfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_atomicBridgeInitiator\",\"type\":\"address\"}],\"name\":\"setAtomicBridgeInitiator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_timeLockDuration\",\"type\":\"uint256\"}],\"name\":\"setTimeLockDuration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"}},\"kind\":\"dev\",\"methods\":{\"abortBridgeTransfer(bytes32)\":{\"details\":\"Cancels the bridge transfer and refunds the initiator if the timelock has expired\",\"params\":{\"bridgeTransferId\":\"Unique identifier for the BridgeTransfer\"}},\"completeBridgeTransfer(bytes32,bytes32)\":{\"details\":\"Completes the bridge transfer and withdraws WETH to the recipient\",\"params\":{\"bridgeTransferId\":\"Unique identifier for the BridgeTransfer\",\"preImage\":\"The secret that unlocks the funds\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/AtomicBridgeCounterparty.sol\":\"AtomicBridgeCounterparty\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"]},\"sources\":{\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0xf61cb43a94d8318049d0a7f567af8c0aa952b5762a43851b130b90b3fcde0c6a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://53a52c6c3aeb22f7a18f53fca16af590308a8e3e5507e74df9b8e2561c932194\",\"dweb:/ipfs/QmaaXuY8mC66YoE2xyZdWuLHXqAxLjbnNxiofx8BTP1MRn\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xee2337af2dc162a973b4be6d3f7c16f06298259e0af48c5470d2839bfa8a22f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30c476b4b2f405c1bb3f0bae15b006d129c80f1bfd9d0f2038160a3bb9745009\",\"dweb:/ipfs/Qmb3VcuDufv6xbHeVgksC4tHpc5gKYVqBEwjEXW72XzSvN\"]},\"src/AtomicBridgeCounterparty.sol\":{\"keccak256\":\"0x6a9111ae8b1641c47e6badb450d7f115dc801f6539a4915604d0b93fe3d44f6a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://991dd1ada923b129d01a84d3a1dab1b48339d9cb115a864f4332edd3a9fb593e\",\"dweb:/ipfs/QmZR17WdEckueAUVSPUwhSsmxW4ouaYmzqsxeHCGxLWzaQ\"]},\"src/AtomicBridgeInitiator.sol\":{\"keccak256\":\"0x6315fbce7e2d22e4721d0ebeea7ae67d4cf695d3ebaafcc7b87ad9f2253fbaf6\",\"urls\":[\"bzz-raw://bb1c4b7c36654328f932064102e67cfe2a14b38320af331a25d9cbad26cb23df\",\"dweb:/ipfs/QmWJuM3Nz1GQAyAxqwedgqFay4eWo7Yuw1fd1mTw75nGEg\"]},\"src/IAtomicBridgeCounterparty.sol\":{\"keccak256\":\"0xfd6c7042a2f958f1eab7dab38c0818c77005e1f0358f794ca211f4c9c6604d91\",\"urls\":[\"bzz-raw://bc6edb9efe13864a0d7d094bfecdb4e94db3121041c27149c7fbbd17de05feaa\",\"dweb:/ipfs/QmbuoncMXB6uP8ChyK2r1kWYV5ujTU557Z2Ryj2BJjdFBX\"]},\"src/IAtomicBridgeInitiator.sol\":{\"keccak256\":\"0x8397d0de470d4fe4f52ae03292085532b2d1681b5bd332992d303d3e630047be\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4c8826a0ee54c30746ddb91e35a7ef9c0e33acb68c19a0424a05237b3b02753f\",\"dweb:/ipfs/QmPrPd8hpdmiXryYYSycChgrnHwsaTgHp4xJL3wLT3mRmz\"]},\"src/IWETH9.sol\":{\"keccak256\":\"0xff29528c0f48eaad5156c8d66ccd8f754037bba234434807db302e604db9f9a5\",\"urls\":[\"bzz-raw://a7322b029eb6cd2bbf204fb879947a91aad09bca79373583e5c5b7a2630a6c6b\",\"dweb:/ipfs/QmfLWmtiEhdTiD5kFNruHiMYs4dY5joGgJQ4HU2wCTHF6E\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[],"type":"error","name":"BridgeTransferHasBeenCompleted"},{"inputs":[],"type":"error","name":"BridgeTransferInvalid"},{"inputs":[],"type":"error","name":"BridgeTransferStateNotInitialized"},{"inputs":[],"type":"error","name":"BridgeTransferStateNotPending"},{"inputs":[],"type":"error","name":"InsufficientWethBalance"},{"inputs":[],"type":"error","name":"InvalidInitialization"},{"inputs":[],"type":"error","name":"InvalidSecret"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"OwnableInvalidOwner"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"type":"error","name":"OwnableUnauthorizedAccount"},{"inputs":[],"type":"error","name":"TimeLockExpired"},{"inputs":[],"type":"error","name":"TimeLockNotExpired"},{"inputs":[],"type":"error","name":"Unauthorized"},{"inputs":[],"type":"error","name":"WETHTransferFailed"},{"inputs":[],"type":"error","name":"ZeroAddress"},{"inputs":[],"type":"error","name":"ZeroAmount"},{"inputs":[{"internalType":"bytes32","name":"bridgeTransferId","type":"bytes32","indexed":true}],"type":"event","name":"BridgeTransferAborted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"bridgeTransferId","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"pre_image","type":"bytes32","indexed":false}],"type":"event","name":"BridgeTransferCompleted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"bridgeTransferId","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"initiator","type":"bytes32","indexed":true},{"internalType":"address","name":"recipient","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false},{"internalType":"bytes32","name":"hashLock","type":"bytes32","indexed":false},{"internalType":"uint256","name":"timeLock","type":"uint256","indexed":false}],"type":"event","name":"BridgeTransferLocked","anonymous":false},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"bridgeTransferId","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"abortBridgeTransfer"},{"inputs":[],"stateMutability":"view","type":"function","name":"atomicBridgeInitiator","outputs":[{"internalType":"contract AtomicBridgeInitiator","name":"","type":"address"}]},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"bridgeTransfers","outputs":[{"internalType":"bytes32","name":"originator","type":"bytes32"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32","name":"hashLock","type":"bytes32"},{"internalType":"uint256","name":"timeLock","type":"uint256"},{"internalType":"enum AtomicBridgeCounterparty.MessageState","name":"state","type":"uint8"}]},{"inputs":[{"internalType":"bytes32","name":"bridgeTransferId","type":"bytes32"},{"internalType":"bytes32","name":"preImage","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"completeBridgeTransfer"},{"inputs":[],"stateMutability":"view","type":"function","name":"counterpartyTimeLockDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"_atomicBridgeInitiator","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"_timeLockDuration","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[{"internalType":"bytes32","name":"originator","type":"bytes32"},{"internalType":"bytes32","name":"bridgeTransferId","type":"bytes32"},{"internalType":"bytes32","name":"hashLock","type":"bytes32"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"lockBridgeTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"address","name":"_atomicBridgeInitiator","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setAtomicBridgeInitiator"},{"inputs":[{"internalType":"uint256","name":"_timeLockDuration","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"setTimeLockDuration"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"}],"devdoc":{"kind":"dev","methods":{"abortBridgeTransfer(bytes32)":{"details":"Cancels the bridge transfer and refunds the initiator if the timelock has expired","params":{"bridgeTransferId":"Unique identifier for the BridgeTransfer"}},"completeBridgeTransfer(bytes32,bytes32)":{"details":"Completes the bridge transfer and withdraws WETH to the recipient","params":{"bridgeTransferId":"Unique identifier for the BridgeTransfer","preImage":"The secret that unlocks the funds"}},"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/AtomicBridgeCounterparty.sol":"AtomicBridgeCounterparty"},"evmVersion":"cancun","libraries":{}},"sources":{"lib/forge-std/src/console.sol":{"keccak256":"0xf61cb43a94d8318049d0a7f567af8c0aa952b5762a43851b130b90b3fcde0c6a","urls":["bzz-raw://53a52c6c3aeb22f7a18f53fca16af590308a8e3e5507e74df9b8e2561c932194","dweb:/ipfs/QmaaXuY8mC66YoE2xyZdWuLHXqAxLjbnNxiofx8BTP1MRn"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a","urls":["bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6","dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b","urls":["bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609","dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397","urls":["bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9","dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0xee2337af2dc162a973b4be6d3f7c16f06298259e0af48c5470d2839bfa8a22f4","urls":["bzz-raw://30c476b4b2f405c1bb3f0bae15b006d129c80f1bfd9d0f2038160a3bb9745009","dweb:/ipfs/Qmb3VcuDufv6xbHeVgksC4tHpc5gKYVqBEwjEXW72XzSvN"],"license":"MIT"},"src/AtomicBridgeCounterparty.sol":{"keccak256":"0x6a9111ae8b1641c47e6badb450d7f115dc801f6539a4915604d0b93fe3d44f6a","urls":["bzz-raw://991dd1ada923b129d01a84d3a1dab1b48339d9cb115a864f4332edd3a9fb593e","dweb:/ipfs/QmZR17WdEckueAUVSPUwhSsmxW4ouaYmzqsxeHCGxLWzaQ"],"license":"MIT"},"src/AtomicBridgeInitiator.sol":{"keccak256":"0x6315fbce7e2d22e4721d0ebeea7ae67d4cf695d3ebaafcc7b87ad9f2253fbaf6","urls":["bzz-raw://bb1c4b7c36654328f932064102e67cfe2a14b38320af331a25d9cbad26cb23df","dweb:/ipfs/QmWJuM3Nz1GQAyAxqwedgqFay4eWo7Yuw1fd1mTw75nGEg"],"license":null},"src/IAtomicBridgeCounterparty.sol":{"keccak256":"0xfd6c7042a2f958f1eab7dab38c0818c77005e1f0358f794ca211f4c9c6604d91","urls":["bzz-raw://bc6edb9efe13864a0d7d094bfecdb4e94db3121041c27149c7fbbd17de05feaa","dweb:/ipfs/QmbuoncMXB6uP8ChyK2r1kWYV5ujTU557Z2Ryj2BJjdFBX"],"license":null},"src/IAtomicBridgeInitiator.sol":{"keccak256":"0x8397d0de470d4fe4f52ae03292085532b2d1681b5bd332992d303d3e630047be","urls":["bzz-raw://4c8826a0ee54c30746ddb91e35a7ef9c0e33acb68c19a0424a05237b3b02753f","dweb:/ipfs/QmPrPd8hpdmiXryYYSycChgrnHwsaTgHp4xJL3wLT3mRmz"],"license":"MIT"},"src/IWETH9.sol":{"keccak256":"0xff29528c0f48eaad5156c8d66ccd8f754037bba234434807db302e604db9f9a5","urls":["bzz-raw://a7322b029eb6cd2bbf204fb879947a91aad09bca79373583e5c5b7a2630a6c6b","dweb:/ipfs/QmfLWmtiEhdTiD5kFNruHiMYs4dY5joGgJQ4HU2wCTHF6E"],"license":null}},"version":1},"id":42} diff --git a/protocol-units/bridge/service/abis/AtomicBridgeInitiator.json b/protocol-units/bridge/service/abis/AtomicBridgeInitiator.json index 6dfb5201c..56c8e4896 100644 --- a/protocol-units/bridge/service/abis/AtomicBridgeInitiator.json +++ b/protocol-units/bridge/service/abis/AtomicBridgeInitiator.json @@ -1 +1 @@ -{"abi":[{"type":"function","name":"bridgeTransfers","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"originator","type":"address","internalType":"address"},{"name":"recipient","type":"bytes32","internalType":"bytes32"},{"name":"hashLock","type":"bytes32","internalType":"bytes32"},{"name":"timeLock","type":"uint256","internalType":"uint256"},{"name":"state","type":"uint8","internalType":"enum AtomicBridgeInitiator.MessageState"}],"stateMutability":"view"},{"type":"function","name":"completeBridgeTransfer","inputs":[{"name":"bridgeTransferId","type":"bytes32","internalType":"bytes32"},{"name":"preImage","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"counterpartyAddress","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"_weth","type":"address","internalType":"address"},{"name":"owner","type":"address","internalType":"address"},{"name":"_timeLockDuration","type":"uint256","internalType":"uint256"},{"name":"_initialPoolBalance","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"initiateBridgeTransfer","inputs":[{"name":"wethAmount","type":"uint256","internalType":"uint256"},{"name":"recipient","type":"bytes32","internalType":"bytes32"},{"name":"hashLock","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"bridgeTransferId","type":"bytes32","internalType":"bytes32"}],"stateMutability":"payable"},{"type":"function","name":"initiatorTimeLockDuration","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"poolBalance","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"refundBridgeTransfer","inputs":[{"name":"bridgeTransferId","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setCounterpartyAddress","inputs":[{"name":"_counterpartyAddress","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"weth","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IWETH9"}],"stateMutability":"view"},{"type":"function","name":"withdrawWETH","inputs":[{"name":"recipient","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"BridgeTransferCompleted","inputs":[{"name":"_bridgeTransferId","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"pre_image","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"BridgeTransferInitiated","inputs":[{"name":"_bridgeTransferId","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"_originator","type":"address","indexed":true,"internalType":"address"},{"name":"_recipient","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"_hashLock","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_timeLock","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"BridgeTransferRefunded","inputs":[{"name":"_bridgeTransferId","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"BridgeTransferHasBeenCompleted","inputs":[]},{"type":"error","name":"BridgeTransferInvalid","inputs":[]},{"type":"error","name":"BridgeTransferStateNotInitialized","inputs":[]},{"type":"error","name":"InsufficientWethBalance","inputs":[]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"InvalidSecret","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"}]},{"type":"error","name":"TimeLockExpired","inputs":[]},{"type":"error","name":"TimeLockNotExpired","inputs":[]},{"type":"error","name":"Unauthorized","inputs":[]},{"type":"error","name":"WETHTransferFailed","inputs":[]},{"type":"error","name":"ZeroAddress","inputs":[]},{"type":"error","name":"ZeroAmount","inputs":[]}],"bytecode":{"object":"0x6080604052348015600e575f80fd5b50610feb8061001c5f395ff3fe6080604052600436106100d8575f3560e01c80638da5cb5b1161007c5780639f8f8799116100575780639f8f879914610231578063e0d9cbc414610250578063eb990c59146102bd578063f2fde38b146102dc575f80fd5b80638da5cb5b146101c157806393113b5c146101fd57806396365d441461021c575f80fd5b80632b3948bb116100b75780632b3948bb1461015a5780633fc8cef31461016f578063578080201461018e578063715018a6146101ad575f80fd5b80621a153e146100dc5780631a8849a4146100fd5780631f92c08e14610123575b5f80fd5b3480156100e7575f80fd5b506100fb6100f6366004610db6565b6102fb565b005b61011061010b366004610dd6565b61034c565b6040519081526020015b60405180910390f35b34801561012e575f80fd5b50600254610142906001600160a01b031681565b6040516001600160a01b03909116815260200161011a565b348015610165575f80fd5b5061011060055481565b34801561017a575f80fd5b50600354610142906001600160a01b031681565b348015610199575f80fd5b506100fb6101a8366004610dff565b610635565b3480156101b8575f80fd5b506100fb610794565b3480156101cc575f80fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b0316610142565b348015610208575f80fd5b506100fb610217366004610e16565b6107a7565b348015610227575f80fd5b5061011060015481565b34801561023c575f80fd5b506100fb61024b366004610e3e565b61089f565b34801561025b575f80fd5b506102ab61026a366004610dff565b5f6020819052908152604090208054600182015460028301546003840154600485015460059095015493946001600160a01b03909316939192909160ff1686565b60405161011a96959493929190610e72565b3480156102c8575f80fd5b506100fb6102d7366004610eca565b610a63565b3480156102e7575f80fd5b506100fb6102f6366004610db6565b610bc0565b610303610c02565b6001600160a01b03811661032a5760405163d92e233d60e01b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b5f33348261035a8288610f1d565b9050805f0361037c57604051631f2a200560e01b815260040160405180910390fd5b81156103e75760035f9054906101000a90046001600160a01b03166001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004015f604051808303818588803b1580156103cf575f80fd5b505af11580156103e1573d5f803e3d5ffd5b50505050505b8615610484576003546040516323b872dd60e01b81526001600160a01b038581166004830152306024830152604482018a9052909116906323b872dd906064016020604051808303815f875af1158015610443573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104679190610f36565b61048457604051630dd0c8f760e41b815260040160405180910390fd5b8060015f8282546104959190610f1d565b90915550506005546004805485928992899242915f6104b383610f55565b9091555060405160609690961b6bffffffffffffffffffffffff19166020870152603486019490945260548501929092526074840152609483015260b482015260d4016040516020818303038152906040528051906020012093506040518060c00160405280828152602001846001600160a01b03168152602001878152602001868152602001600554426105489190610f1d565b81525f60209182018190528681528082526040908190208351815591830151600180840180546001600160a01b0319166001600160a01b039093169290921790915590830151600280840191909155606084015160038401556080840151600484015560a08401516005840180549193909260ff199092169184908111156105d2576105d2610e5e565b021790555050600554604080518481526020810189905280820192909252518892506001600160a01b0386169187917f44e287be4fbd3a2dcc143a376301094fd2f809dcc2a8d3c09d0a0715224766c49181900360600190a45050509392505050565b61063d610c02565b5f81815260208190526040812090600582015460ff16600281111561066457610664610e5e565b1461068257604051630ffb9dcb60e01b815260040160405180910390fd5b80600401544210156106a75760405163191f4d1b60e31b815260040160405180910390fd5b60058101805460ff191660021790558054600180545f906106c9908490610f6d565b90915550506003546001820154825460405163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291169063a9059cbb906044016020604051808303815f875af1158015610725573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107499190610f36565b61076657604051630dd0c8f760e41b815260040160405180910390fd5b60405182907f4fee0a65c921e50a9623c3abe10a4067e49c03ef491e7b406dace7cb79c12c61905f90a25050565b61079c610c02565b6107a55f610c5d565b565b6002546001600160a01b031633146107d1576040516282b42960e81b815260040160405180910390fd5b8060015410156107f4576040516318fb0fc360e11b815260040160405180910390fd5b8060015f8282546108059190610f6d565b909155505060035460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb906044016020604051808303815f875af115801561085a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087e9190610f36565b61089b57604051630dd0c8f760e41b815260040160405180910390fd5b5050565b5f805f8481526020019081526020015f2090506108dd6040518060400160405280600a815260200169494349206265666f726560b01b815250610ccd565b5f600582015460ff1660028111156108f7576108f7610e5e565b1461091557604051630437880960e41b815260040160405180910390fd5b6109486040518060400160405280601281526020017149434920616674657220636f6d706c65746560701b815250610ccd565b6003810154604080516020810185905201604051602081830303815290604052805190602001201461098d5760405163abab6bd760e01b815260040160405180910390fd5b6109c36040518060400160405280601581526020017449434920616674657220696e76616c69642073656360581b815250610ccd565b80600401544211156109e85760405163179a39d160e01b815260040160405180910390fd5b610a1a6040518060400160405280601181526020017004943492061667465722074696d6565787607c1b815250610ccd565b60058101805460ff1916600117905560405182815283907f05ddc886acde01b77731bfad1dcfb6abf529f05c28ea66556fe87429bb2789ea9060200160405180910390a2505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f81158015610aa85750825b90505f8267ffffffffffffffff166001148015610ac45750303b155b905081158015610ad2575080155b15610af05760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610b1a57845460ff60401b1916600160401b1785555b6001600160a01b038916610b415760405163d92e233d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b038b16179055610b6588610d10565b600587905560018690558315610bb557845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b610bc8610c02565b6001600160a01b038116610bf657604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b610bff81610c5d565b50565b33610c347f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146107a55760405163118cdaa760e01b8152336004820152602401610bed565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b610bff81604051602401610ce19190610f80565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b179052610d21565b610d18610d2a565b610bff81610d73565b610bff81610d7b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166107a557604051631afcd79f60e31b815260040160405180910390fd5b610bc8610d2a565b80516a636f6e736f6c652e6c6f67602083015f808483855afa5050505050565b80356001600160a01b0381168114610db1575f80fd5b919050565b5f60208284031215610dc6575f80fd5b610dcf82610d9b565b9392505050565b5f805f60608486031215610de8575f80fd5b505081359360208301359350604090920135919050565b5f60208284031215610e0f575f80fd5b5035919050565b5f8060408385031215610e27575f80fd5b610e3083610d9b565b946020939093013593505050565b5f8060408385031215610e4f575f80fd5b50508035926020909101359150565b634e487b7160e01b5f52602160045260245ffd5b8681526001600160a01b038616602082015260408101859052606081018490526080810183905260c0810160038310610eb957634e487b7160e01b5f52602160045260245ffd5b8260a0830152979650505050505050565b5f805f8060808587031215610edd575f80fd5b610ee685610d9b565b9350610ef460208601610d9b565b93969395505050506040820135916060013590565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610f3057610f30610f09565b92915050565b5f60208284031215610f46575f80fd5b81518015158114610dcf575f80fd5b5f60018201610f6657610f66610f09565b5060010190565b81810381811115610f3057610f30610f09565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fea2646970667358221220984d19f9b7c1388ea590281265923d4cd4ab13c7dc037411df4f448c47f7fcdd64736f6c634300081a0033","sourceMap":"282:4955:44:-:0;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436106100d8575f3560e01c80638da5cb5b1161007c5780639f8f8799116100575780639f8f879914610231578063e0d9cbc414610250578063eb990c59146102bd578063f2fde38b146102dc575f80fd5b80638da5cb5b146101c157806393113b5c146101fd57806396365d441461021c575f80fd5b80632b3948bb116100b75780632b3948bb1461015a5780633fc8cef31461016f578063578080201461018e578063715018a6146101ad575f80fd5b80621a153e146100dc5780631a8849a4146100fd5780631f92c08e14610123575b5f80fd5b3480156100e7575f80fd5b506100fb6100f6366004610db6565b6102fb565b005b61011061010b366004610dd6565b61034c565b6040519081526020015b60405180910390f35b34801561012e575f80fd5b50600254610142906001600160a01b031681565b6040516001600160a01b03909116815260200161011a565b348015610165575f80fd5b5061011060055481565b34801561017a575f80fd5b50600354610142906001600160a01b031681565b348015610199575f80fd5b506100fb6101a8366004610dff565b610635565b3480156101b8575f80fd5b506100fb610794565b3480156101cc575f80fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b0316610142565b348015610208575f80fd5b506100fb610217366004610e16565b6107a7565b348015610227575f80fd5b5061011060015481565b34801561023c575f80fd5b506100fb61024b366004610e3e565b61089f565b34801561025b575f80fd5b506102ab61026a366004610dff565b5f6020819052908152604090208054600182015460028301546003840154600485015460059095015493946001600160a01b03909316939192909160ff1686565b60405161011a96959493929190610e72565b3480156102c8575f80fd5b506100fb6102d7366004610eca565b610a63565b3480156102e7575f80fd5b506100fb6102f6366004610db6565b610bc0565b610303610c02565b6001600160a01b03811661032a5760405163d92e233d60e01b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b5f33348261035a8288610f1d565b9050805f0361037c57604051631f2a200560e01b815260040160405180910390fd5b81156103e75760035f9054906101000a90046001600160a01b03166001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004015f604051808303818588803b1580156103cf575f80fd5b505af11580156103e1573d5f803e3d5ffd5b50505050505b8615610484576003546040516323b872dd60e01b81526001600160a01b038581166004830152306024830152604482018a9052909116906323b872dd906064016020604051808303815f875af1158015610443573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104679190610f36565b61048457604051630dd0c8f760e41b815260040160405180910390fd5b8060015f8282546104959190610f1d565b90915550506005546004805485928992899242915f6104b383610f55565b9091555060405160609690961b6bffffffffffffffffffffffff19166020870152603486019490945260548501929092526074840152609483015260b482015260d4016040516020818303038152906040528051906020012093506040518060c00160405280828152602001846001600160a01b03168152602001878152602001868152602001600554426105489190610f1d565b81525f60209182018190528681528082526040908190208351815591830151600180840180546001600160a01b0319166001600160a01b039093169290921790915590830151600280840191909155606084015160038401556080840151600484015560a08401516005840180549193909260ff199092169184908111156105d2576105d2610e5e565b021790555050600554604080518481526020810189905280820192909252518892506001600160a01b0386169187917f44e287be4fbd3a2dcc143a376301094fd2f809dcc2a8d3c09d0a0715224766c49181900360600190a45050509392505050565b61063d610c02565b5f81815260208190526040812090600582015460ff16600281111561066457610664610e5e565b1461068257604051630ffb9dcb60e01b815260040160405180910390fd5b80600401544210156106a75760405163191f4d1b60e31b815260040160405180910390fd5b60058101805460ff191660021790558054600180545f906106c9908490610f6d565b90915550506003546001820154825460405163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291169063a9059cbb906044016020604051808303815f875af1158015610725573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107499190610f36565b61076657604051630dd0c8f760e41b815260040160405180910390fd5b60405182907f4fee0a65c921e50a9623c3abe10a4067e49c03ef491e7b406dace7cb79c12c61905f90a25050565b61079c610c02565b6107a55f610c5d565b565b6002546001600160a01b031633146107d1576040516282b42960e81b815260040160405180910390fd5b8060015410156107f4576040516318fb0fc360e11b815260040160405180910390fd5b8060015f8282546108059190610f6d565b909155505060035460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb906044016020604051808303815f875af115801561085a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087e9190610f36565b61089b57604051630dd0c8f760e41b815260040160405180910390fd5b5050565b5f805f8481526020019081526020015f2090506108dd6040518060400160405280600a815260200169494349206265666f726560b01b815250610ccd565b5f600582015460ff1660028111156108f7576108f7610e5e565b1461091557604051630437880960e41b815260040160405180910390fd5b6109486040518060400160405280601281526020017149434920616674657220636f6d706c65746560701b815250610ccd565b6003810154604080516020810185905201604051602081830303815290604052805190602001201461098d5760405163abab6bd760e01b815260040160405180910390fd5b6109c36040518060400160405280601581526020017449434920616674657220696e76616c69642073656360581b815250610ccd565b80600401544211156109e85760405163179a39d160e01b815260040160405180910390fd5b610a1a6040518060400160405280601181526020017004943492061667465722074696d6565787607c1b815250610ccd565b60058101805460ff1916600117905560405182815283907f05ddc886acde01b77731bfad1dcfb6abf529f05c28ea66556fe87429bb2789ea9060200160405180910390a2505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f81158015610aa85750825b90505f8267ffffffffffffffff166001148015610ac45750303b155b905081158015610ad2575080155b15610af05760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610b1a57845460ff60401b1916600160401b1785555b6001600160a01b038916610b415760405163d92e233d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b038b16179055610b6588610d10565b600587905560018690558315610bb557845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b610bc8610c02565b6001600160a01b038116610bf657604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b610bff81610c5d565b50565b33610c347f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146107a55760405163118cdaa760e01b8152336004820152602401610bed565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b610bff81604051602401610ce19190610f80565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b179052610d21565b610d18610d2a565b610bff81610d73565b610bff81610d7b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166107a557604051631afcd79f60e31b815260040160405180910390fd5b610bc8610d2a565b80516a636f6e736f6c652e6c6f67602083015f808483855afa5050505050565b80356001600160a01b0381168114610db1575f80fd5b919050565b5f60208284031215610dc6575f80fd5b610dcf82610d9b565b9392505050565b5f805f60608486031215610de8575f80fd5b505081359360208301359350604090920135919050565b5f60208284031215610e0f575f80fd5b5035919050565b5f8060408385031215610e27575f80fd5b610e3083610d9b565b946020939093013593505050565b5f8060408385031215610e4f575f80fd5b50508035926020909101359150565b634e487b7160e01b5f52602160045260245ffd5b8681526001600160a01b038616602082015260408101859052606081018490526080810183905260c0810160038310610eb957634e487b7160e01b5f52602160045260245ffd5b8260a0830152979650505050505050565b5f805f8060808587031215610edd575f80fd5b610ee685610d9b565b9350610ef460208601610d9b565b93969395505050506040820135916060013590565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610f3057610f30610f09565b92915050565b5f60208284031215610f46575f80fd5b81518015158114610dcf575f80fd5b5f60018201610f6657610f66610f09565b5060010190565b81810381811115610f3057610f30610f09565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fea2646970667358221220984d19f9b7c1388ea590281265923d4cd4ab13c7dc037411df4f448c47f7fcdd64736f6c634300081a0033","sourceMap":"282:4955:44:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1602:210;;;;;;;;;;-1:-1:-1;1602:210:44;;;;;:::i;:::-;;:::i;:::-;;1818:1575;;;;;;:::i;:::-;;:::i;:::-;;;1000:25:57;;;988:2;973:18;1818:1575:44;;;;;;;;852:34;;;;;;;;;;-1:-1:-1;852:34:44;;;;-1:-1:-1;;;;;852:34:44;;;;;;-1:-1:-1;;;;;1200:32:57;;;1182:51;;1170:2;1155:18;852:34:44;1036:203:57;983:40:44;;;;;;;;;;;;;;;;892:18;;;;;;;;;;-1:-1:-1;892:18:44;;;;-1:-1:-1;;;;;892:18:44;;;4153:697;;;;;;;;;;-1:-1:-1;4153:697:44;;;;;:::i;:::-;;:::i;3155:101:23:-;;;;;;;;;;;;;:::i;2441:144::-;;;;;;;;;;-1:-1:-1;1313:22:23;2570:8;-1:-1:-1;;;;;2570:8:23;2441:144;;4917:318:44;;;;;;;;;;-1:-1:-1;4917:318:44;;;;;:::i;:::-;;:::i;819:26::-;;;;;;;;;;;;;;;;3399:748;;;;;;;;;;-1:-1:-1;3399:748:44;;;;;:::i;:::-;;:::i;724:57::-;;;;;;;;;;-1:-1:-1;724:57:44;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;724:57:44;;;;;;;;;;;;;;;;;;;;;;;;:::i;1139:457::-;;;;;;;;;;-1:-1:-1;1139:457:44;;;;;:::i;:::-;;:::i;3405:215:23:-;;;;;;;;;;-1:-1:-1;3405:215:23;;;;;:::i;:::-;;:::i;1602:210:44:-;2334:13:23;:11;:13::i;:::-;-1:-1:-1;;;;;1697:34:44;::::1;1693:60;;1740:13;;-1:-1:-1::0;;;1740:13:44::1;;;;;;;;;;;1693:60;1763:19;:42:::0;;-1:-1:-1;;;;;;1763:42:44::1;-1:-1:-1::0;;;;;1763:42:44;;;::::1;::::0;;;::::1;::::0;;1602:210::o;1818:1575::-;1957:24;2018:10;2058:9;1957:24;2099:22;2058:9;2099:10;:22;:::i;:::-;2077:44;;2184:11;2199:1;2184:16;2180:66;;2223:12;;-1:-1:-1;;;2223:12:44;;;;;;;;;;;2180:66;2331:13;;2327:51;;2346:4;;;;;;;;;-1:-1:-1;;;;;2346:4:44;-1:-1:-1;;;;;2346:12:44;;2366:9;2346:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2327:51;2469:14;;2465:135;;2504:4;;:56;;-1:-1:-1;;;2504:56:44;;-1:-1:-1;;;;;4386:32:57;;;2504:56:44;;;4368:51:57;2542:4:44;4435:18:57;;;4428:60;4504:18;;;4497:34;;;2504:4:44;;;;:17;;4341:18:57;;2504:56:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2499:90;;2569:20;;-1:-1:-1;;;2569:20:44;;;;;;;;;;;2499:90;2660:11;2645;;:26;;;;;;;:::i;:::-;;;;-1:-1:-1;;2850:25:44;;2894:5;:7;;2817:10;;2829:9;;2840:8;;2877:15;;2894:5;:7;;;:::i;:::-;;;;-1:-1:-1;2800:102:44;;5253:2:57;5249:15;;;;-1:-1:-1;;5245:53:57;2800:102:44;;;5233:66:57;5315:12;;;5308:28;;;;5352:12;;;5345:28;;;;5389:12;;;5382:28;5426:13;;;5419:29;5464:13;;;5457:29;5502:13;;2800:102:44;;;;;;;;;;;;2790:113;;;;;;2771:132;;2950:273;;;;;;;;2987:11;2950:273;;;;3024:10;-1:-1:-1;;;;;2950:273:44;;;;;3059:9;2950:273;;;;3092:8;2950:273;;;;3142:25;;3124:15;:43;;;;:::i;:::-;2950:273;;3188:24;2950:273;;;;;;;2914:33;;;;;;;;;;;:309;;;;;;;;;;;;;;-1:-1:-1;;;;;;2914:309:44;-1:-1:-1;;;;;2914:309:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2914:309:44;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;3327:25:44;;3239:114;;;5728:25:57;;;5784:2;5769:18;;5762:34;;;5812:18;;;5805:34;;;;3239:114:44;3293:9;;-1:-1:-1;;;;;;3239:114:44;;;3263:16;;3239:114;;;;;5716:2:57;3239:114:44;;;3363:23;;;1818:1575;;;;;:::o;4153:697::-;2334:13:23;:11;:13::i;:::-;4238:37:44::1;4278:33:::0;;;::::1;::::0;;;;;;;4325:20:::1;::::0;::::1;::::0;::::1;;:48;::::0;::::1;;;;;;:::i;:::-;;4321:96;;4382:35;;-1:-1:-1::0;;;4382:35:44::1;;;;;;;;;;;4321:96;4449:14;:23;;;4431:15;:41;4427:74;;;4481:20;;-1:-1:-1::0;;;4481:20:44::1;;;;;;;;;;;4427:74;4511:20;::::0;::::1;:44:::0;;-1:-1:-1;;4511:44:44::1;4534:21;4511:44;::::0;;4659:21;;4511:44;4644:36;;-1:-1:-1;;4644:36:44::1;::::0;4659:21;;4644:36:::1;:::i;:::-;::::0;;;-1:-1:-1;;4695:4:44::1;::::0;;4709:25;::::1;::::0;4736:21;;4695:63:::1;::::0;-1:-1:-1;;;4695:63:44;;-1:-1:-1;;;;;4709:25:44;;::::1;4695:63;::::0;::::1;6157:51:57::0;6224:18;;;6217:34;;;;4695:4:44;::::1;::::0;:13:::1;::::0;6130:18:57;;4695:63:44::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4690:97;;4767:20;;-1:-1:-1::0;;;4767:20:44::1;;;;;;;;;;;4690:97;4803:40;::::0;4826:16;;4803:40:::1;::::0;;;::::1;4228:622;4153:697:::0;:::o;3155:101:23:-;2334:13;:11;:13::i;:::-;3219:30:::1;3246:1;3219:18;:30::i;:::-;3155:101::o:0;4917:318:44:-;5011:19;;-1:-1:-1;;;;;5011:19:44;4997:10;:33;4993:60;;5039:14;;-1:-1:-1;;;5039:14:44;;;;;;;;;;;4993:60;5081:6;5067:11;;:20;5063:58;;;5096:25;;-1:-1:-1;;;5096:25:44;;;;;;;;;;;5063:58;5146:6;5131:11;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;5167:4:44;;:32;;-1:-1:-1;;;5167:32:44;;-1:-1:-1;;;;;6175:32:57;;;5167::44;;;6157:51:57;6224:18;;;6217:34;;;5167:4:44;;;;:13;;6130:18:57;;5167:32:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5162:66;;5208:20;;-1:-1:-1;;;5208:20:44;;;;;;;;;;;5162:66;4917:318;;:::o;3399:748::-;3494:37;3534:15;:33;3550:16;3534:33;;;;;;;;;;;3494:73;;3577:25;;;;;;;;;;;;;;-1:-1:-1;;;3577:25:44;;;:11;:25::i;:::-;3640:24;3616:20;;;;;;:48;;;;;;;;:::i;:::-;;3612:93;;3673:32;;-1:-1:-1;;;3673:32:44;;;;;;;;;;;3612:93;3715:33;;;;;;;;;;;;;;-1:-1:-1;;;3715:33:44;;;:11;:33::i;:::-;3803:23;;;;3772:26;;;;;;6391:19:57;;;6426:12;3772:26:44;;;;;;;;;;;;3762:37;;;;;;:64;3758:92;;3835:15;;-1:-1:-1;;;3835:15:44;;;;;;;;;;;3758:92;3860:36;;;;;;;;;;;;;;-1:-1:-1;;;3860:36:44;;;:11;:36::i;:::-;3928:14;:23;;;3910:15;:41;3906:71;;;3960:17;;-1:-1:-1;;;3960:17:44;;;;;;;;;;;3906:71;3987:32;;;;;;;;;;;;;;-1:-1:-1;;;3987:32:44;;;:11;:32::i;:::-;4029:20;;;:45;;-1:-1:-1;;4029:45:44;4052:22;4029:45;;;4089:51;;1000:25:57;;;4113:16:44;;4089:51;;988:2:57;973:18;4089:51:44;;;;;;;3484:663;3399:748;;:::o;1139:457::-;8870:21:24;4302:15;;-1:-1:-1;;;4302:15:24;;;;4301:16;;4348:14;;4158:30;4726:16;;:34;;;;;4746:14;4726:34;4706:54;;4770:17;4790:11;:16;;4805:1;4790:16;:50;;;;-1:-1:-1;4818:4:24;4810:25;:30;4790:50;4770:70;;4856:12;4855:13;:30;;;;;4873:12;4872:13;4855:30;4851:91;;;4908:23;;-1:-1:-1;;;4908:23:24;;;;;;;;;;;4851:91;4951:18;;-1:-1:-1;;4951:18:24;4968:1;4951:18;;;4979:67;;;;5013:22;;-1:-1:-1;;;;5013:22:24;-1:-1:-1;;;5013:22:24;;;4979:67;-1:-1:-1;;;;;1278:19:44;::::1;1274:70;;1320:13;;-1:-1:-1::0;;;1320:13:44::1;;;;;;;;;;;1274:70;1353:4;:20:::0;;-1:-1:-1;;;;;;1353:20:44::1;-1:-1:-1::0;;;;;1353:20:44;::::1;;::::0;;1383:21:::1;1398:5:::0;1383:14:::1;:21::i;:::-;1460:25;:45:::0;;;1556:11:::1;:33:::0;;;5066:101:24;;;;5100:23;;-1:-1:-1;;;;5100:23:24;;;5142:14;;-1:-1:-1;6602:50:57;;5142:14:24;;6590:2:57;6575:18;5142:14:24;;;;;;;5066:101;4092:1081;;;;;1139:457:44;;;;:::o;3405:215:23:-;2334:13;:11;:13::i;:::-;-1:-1:-1;;;;;3489:22:23;::::1;3485:91;;3534:31;::::0;-1:-1:-1;;;3534:31:23;;3562:1:::1;3534:31;::::0;::::1;1182:51:57::0;1155:18;;3534:31:23::1;;;;;;;;3485:91;3585:28;3604:8;3585:18;:28::i;:::-;3405:215:::0;:::o;2658:162::-;966:10:26;2717:7:23;1313:22;2570:8;-1:-1:-1;;;;;2570:8:23;;2441:144;2717:7;-1:-1:-1;;;;;2717:23:23;;2713:101;;2763:40;;-1:-1:-1;;;2763:40:23;;966:10:26;2763:40:23;;;1182:51:57;1155:18;;2763:40:23;1036:203:57;3774:248:23;1313:22;3923:8;;-1:-1:-1;;;;;;3941:19:23;;-1:-1:-1;;;;;3941:19:23;;;;;;;;3975:40;;3923:8;;;;;3975:40;;3847:24;;3975:40;3837:185;;3774:248;:::o;6114:121:14:-;6169:59;6224:2;6185:42;;;;;;;;:::i;:::-;;;;-1:-1:-1;;6185:42:14;;;;;;;;;;;;;;-1:-1:-1;;;;;6185:42:14;-1:-1:-1;;;6185:42:14;;;6169:15;:59::i;1847:127:23:-;6931:20:24;:18;:20::i;:::-;1929:38:23::1;1954:12;1929:24;:38::i;408:133:14:-:0;479:55;526:7;505:19;479:55::i;7084:141:24:-;8870:21;8560:40;-1:-1:-1;;;8560:40:24;;;;7146:73;;7191:17;;-1:-1:-1;;;7191:17:24;;;;;;;;;;;1980:235:23;6931:20:24;:18;:20::i;547:380:14:-;645:14;;131:42;818:2;805:16;;621:21;;645:14;805:16;131:42;854:5;843:68;834:77;;771:150;;547:380;:::o;14:173:57:-;82:20;;-1:-1:-1;;;;;131:31:57;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;:::-;333:39;192:186;-1:-1:-1;;;192:186:57:o;383:466::-;460:6;468;476;529:2;517:9;508:7;504:23;500:32;497:52;;;545:1;542;535:12;497:52;-1:-1:-1;;590:23:57;;;710:2;695:18;;682:32;;-1:-1:-1;813:2:57;798:18;;;785:32;;383:466;-1:-1:-1;383:466:57:o;1650:226::-;1709:6;1762:2;1750:9;1741:7;1737:23;1733:32;1730:52;;;1778:1;1775;1768:12;1730:52;-1:-1:-1;1823:23:57;;1650:226;-1:-1:-1;1650:226:57:o;1881:300::-;1949:6;1957;2010:2;1998:9;1989:7;1985:23;1981:32;1978:52;;;2026:1;2023;2016:12;1978:52;2049:29;2068:9;2049:29;:::i;:::-;2039:39;2147:2;2132:18;;;;2119:32;;-1:-1:-1;;;1881:300:57:o;2186:346::-;2254:6;2262;2315:2;2303:9;2294:7;2290:23;2286:32;2283:52;;;2331:1;2328;2321:12;2283:52;-1:-1:-1;;2376:23:57;;;2496:2;2481:18;;;2468:32;;-1:-1:-1;2186:346:57:o;2537:127::-;2598:10;2593:3;2589:20;2586:1;2579:31;2629:4;2626:1;2619:15;2653:4;2650:1;2643:15;2669:730;2972:25;;;-1:-1:-1;;;;;3033:32:57;;3028:2;3013:18;;3006:60;3097:2;3082:18;;3075:34;;;3140:2;3125:18;;3118:34;;;3183:3;3168:19;;3161:35;;;2959:3;2944:19;;3226:1;3215:13;;3205:144;;3271:10;3266:3;3262:20;3259:1;3252:31;3306:4;3303:1;3296:15;3334:4;3331:1;3324:15;3205:144;3386:6;3380:3;3369:9;3365:19;3358:35;2669:730;;;;;;;;;:::o;3404:495::-;3490:6;3498;3506;3514;3567:3;3555:9;3546:7;3542:23;3538:33;3535:53;;;3584:1;3581;3574:12;3535:53;3607:29;3626:9;3607:29;:::i;:::-;3597:39;;3655:38;3689:2;3678:9;3674:18;3655:38;:::i;:::-;3404:495;;3645:48;;-1:-1:-1;;;;3762:2:57;3747:18;;3734:32;;3863:2;3848:18;3835:32;;3404:495::o;3904:127::-;3965:10;3960:3;3956:20;3953:1;3946:31;3996:4;3993:1;3986:15;4020:4;4017:1;4010:15;4036:125;4101:9;;;4122:10;;;4119:36;;;4135:18;;:::i;:::-;4036:125;;;;:::o;4542:277::-;4609:6;4662:2;4650:9;4641:7;4637:23;4633:32;4630:52;;;4678:1;4675;4668:12;4630:52;4710:9;4704:16;4763:5;4756:13;4749:21;4742:5;4739:32;4729:60;;4785:1;4782;4775:12;4824:135;4863:3;4884:17;;;4881:43;;4904:18;;:::i;:::-;-1:-1:-1;4951:1:57;4940:13;;4824:135::o;5850:128::-;5917:9;;;5938:11;;;5935:37;;;5952:18;;:::i;6663:418::-;6812:2;6801:9;6794:21;6775:4;6844:6;6838:13;6887:6;6882:2;6871:9;6867:18;6860:34;6946:6;6941:2;6933:6;6929:15;6924:2;6913:9;6909:18;6903:50;7002:1;6997:2;6988:6;6977:9;6973:22;6969:31;6962:42;7072:2;7065;7061:7;7056:2;7048:6;7044:15;7040:29;7029:9;7025:45;7021:54;7013:62;;;6663:418;;;;:::o","linkReferences":{}},"methodIdentifiers":{"bridgeTransfers(bytes32)":"e0d9cbc4","completeBridgeTransfer(bytes32,bytes32)":"9f8f8799","counterpartyAddress()":"1f92c08e","initialize(address,address,uint256,uint256)":"eb990c59","initiateBridgeTransfer(uint256,bytes32,bytes32)":"1a8849a4","initiatorTimeLockDuration()":"2b3948bb","owner()":"8da5cb5b","poolBalance()":"96365d44","refundBridgeTransfer(bytes32)":"57808020","renounceOwnership()":"715018a6","setCounterpartyAddress(address)":"001a153e","transferOwnership(address)":"f2fde38b","weth()":"3fc8cef3","withdrawWETH(address,uint256)":"93113b5c"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"BridgeTransferHasBeenCompleted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeTransferInvalid\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeTransferStateNotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientWethBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSecret\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TimeLockExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TimeLockNotExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WETHTransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAmount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_bridgeTransferId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"pre_image\",\"type\":\"bytes32\"}],\"name\":\"BridgeTransferCompleted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_bridgeTransferId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_originator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_recipient\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_hashLock\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_timeLock\",\"type\":\"uint256\"}],\"name\":\"BridgeTransferInitiated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_bridgeTransferId\",\"type\":\"bytes32\"}],\"name\":\"BridgeTransferRefunded\",\"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\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"bridgeTransfers\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"originator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"recipient\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"hashLock\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"timeLock\",\"type\":\"uint256\"},{\"internalType\":\"enum AtomicBridgeInitiator.MessageState\",\"name\":\"state\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"bridgeTransferId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"preImage\",\"type\":\"bytes32\"}],\"name\":\"completeBridgeTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"counterpartyAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_weth\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_timeLockDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_initialPoolBalance\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"wethAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"recipient\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"hashLock\",\"type\":\"bytes32\"}],\"name\":\"initiateBridgeTransfer\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"bridgeTransferId\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initiatorTimeLockDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"poolBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"bridgeTransferId\",\"type\":\"bytes32\"}],\"name\":\"refundBridgeTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_counterpartyAddress\",\"type\":\"address\"}],\"name\":\"setCounterpartyAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"weth\",\"outputs\":[{\"internalType\":\"contract IWETH9\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawWETH\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"}},\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/AtomicBridgeInitiator.sol\":\"AtomicBridgeInitiator\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"]},\"sources\":{\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0xf61cb43a94d8318049d0a7f567af8c0aa952b5762a43851b130b90b3fcde0c6a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://53a52c6c3aeb22f7a18f53fca16af590308a8e3e5507e74df9b8e2561c932194\",\"dweb:/ipfs/QmaaXuY8mC66YoE2xyZdWuLHXqAxLjbnNxiofx8BTP1MRn\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xee2337af2dc162a973b4be6d3f7c16f06298259e0af48c5470d2839bfa8a22f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30c476b4b2f405c1bb3f0bae15b006d129c80f1bfd9d0f2038160a3bb9745009\",\"dweb:/ipfs/Qmb3VcuDufv6xbHeVgksC4tHpc5gKYVqBEwjEXW72XzSvN\"]},\"src/AtomicBridgeInitiator.sol\":{\"keccak256\":\"0xcdc68c666e6910d87ad35b31f66c02d7b5ecf298ca500b5772e6a40066922268\",\"urls\":[\"bzz-raw://fd30fdca088a736e70013520251a102c7ed002e1c061dad0f0483787ae11cce6\",\"dweb:/ipfs/Qmc7yNk554GRbEXwNbUaei3Zj4VcFGJCM8TRkQa7eYZXXb\"]},\"src/IAtomicBridgeInitiator.sol\":{\"keccak256\":\"0x8397d0de470d4fe4f52ae03292085532b2d1681b5bd332992d303d3e630047be\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4c8826a0ee54c30746ddb91e35a7ef9c0e33acb68c19a0424a05237b3b02753f\",\"dweb:/ipfs/QmPrPd8hpdmiXryYYSycChgrnHwsaTgHp4xJL3wLT3mRmz\"]},\"src/IWETH9.sol\":{\"keccak256\":\"0xff29528c0f48eaad5156c8d66ccd8f754037bba234434807db302e604db9f9a5\",\"urls\":[\"bzz-raw://a7322b029eb6cd2bbf204fb879947a91aad09bca79373583e5c5b7a2630a6c6b\",\"dweb:/ipfs/QmfLWmtiEhdTiD5kFNruHiMYs4dY5joGgJQ4HU2wCTHF6E\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[],"type":"error","name":"BridgeTransferHasBeenCompleted"},{"inputs":[],"type":"error","name":"BridgeTransferInvalid"},{"inputs":[],"type":"error","name":"BridgeTransferStateNotInitialized"},{"inputs":[],"type":"error","name":"InsufficientWethBalance"},{"inputs":[],"type":"error","name":"InvalidInitialization"},{"inputs":[],"type":"error","name":"InvalidSecret"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"OwnableInvalidOwner"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"type":"error","name":"OwnableUnauthorizedAccount"},{"inputs":[],"type":"error","name":"TimeLockExpired"},{"inputs":[],"type":"error","name":"TimeLockNotExpired"},{"inputs":[],"type":"error","name":"Unauthorized"},{"inputs":[],"type":"error","name":"WETHTransferFailed"},{"inputs":[],"type":"error","name":"ZeroAddress"},{"inputs":[],"type":"error","name":"ZeroAmount"},{"inputs":[{"internalType":"bytes32","name":"_bridgeTransferId","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"pre_image","type":"bytes32","indexed":false}],"type":"event","name":"BridgeTransferCompleted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_bridgeTransferId","type":"bytes32","indexed":true},{"internalType":"address","name":"_originator","type":"address","indexed":true},{"internalType":"bytes32","name":"_recipient","type":"bytes32","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false},{"internalType":"bytes32","name":"_hashLock","type":"bytes32","indexed":false},{"internalType":"uint256","name":"_timeLock","type":"uint256","indexed":false}],"type":"event","name":"BridgeTransferInitiated","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_bridgeTransferId","type":"bytes32","indexed":true}],"type":"event","name":"BridgeTransferRefunded","anonymous":false},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"bridgeTransfers","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"originator","type":"address"},{"internalType":"bytes32","name":"recipient","type":"bytes32"},{"internalType":"bytes32","name":"hashLock","type":"bytes32"},{"internalType":"uint256","name":"timeLock","type":"uint256"},{"internalType":"enum AtomicBridgeInitiator.MessageState","name":"state","type":"uint8"}]},{"inputs":[{"internalType":"bytes32","name":"bridgeTransferId","type":"bytes32"},{"internalType":"bytes32","name":"preImage","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"completeBridgeTransfer"},{"inputs":[],"stateMutability":"view","type":"function","name":"counterpartyAddress","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"_weth","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"_timeLockDuration","type":"uint256"},{"internalType":"uint256","name":"_initialPoolBalance","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[{"internalType":"uint256","name":"wethAmount","type":"uint256"},{"internalType":"bytes32","name":"recipient","type":"bytes32"},{"internalType":"bytes32","name":"hashLock","type":"bytes32"}],"stateMutability":"payable","type":"function","name":"initiateBridgeTransfer","outputs":[{"internalType":"bytes32","name":"bridgeTransferId","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"initiatorTimeLockDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"poolBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"bridgeTransferId","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"refundBridgeTransfer"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"address","name":"_counterpartyAddress","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setCounterpartyAddress"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[],"stateMutability":"view","type":"function","name":"weth","outputs":[{"internalType":"contract IWETH9","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"withdrawWETH"}],"devdoc":{"kind":"dev","methods":{"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/AtomicBridgeInitiator.sol":"AtomicBridgeInitiator"},"evmVersion":"cancun","libraries":{}},"sources":{"lib/forge-std/src/console.sol":{"keccak256":"0xf61cb43a94d8318049d0a7f567af8c0aa952b5762a43851b130b90b3fcde0c6a","urls":["bzz-raw://53a52c6c3aeb22f7a18f53fca16af590308a8e3e5507e74df9b8e2561c932194","dweb:/ipfs/QmaaXuY8mC66YoE2xyZdWuLHXqAxLjbnNxiofx8BTP1MRn"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a","urls":["bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6","dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b","urls":["bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609","dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397","urls":["bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9","dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0xee2337af2dc162a973b4be6d3f7c16f06298259e0af48c5470d2839bfa8a22f4","urls":["bzz-raw://30c476b4b2f405c1bb3f0bae15b006d129c80f1bfd9d0f2038160a3bb9745009","dweb:/ipfs/Qmb3VcuDufv6xbHeVgksC4tHpc5gKYVqBEwjEXW72XzSvN"],"license":"MIT"},"src/AtomicBridgeInitiator.sol":{"keccak256":"0xcdc68c666e6910d87ad35b31f66c02d7b5ecf298ca500b5772e6a40066922268","urls":["bzz-raw://fd30fdca088a736e70013520251a102c7ed002e1c061dad0f0483787ae11cce6","dweb:/ipfs/Qmc7yNk554GRbEXwNbUaei3Zj4VcFGJCM8TRkQa7eYZXXb"],"license":null},"src/IAtomicBridgeInitiator.sol":{"keccak256":"0x8397d0de470d4fe4f52ae03292085532b2d1681b5bd332992d303d3e630047be","urls":["bzz-raw://4c8826a0ee54c30746ddb91e35a7ef9c0e33acb68c19a0424a05237b3b02753f","dweb:/ipfs/QmPrPd8hpdmiXryYYSycChgrnHwsaTgHp4xJL3wLT3mRmz"],"license":"MIT"},"src/IWETH9.sol":{"keccak256":"0xff29528c0f48eaad5156c8d66ccd8f754037bba234434807db302e604db9f9a5","urls":["bzz-raw://a7322b029eb6cd2bbf204fb879947a91aad09bca79373583e5c5b7a2630a6c6b","dweb:/ipfs/QmfLWmtiEhdTiD5kFNruHiMYs4dY5joGgJQ4HU2wCTHF6E"],"license":null}},"version":1},"id":44} \ No newline at end of file +{"abi":[{"type":"function","name":"bridgeTransfers","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"originator","type":"address","internalType":"address"},{"name":"recipient","type":"bytes32","internalType":"bytes32"},{"name":"hashLock","type":"bytes32","internalType":"bytes32"},{"name":"timeLock","type":"uint256","internalType":"uint256"},{"name":"state","type":"uint8","internalType":"enum AtomicBridgeInitiator.MessageState"}],"stateMutability":"view"},{"type":"function","name":"completeBridgeTransfer","inputs":[{"name":"bridgeTransferId","type":"bytes32","internalType":"bytes32"},{"name":"preImage","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"counterpartyAddress","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"_weth","type":"address","internalType":"address"},{"name":"owner","type":"address","internalType":"address"},{"name":"_timeLockDuration","type":"uint256","internalType":"uint256"},{"name":"_initialPoolBalance","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"initiateBridgeTransfer","inputs":[{"name":"wethAmount","type":"uint256","internalType":"uint256"},{"name":"recipient","type":"bytes32","internalType":"bytes32"},{"name":"hashLock","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"bridgeTransferId","type":"bytes32","internalType":"bytes32"}],"stateMutability":"payable"},{"type":"function","name":"initiatorTimeLockDuration","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"poolBalance","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"refundBridgeTransfer","inputs":[{"name":"bridgeTransferId","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setCounterpartyAddress","inputs":[{"name":"_counterpartyAddress","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"weth","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IWETH9"}],"stateMutability":"view"},{"type":"function","name":"withdrawWETH","inputs":[{"name":"recipient","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"BridgeTransferCompleted","inputs":[{"name":"_bridgeTransferId","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"pre_image","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"BridgeTransferInitiated","inputs":[{"name":"_bridgeTransferId","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"_originator","type":"address","indexed":true,"internalType":"address"},{"name":"_recipient","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"_hashLock","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_timeLock","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"BridgeTransferRefunded","inputs":[{"name":"_bridgeTransferId","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"BridgeTransferHasBeenCompleted","inputs":[]},{"type":"error","name":"BridgeTransferInvalid","inputs":[]},{"type":"error","name":"BridgeTransferStateNotInitialized","inputs":[]},{"type":"error","name":"InsufficientWethBalance","inputs":[]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"InvalidSecret","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"}]},{"type":"error","name":"TimeLockExpired","inputs":[]},{"type":"error","name":"TimeLockNotExpired","inputs":[]},{"type":"error","name":"Unauthorized","inputs":[]},{"type":"error","name":"WETHTransferFailed","inputs":[]},{"type":"error","name":"ZeroAddress","inputs":[]},{"type":"error","name":"ZeroAmount","inputs":[]}],"bytecode":{"object":"0x6080604052348015600e575f80fd5b50610e7e8061001c5f395ff3fe6080604052600436106100d8575f3560e01c80638da5cb5b1161007c5780639f8f8799116100575780639f8f879914610231578063e0d9cbc414610250578063eb990c59146102bd578063f2fde38b146102dc575f80fd5b80638da5cb5b146101c157806393113b5c146101fd57806396365d441461021c575f80fd5b80632b3948bb116100b75780632b3948bb1461015a5780633fc8cef31461016f578063578080201461018e578063715018a6146101ad575f80fd5b80621a153e146100dc5780631a8849a4146100fd5780631f92c08e14610123575b5f80fd5b3480156100e7575f80fd5b506100fb6100f6366004610c7e565b6102fb565b005b61011061010b366004610c9e565b61034c565b6040519081526020015b60405180910390f35b34801561012e575f80fd5b50600254610142906001600160a01b031681565b6040516001600160a01b03909116815260200161011a565b348015610165575f80fd5b5061011060055481565b34801561017a575f80fd5b50600354610142906001600160a01b031681565b348015610199575f80fd5b506100fb6101a8366004610cc7565b610635565b3480156101b8575f80fd5b506100fb610794565b3480156101cc575f80fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b0316610142565b348015610208575f80fd5b506100fb610217366004610cde565b6107a7565b348015610227575f80fd5b5061011060015481565b34801561023c575f80fd5b506100fb61024b366004610d06565b61089f565b34801561025b575f80fd5b506102ab61026a366004610cc7565b5f6020819052908152604090208054600182015460028301546003840154600485015460059095015493946001600160a01b03909316939192909160ff1686565b60405161011a96959493929190610d3a565b3480156102c8575f80fd5b506100fb6102d7366004610d92565b610997565b3480156102e7575f80fd5b506100fb6102f6366004610c7e565b610af4565b610303610b36565b6001600160a01b03811661032a5760405163d92e233d60e01b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b5f33348261035a8288610de5565b9050805f0361037c57604051631f2a200560e01b815260040160405180910390fd5b81156103e75760035f9054906101000a90046001600160a01b03166001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004015f604051808303818588803b1580156103cf575f80fd5b505af11580156103e1573d5f803e3d5ffd5b50505050505b8615610484576003546040516323b872dd60e01b81526001600160a01b038581166004830152306024830152604482018a9052909116906323b872dd906064016020604051808303815f875af1158015610443573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104679190610dfe565b61048457604051630dd0c8f760e41b815260040160405180910390fd5b8060015f8282546104959190610de5565b90915550506005546004805485928992899242915f6104b383610e1d565b9091555060405160609690961b6bffffffffffffffffffffffff19166020870152603486019490945260548501929092526074840152609483015260b482015260d4016040516020818303038152906040528051906020012093506040518060c00160405280828152602001846001600160a01b03168152602001878152602001868152602001600554426105489190610de5565b81525f60209182018190528681528082526040908190208351815591830151600180840180546001600160a01b0319166001600160a01b039093169290921790915590830151600280840191909155606084015160038401556080840151600484015560a08401516005840180549193909260ff199092169184908111156105d2576105d2610d26565b021790555050600554604080518481526020810189905280820192909252518892506001600160a01b0386169187917f44e287be4fbd3a2dcc143a376301094fd2f809dcc2a8d3c09d0a0715224766c49181900360600190a45050509392505050565b61063d610b36565b5f81815260208190526040812090600582015460ff16600281111561066457610664610d26565b1461068257604051630ffb9dcb60e01b815260040160405180910390fd5b80600401544210156106a75760405163191f4d1b60e31b815260040160405180910390fd5b60058101805460ff191660021790558054600180545f906106c9908490610e35565b90915550506003546001820154825460405163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291169063a9059cbb906044016020604051808303815f875af1158015610725573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107499190610dfe565b61076657604051630dd0c8f760e41b815260040160405180910390fd5b60405182907f4fee0a65c921e50a9623c3abe10a4067e49c03ef491e7b406dace7cb79c12c61905f90a25050565b61079c610b36565b6107a55f610b91565b565b6002546001600160a01b031633146107d1576040516282b42960e81b815260040160405180910390fd5b8060015410156107f4576040516318fb0fc360e11b815260040160405180910390fd5b8060015f8282546108059190610e35565b909155505060035460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb906044016020604051808303815f875af115801561085a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087e9190610dfe565b61089b57604051630dd0c8f760e41b815260040160405180910390fd5b5050565b5f82815260208190526040812090600582015460ff1660028111156108c6576108c6610d26565b146108e457604051630437880960e41b815260040160405180910390fd5b600381015460408051602081018590520160405160208183030381529060405280519060200120146109295760405163abab6bd760e01b815260040160405180910390fd5b806004015442111561094e5760405163179a39d160e01b815260040160405180910390fd5b60058101805460ff1916600117905560405182815283907f05ddc886acde01b77731bfad1dcfb6abf529f05c28ea66556fe87429bb2789ea9060200160405180910390a2505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f811580156109dc5750825b90505f8267ffffffffffffffff1660011480156109f85750303b155b905081158015610a06575080155b15610a245760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610a4e57845460ff60401b1916600160401b1785555b6001600160a01b038916610a755760405163d92e233d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b038b16179055610a9988610c01565b600587905560018690558315610ae957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b610afc610b36565b6001600160a01b038116610b2a57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b610b3381610b91565b50565b33610b687f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146107a55760405163118cdaa760e01b8152336004820152602401610b21565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b610c09610c12565b610b3381610c5b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166107a557604051631afcd79f60e31b815260040160405180910390fd5b610afc610c12565b80356001600160a01b0381168114610c79575f80fd5b919050565b5f60208284031215610c8e575f80fd5b610c9782610c63565b9392505050565b5f805f60608486031215610cb0575f80fd5b505081359360208301359350604090920135919050565b5f60208284031215610cd7575f80fd5b5035919050565b5f8060408385031215610cef575f80fd5b610cf883610c63565b946020939093013593505050565b5f8060408385031215610d17575f80fd5b50508035926020909101359150565b634e487b7160e01b5f52602160045260245ffd5b8681526001600160a01b038616602082015260408101859052606081018490526080810183905260c0810160038310610d8157634e487b7160e01b5f52602160045260245ffd5b8260a0830152979650505050505050565b5f805f8060808587031215610da5575f80fd5b610dae85610c63565b9350610dbc60208601610c63565b93969395505050506040820135916060013590565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610df857610df8610dd1565b92915050565b5f60208284031215610e0e575f80fd5b81518015158114610c97575f80fd5b5f60018201610e2e57610e2e610dd1565b5060010190565b81810381811115610df857610df8610dd156fea264697066735822122064b030fa0a9416bf2a7b91cb90e13c3f26a6aaf62caf8bc25ba15cf3b9e5880964736f6c634300081a0033","sourceMap":"235:4790:44:-:0;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436106100d8575f3560e01c80638da5cb5b1161007c5780639f8f8799116100575780639f8f879914610231578063e0d9cbc414610250578063eb990c59146102bd578063f2fde38b146102dc575f80fd5b80638da5cb5b146101c157806393113b5c146101fd57806396365d441461021c575f80fd5b80632b3948bb116100b75780632b3948bb1461015a5780633fc8cef31461016f578063578080201461018e578063715018a6146101ad575f80fd5b80621a153e146100dc5780631a8849a4146100fd5780631f92c08e14610123575b5f80fd5b3480156100e7575f80fd5b506100fb6100f6366004610c7e565b6102fb565b005b61011061010b366004610c9e565b61034c565b6040519081526020015b60405180910390f35b34801561012e575f80fd5b50600254610142906001600160a01b031681565b6040516001600160a01b03909116815260200161011a565b348015610165575f80fd5b5061011060055481565b34801561017a575f80fd5b50600354610142906001600160a01b031681565b348015610199575f80fd5b506100fb6101a8366004610cc7565b610635565b3480156101b8575f80fd5b506100fb610794565b3480156101cc575f80fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b0316610142565b348015610208575f80fd5b506100fb610217366004610cde565b6107a7565b348015610227575f80fd5b5061011060015481565b34801561023c575f80fd5b506100fb61024b366004610d06565b61089f565b34801561025b575f80fd5b506102ab61026a366004610cc7565b5f6020819052908152604090208054600182015460028301546003840154600485015460059095015493946001600160a01b03909316939192909160ff1686565b60405161011a96959493929190610d3a565b3480156102c8575f80fd5b506100fb6102d7366004610d92565b610997565b3480156102e7575f80fd5b506100fb6102f6366004610c7e565b610af4565b610303610b36565b6001600160a01b03811661032a5760405163d92e233d60e01b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b5f33348261035a8288610de5565b9050805f0361037c57604051631f2a200560e01b815260040160405180910390fd5b81156103e75760035f9054906101000a90046001600160a01b03166001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004015f604051808303818588803b1580156103cf575f80fd5b505af11580156103e1573d5f803e3d5ffd5b50505050505b8615610484576003546040516323b872dd60e01b81526001600160a01b038581166004830152306024830152604482018a9052909116906323b872dd906064016020604051808303815f875af1158015610443573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104679190610dfe565b61048457604051630dd0c8f760e41b815260040160405180910390fd5b8060015f8282546104959190610de5565b90915550506005546004805485928992899242915f6104b383610e1d565b9091555060405160609690961b6bffffffffffffffffffffffff19166020870152603486019490945260548501929092526074840152609483015260b482015260d4016040516020818303038152906040528051906020012093506040518060c00160405280828152602001846001600160a01b03168152602001878152602001868152602001600554426105489190610de5565b81525f60209182018190528681528082526040908190208351815591830151600180840180546001600160a01b0319166001600160a01b039093169290921790915590830151600280840191909155606084015160038401556080840151600484015560a08401516005840180549193909260ff199092169184908111156105d2576105d2610d26565b021790555050600554604080518481526020810189905280820192909252518892506001600160a01b0386169187917f44e287be4fbd3a2dcc143a376301094fd2f809dcc2a8d3c09d0a0715224766c49181900360600190a45050509392505050565b61063d610b36565b5f81815260208190526040812090600582015460ff16600281111561066457610664610d26565b1461068257604051630ffb9dcb60e01b815260040160405180910390fd5b80600401544210156106a75760405163191f4d1b60e31b815260040160405180910390fd5b60058101805460ff191660021790558054600180545f906106c9908490610e35565b90915550506003546001820154825460405163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291169063a9059cbb906044016020604051808303815f875af1158015610725573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107499190610dfe565b61076657604051630dd0c8f760e41b815260040160405180910390fd5b60405182907f4fee0a65c921e50a9623c3abe10a4067e49c03ef491e7b406dace7cb79c12c61905f90a25050565b61079c610b36565b6107a55f610b91565b565b6002546001600160a01b031633146107d1576040516282b42960e81b815260040160405180910390fd5b8060015410156107f4576040516318fb0fc360e11b815260040160405180910390fd5b8060015f8282546108059190610e35565b909155505060035460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb906044016020604051808303815f875af115801561085a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087e9190610dfe565b61089b57604051630dd0c8f760e41b815260040160405180910390fd5b5050565b5f82815260208190526040812090600582015460ff1660028111156108c6576108c6610d26565b146108e457604051630437880960e41b815260040160405180910390fd5b600381015460408051602081018590520160405160208183030381529060405280519060200120146109295760405163abab6bd760e01b815260040160405180910390fd5b806004015442111561094e5760405163179a39d160e01b815260040160405180910390fd5b60058101805460ff1916600117905560405182815283907f05ddc886acde01b77731bfad1dcfb6abf529f05c28ea66556fe87429bb2789ea9060200160405180910390a2505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f811580156109dc5750825b90505f8267ffffffffffffffff1660011480156109f85750303b155b905081158015610a06575080155b15610a245760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610a4e57845460ff60401b1916600160401b1785555b6001600160a01b038916610a755760405163d92e233d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b038b16179055610a9988610c01565b600587905560018690558315610ae957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b610afc610b36565b6001600160a01b038116610b2a57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b610b3381610b91565b50565b33610b687f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146107a55760405163118cdaa760e01b8152336004820152602401610b21565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b610c09610c12565b610b3381610c5b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166107a557604051631afcd79f60e31b815260040160405180910390fd5b610afc610c12565b80356001600160a01b0381168114610c79575f80fd5b919050565b5f60208284031215610c8e575f80fd5b610c9782610c63565b9392505050565b5f805f60608486031215610cb0575f80fd5b505081359360208301359350604090920135919050565b5f60208284031215610cd7575f80fd5b5035919050565b5f8060408385031215610cef575f80fd5b610cf883610c63565b946020939093013593505050565b5f8060408385031215610d17575f80fd5b50508035926020909101359150565b634e487b7160e01b5f52602160045260245ffd5b8681526001600160a01b038616602082015260408101859052606081018490526080810183905260c0810160038310610d8157634e487b7160e01b5f52602160045260245ffd5b8260a0830152979650505050505050565b5f805f8060808587031215610da5575f80fd5b610dae85610c63565b9350610dbc60208601610c63565b93969395505050506040820135916060013590565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610df857610df8610dd1565b92915050565b5f60208284031215610e0e575f80fd5b81518015158114610c97575f80fd5b5f60018201610e2e57610e2e610dd1565b5060010190565b81810381811115610df857610df8610dd156fea264697066735822122064b030fa0a9416bf2a7b91cb90e13c3f26a6aaf62caf8bc25ba15cf3b9e5880964736f6c634300081a0033","sourceMap":"235:4790:44:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1555:210;;;;;;;;;;-1:-1:-1;1555:210:44;;;;;:::i;:::-;;:::i;:::-;;1771:1575;;;;;;:::i;:::-;;:::i;:::-;;;1000:25:56;;;988:2;973:18;1771:1575:44;;;;;;;;805:34;;;;;;;;;;-1:-1:-1;805:34:44;;;;-1:-1:-1;;;;;805:34:44;;;;;;-1:-1:-1;;;;;1200:32:56;;;1182:51;;1170:2;1155:18;805:34:44;1036:203:56;936:40:44;;;;;;;;;;;;;;;;845:18;;;;;;;;;;-1:-1:-1;845:18:44;;;;-1:-1:-1;;;;;845:18:44;;;3941:697;;;;;;;;;;-1:-1:-1;3941:697:44;;;;;:::i;:::-;;:::i;3155:101:23:-;;;;;;;;;;;;;:::i;2441:144::-;;;;;;;;;;-1:-1:-1;1313:22:23;2570:8;-1:-1:-1;;;;;2570:8:23;2441:144;;4705:318:44;;;;;;;;;;-1:-1:-1;4705:318:44;;;;;:::i;:::-;;:::i;772:26::-;;;;;;;;;;;;;;;;3352:583;;;;;;;;;;-1:-1:-1;3352:583:44;;;;;:::i;:::-;;:::i;677:57::-;;;;;;;;;;-1:-1:-1;677:57:44;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;677:57:44;;;;;;;;;;;;;;;;;;;;;;;;:::i;1092:457::-;;;;;;;;;;-1:-1:-1;1092:457:44;;;;;:::i;:::-;;:::i;3405:215:23:-;;;;;;;;;;-1:-1:-1;3405:215:23;;;;;:::i;:::-;;:::i;1555:210:44:-;2334:13:23;:11;:13::i;:::-;-1:-1:-1;;;;;1650:34:44;::::1;1646:60;;1693:13;;-1:-1:-1::0;;;1693:13:44::1;;;;;;;;;;;1646:60;1716:19;:42:::0;;-1:-1:-1;;;;;;1716:42:44::1;-1:-1:-1::0;;;;;1716:42:44;;;::::1;::::0;;;::::1;::::0;;1555:210::o;1771:1575::-;1910:24;1971:10;2011:9;1910:24;2052:22;2011:9;2052:10;:22;:::i;:::-;2030:44;;2137:11;2152:1;2137:16;2133:66;;2176:12;;-1:-1:-1;;;2176:12:44;;;;;;;;;;;2133:66;2284:13;;2280:51;;2299:4;;;;;;;;;-1:-1:-1;;;;;2299:4:44;-1:-1:-1;;;;;2299:12:44;;2319:9;2299:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2280:51;2422:14;;2418:135;;2457:4;;:56;;-1:-1:-1;;;2457:56:44;;-1:-1:-1;;;;;4386:32:56;;;2457:56:44;;;4368:51:56;2495:4:44;4435:18:56;;;4428:60;4504:18;;;4497:34;;;2457:4:44;;;;:17;;4341:18:56;;2457:56:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2452:90;;2522:20;;-1:-1:-1;;;2522:20:44;;;;;;;;;;;2452:90;2613:11;2598;;:26;;;;;;;:::i;:::-;;;;-1:-1:-1;;2803:25:44;;2847:5;:7;;2770:10;;2782:9;;2793:8;;2830:15;;2847:5;:7;;;:::i;:::-;;;;-1:-1:-1;2753:102:44;;5253:2:56;5249:15;;;;-1:-1:-1;;5245:53:56;2753:102:44;;;5233:66:56;5315:12;;;5308:28;;;;5352:12;;;5345:28;;;;5389:12;;;5382:28;5426:13;;;5419:29;5464:13;;;5457:29;5502:13;;2753:102:44;;;;;;;;;;;;2743:113;;;;;;2724:132;;2903:273;;;;;;;;2940:11;2903:273;;;;2977:10;-1:-1:-1;;;;;2903:273:44;;;;;3012:9;2903:273;;;;3045:8;2903:273;;;;3095:25;;3077:15;:43;;;;:::i;:::-;2903:273;;3141:24;2903:273;;;;;;;2867:33;;;;;;;;;;;:309;;;;;;;;;;;;;;-1:-1:-1;;;;;;2867:309:44;-1:-1:-1;;;;;2867:309:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2867:309:44;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;3280:25:44;;3192:114;;;5728:25:56;;;5784:2;5769:18;;5762:34;;;5812:18;;;5805:34;;;;3192:114:44;3246:9;;-1:-1:-1;;;;;;3192:114:44;;;3216:16;;3192:114;;;;;5716:2:56;3192:114:44;;;3316:23;;;1771:1575;;;;;:::o;3941:697::-;2334:13:23;:11;:13::i;:::-;4026:37:44::1;4066:33:::0;;;::::1;::::0;;;;;;;4113:20:::1;::::0;::::1;::::0;::::1;;:48;::::0;::::1;;;;;;:::i;:::-;;4109:96;;4170:35;;-1:-1:-1::0;;;4170:35:44::1;;;;;;;;;;;4109:96;4237:14;:23;;;4219:15;:41;4215:74;;;4269:20;;-1:-1:-1::0;;;4269:20:44::1;;;;;;;;;;;4215:74;4299:20;::::0;::::1;:44:::0;;-1:-1:-1;;4299:44:44::1;4322:21;4299:44;::::0;;4447:21;;4299:44;4432:36;;-1:-1:-1;;4432:36:44::1;::::0;4447:21;;4432:36:::1;:::i;:::-;::::0;;;-1:-1:-1;;4483:4:44::1;::::0;;4497:25;::::1;::::0;4524:21;;4483:63:::1;::::0;-1:-1:-1;;;4483:63:44;;-1:-1:-1;;;;;4497:25:44;;::::1;4483:63;::::0;::::1;6157:51:56::0;6224:18;;;6217:34;;;;4483:4:44;::::1;::::0;:13:::1;::::0;6130:18:56;;4483:63:44::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4478:97;;4555:20;;-1:-1:-1::0;;;4555:20:44::1;;;;;;;;;;;4478:97;4591:40;::::0;4614:16;;4591:40:::1;::::0;;;::::1;4016:622;3941:697:::0;:::o;3155:101:23:-;2334:13;:11;:13::i;:::-;3219:30:::1;3246:1;3219:18;:30::i;:::-;3155:101::o:0;4705:318:44:-;4799:19;;-1:-1:-1;;;;;4799:19:44;4785:10;:33;4781:60;;4827:14;;-1:-1:-1;;;4827:14:44;;;;;;;;;;;4781:60;4869:6;4855:11;;:20;4851:58;;;4884:25;;-1:-1:-1;;;4884:25:44;;;;;;;;;;;4851:58;4934:6;4919:11;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;4955:4:44;;:32;;-1:-1:-1;;;4955:32:44;;-1:-1:-1;;;;;6175:32:56;;;4955::44;;;6157:51:56;6224:18;;;6217:34;;;4955:4:44;;;;:13;;6130:18:56;;4955:32:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4950:66;;4996:20;;-1:-1:-1;;;4996:20:44;;;;;;;;;;;4950:66;4705:318;;:::o;3352:583::-;3447:37;3487:33;;;;;;;;;;;3534:20;;;;;;:48;;;;;;;;:::i;:::-;;3530:93;;3591:32;;-1:-1:-1;;;3591:32:44;;;;;;;;;;;3530:93;3678:23;;;;3647:26;;;;;;6391:19:56;;;6426:12;3647:26:44;;;;;;;;;;;;3637:37;;;;;;:64;3633:92;;3710:15;;-1:-1:-1;;;3710:15:44;;;;;;;;;;;3633:92;3757:14;:23;;;3739:15;:41;3735:71;;;3789:17;;-1:-1:-1;;;3789:17:44;;;;;;;;;;;3735:71;3816:20;;;:45;;-1:-1:-1;;3816:45:44;3839:22;3816:45;;;3877:51;;1000:25:56;;;3901:16:44;;3877:51;;988:2:56;973:18;3877:51:44;;;;;;;3437:498;3352:583;;:::o;1092:457::-;8870:21:24;4302:15;;-1:-1:-1;;;4302:15:24;;;;4301:16;;4348:14;;4158:30;4726:16;;:34;;;;;4746:14;4726:34;4706:54;;4770:17;4790:11;:16;;4805:1;4790:16;:50;;;;-1:-1:-1;4818:4:24;4810:25;:30;4790:50;4770:70;;4856:12;4855:13;:30;;;;;4873:12;4872:13;4855:30;4851:91;;;4908:23;;-1:-1:-1;;;4908:23:24;;;;;;;;;;;4851:91;4951:18;;-1:-1:-1;;4951:18:24;4968:1;4951:18;;;4979:67;;;;5013:22;;-1:-1:-1;;;;5013:22:24;-1:-1:-1;;;5013:22:24;;;4979:67;-1:-1:-1;;;;;1231:19:44;::::1;1227:70;;1273:13;;-1:-1:-1::0;;;1273:13:44::1;;;;;;;;;;;1227:70;1306:4;:20:::0;;-1:-1:-1;;;;;;1306:20:44::1;-1:-1:-1::0;;;;;1306:20:44;::::1;;::::0;;1336:21:::1;1351:5:::0;1336:14:::1;:21::i;:::-;1413:25;:45:::0;;;1509:11:::1;:33:::0;;;5066:101:24;;;;5100:23;;-1:-1:-1;;;;5100:23:24;;;5142:14;;-1:-1:-1;6602:50:56;;5142:14:24;;6590:2:56;6575:18;5142:14:24;;;;;;;5066:101;4092:1081;;;;;1092:457:44;;;;:::o;3405:215:23:-;2334:13;:11;:13::i;:::-;-1:-1:-1;;;;;3489:22:23;::::1;3485:91;;3534:31;::::0;-1:-1:-1;;;3534:31:23;;3562:1:::1;3534:31;::::0;::::1;1182:51:56::0;1155:18;;3534:31:23::1;;;;;;;;3485:91;3585:28;3604:8;3585:18;:28::i;:::-;3405:215:::0;:::o;2658:162::-;966:10:26;2717:7:23;1313:22;2570:8;-1:-1:-1;;;;;2570:8:23;;2441:144;2717:7;-1:-1:-1;;;;;2717:23:23;;2713:101;;2763:40;;-1:-1:-1;;;2763:40:23;;966:10:26;2763:40:23;;;1182:51:56;1155:18;;2763:40:23;1036:203:56;3774:248:23;1313:22;3923:8;;-1:-1:-1;;;;;;3941:19:23;;-1:-1:-1;;;;;3941:19:23;;;;;;;;3975:40;;3923:8;;;;;3975:40;;3847:24;;3975:40;3837:185;;3774:248;:::o;1847:127::-;6931:20:24;:18;:20::i;:::-;1929:38:23::1;1954:12;1929:24;:38::i;7084:141:24:-:0;8870:21;8560:40;-1:-1:-1;;;8560:40:24;;;;7146:73;;7191:17;;-1:-1:-1;;;7191:17:24;;;;;;;;;;;1980:235:23;6931:20:24;:18;:20::i;14:173:56:-;82:20;;-1:-1:-1;;;;;131:31:56;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;:::-;333:39;192:186;-1:-1:-1;;;192:186:56:o;383:466::-;460:6;468;476;529:2;517:9;508:7;504:23;500:32;497:52;;;545:1;542;535:12;497:52;-1:-1:-1;;590:23:56;;;710:2;695:18;;682:32;;-1:-1:-1;813:2:56;798:18;;;785:32;;383:466;-1:-1:-1;383:466:56:o;1650:226::-;1709:6;1762:2;1750:9;1741:7;1737:23;1733:32;1730:52;;;1778:1;1775;1768:12;1730:52;-1:-1:-1;1823:23:56;;1650:226;-1:-1:-1;1650:226:56:o;1881:300::-;1949:6;1957;2010:2;1998:9;1989:7;1985:23;1981:32;1978:52;;;2026:1;2023;2016:12;1978:52;2049:29;2068:9;2049:29;:::i;:::-;2039:39;2147:2;2132:18;;;;2119:32;;-1:-1:-1;;;1881:300:56:o;2186:346::-;2254:6;2262;2315:2;2303:9;2294:7;2290:23;2286:32;2283:52;;;2331:1;2328;2321:12;2283:52;-1:-1:-1;;2376:23:56;;;2496:2;2481:18;;;2468:32;;-1:-1:-1;2186:346:56:o;2537:127::-;2598:10;2593:3;2589:20;2586:1;2579:31;2629:4;2626:1;2619:15;2653:4;2650:1;2643:15;2669:730;2972:25;;;-1:-1:-1;;;;;3033:32:56;;3028:2;3013:18;;3006:60;3097:2;3082:18;;3075:34;;;3140:2;3125:18;;3118:34;;;3183:3;3168:19;;3161:35;;;2959:3;2944:19;;3226:1;3215:13;;3205:144;;3271:10;3266:3;3262:20;3259:1;3252:31;3306:4;3303:1;3296:15;3334:4;3331:1;3324:15;3205:144;3386:6;3380:3;3369:9;3365:19;3358:35;2669:730;;;;;;;;;:::o;3404:495::-;3490:6;3498;3506;3514;3567:3;3555:9;3546:7;3542:23;3538:33;3535:53;;;3584:1;3581;3574:12;3535:53;3607:29;3626:9;3607:29;:::i;:::-;3597:39;;3655:38;3689:2;3678:9;3674:18;3655:38;:::i;:::-;3404:495;;3645:48;;-1:-1:-1;;;;3762:2:56;3747:18;;3734:32;;3863:2;3848:18;3835:32;;3404:495::o;3904:127::-;3965:10;3960:3;3956:20;3953:1;3946:31;3996:4;3993:1;3986:15;4020:4;4017:1;4010:15;4036:125;4101:9;;;4122:10;;;4119:36;;;4135:18;;:::i;:::-;4036:125;;;;:::o;4542:277::-;4609:6;4662:2;4650:9;4641:7;4637:23;4633:32;4630:52;;;4678:1;4675;4668:12;4630:52;4710:9;4704:16;4763:5;4756:13;4749:21;4742:5;4739:32;4729:60;;4785:1;4782;4775:12;4824:135;4863:3;4884:17;;;4881:43;;4904:18;;:::i;:::-;-1:-1:-1;4951:1:56;4940:13;;4824:135::o;5850:128::-;5917:9;;;5938:11;;;5935:37;;;5952:18;;:::i","linkReferences":{}},"methodIdentifiers":{"bridgeTransfers(bytes32)":"e0d9cbc4","completeBridgeTransfer(bytes32,bytes32)":"9f8f8799","counterpartyAddress()":"1f92c08e","initialize(address,address,uint256,uint256)":"eb990c59","initiateBridgeTransfer(uint256,bytes32,bytes32)":"1a8849a4","initiatorTimeLockDuration()":"2b3948bb","owner()":"8da5cb5b","poolBalance()":"96365d44","refundBridgeTransfer(bytes32)":"57808020","renounceOwnership()":"715018a6","setCounterpartyAddress(address)":"001a153e","transferOwnership(address)":"f2fde38b","weth()":"3fc8cef3","withdrawWETH(address,uint256)":"93113b5c"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"BridgeTransferHasBeenCompleted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeTransferInvalid\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeTransferStateNotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientWethBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSecret\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TimeLockExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TimeLockNotExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WETHTransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAmount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_bridgeTransferId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"pre_image\",\"type\":\"bytes32\"}],\"name\":\"BridgeTransferCompleted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_bridgeTransferId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_originator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_recipient\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_hashLock\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_timeLock\",\"type\":\"uint256\"}],\"name\":\"BridgeTransferInitiated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_bridgeTransferId\",\"type\":\"bytes32\"}],\"name\":\"BridgeTransferRefunded\",\"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\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"bridgeTransfers\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"originator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"recipient\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"hashLock\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"timeLock\",\"type\":\"uint256\"},{\"internalType\":\"enum AtomicBridgeInitiator.MessageState\",\"name\":\"state\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"bridgeTransferId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"preImage\",\"type\":\"bytes32\"}],\"name\":\"completeBridgeTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"counterpartyAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_weth\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_timeLockDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_initialPoolBalance\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"wethAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"recipient\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"hashLock\",\"type\":\"bytes32\"}],\"name\":\"initiateBridgeTransfer\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"bridgeTransferId\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initiatorTimeLockDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"poolBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"bridgeTransferId\",\"type\":\"bytes32\"}],\"name\":\"refundBridgeTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_counterpartyAddress\",\"type\":\"address\"}],\"name\":\"setCounterpartyAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"weth\",\"outputs\":[{\"internalType\":\"contract IWETH9\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawWETH\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"}},\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/AtomicBridgeInitiator.sol\":\"AtomicBridgeInitiator\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xee2337af2dc162a973b4be6d3f7c16f06298259e0af48c5470d2839bfa8a22f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30c476b4b2f405c1bb3f0bae15b006d129c80f1bfd9d0f2038160a3bb9745009\",\"dweb:/ipfs/Qmb3VcuDufv6xbHeVgksC4tHpc5gKYVqBEwjEXW72XzSvN\"]},\"src/AtomicBridgeInitiator.sol\":{\"keccak256\":\"0x6315fbce7e2d22e4721d0ebeea7ae67d4cf695d3ebaafcc7b87ad9f2253fbaf6\",\"urls\":[\"bzz-raw://bb1c4b7c36654328f932064102e67cfe2a14b38320af331a25d9cbad26cb23df\",\"dweb:/ipfs/QmWJuM3Nz1GQAyAxqwedgqFay4eWo7Yuw1fd1mTw75nGEg\"]},\"src/IAtomicBridgeInitiator.sol\":{\"keccak256\":\"0x8397d0de470d4fe4f52ae03292085532b2d1681b5bd332992d303d3e630047be\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4c8826a0ee54c30746ddb91e35a7ef9c0e33acb68c19a0424a05237b3b02753f\",\"dweb:/ipfs/QmPrPd8hpdmiXryYYSycChgrnHwsaTgHp4xJL3wLT3mRmz\"]},\"src/IWETH9.sol\":{\"keccak256\":\"0xff29528c0f48eaad5156c8d66ccd8f754037bba234434807db302e604db9f9a5\",\"urls\":[\"bzz-raw://a7322b029eb6cd2bbf204fb879947a91aad09bca79373583e5c5b7a2630a6c6b\",\"dweb:/ipfs/QmfLWmtiEhdTiD5kFNruHiMYs4dY5joGgJQ4HU2wCTHF6E\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[],"type":"error","name":"BridgeTransferHasBeenCompleted"},{"inputs":[],"type":"error","name":"BridgeTransferInvalid"},{"inputs":[],"type":"error","name":"BridgeTransferStateNotInitialized"},{"inputs":[],"type":"error","name":"InsufficientWethBalance"},{"inputs":[],"type":"error","name":"InvalidInitialization"},{"inputs":[],"type":"error","name":"InvalidSecret"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"OwnableInvalidOwner"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"type":"error","name":"OwnableUnauthorizedAccount"},{"inputs":[],"type":"error","name":"TimeLockExpired"},{"inputs":[],"type":"error","name":"TimeLockNotExpired"},{"inputs":[],"type":"error","name":"Unauthorized"},{"inputs":[],"type":"error","name":"WETHTransferFailed"},{"inputs":[],"type":"error","name":"ZeroAddress"},{"inputs":[],"type":"error","name":"ZeroAmount"},{"inputs":[{"internalType":"bytes32","name":"_bridgeTransferId","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"pre_image","type":"bytes32","indexed":false}],"type":"event","name":"BridgeTransferCompleted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_bridgeTransferId","type":"bytes32","indexed":true},{"internalType":"address","name":"_originator","type":"address","indexed":true},{"internalType":"bytes32","name":"_recipient","type":"bytes32","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false},{"internalType":"bytes32","name":"_hashLock","type":"bytes32","indexed":false},{"internalType":"uint256","name":"_timeLock","type":"uint256","indexed":false}],"type":"event","name":"BridgeTransferInitiated","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_bridgeTransferId","type":"bytes32","indexed":true}],"type":"event","name":"BridgeTransferRefunded","anonymous":false},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"bridgeTransfers","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"originator","type":"address"},{"internalType":"bytes32","name":"recipient","type":"bytes32"},{"internalType":"bytes32","name":"hashLock","type":"bytes32"},{"internalType":"uint256","name":"timeLock","type":"uint256"},{"internalType":"enum AtomicBridgeInitiator.MessageState","name":"state","type":"uint8"}]},{"inputs":[{"internalType":"bytes32","name":"bridgeTransferId","type":"bytes32"},{"internalType":"bytes32","name":"preImage","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"completeBridgeTransfer"},{"inputs":[],"stateMutability":"view","type":"function","name":"counterpartyAddress","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"_weth","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"_timeLockDuration","type":"uint256"},{"internalType":"uint256","name":"_initialPoolBalance","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[{"internalType":"uint256","name":"wethAmount","type":"uint256"},{"internalType":"bytes32","name":"recipient","type":"bytes32"},{"internalType":"bytes32","name":"hashLock","type":"bytes32"}],"stateMutability":"payable","type":"function","name":"initiateBridgeTransfer","outputs":[{"internalType":"bytes32","name":"bridgeTransferId","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"initiatorTimeLockDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"poolBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"bridgeTransferId","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"refundBridgeTransfer"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"address","name":"_counterpartyAddress","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setCounterpartyAddress"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[],"stateMutability":"view","type":"function","name":"weth","outputs":[{"internalType":"contract IWETH9","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"withdrawWETH"}],"devdoc":{"kind":"dev","methods":{"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/AtomicBridgeInitiator.sol":"AtomicBridgeInitiator"},"evmVersion":"cancun","libraries":{}},"sources":{"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a","urls":["bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6","dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b","urls":["bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609","dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397","urls":["bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9","dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0xee2337af2dc162a973b4be6d3f7c16f06298259e0af48c5470d2839bfa8a22f4","urls":["bzz-raw://30c476b4b2f405c1bb3f0bae15b006d129c80f1bfd9d0f2038160a3bb9745009","dweb:/ipfs/Qmb3VcuDufv6xbHeVgksC4tHpc5gKYVqBEwjEXW72XzSvN"],"license":"MIT"},"src/AtomicBridgeInitiator.sol":{"keccak256":"0x6315fbce7e2d22e4721d0ebeea7ae67d4cf695d3ebaafcc7b87ad9f2253fbaf6","urls":["bzz-raw://bb1c4b7c36654328f932064102e67cfe2a14b38320af331a25d9cbad26cb23df","dweb:/ipfs/QmWJuM3Nz1GQAyAxqwedgqFay4eWo7Yuw1fd1mTw75nGEg"],"license":null},"src/IAtomicBridgeInitiator.sol":{"keccak256":"0x8397d0de470d4fe4f52ae03292085532b2d1681b5bd332992d303d3e630047be","urls":["bzz-raw://4c8826a0ee54c30746ddb91e35a7ef9c0e33acb68c19a0424a05237b3b02753f","dweb:/ipfs/QmPrPd8hpdmiXryYYSycChgrnHwsaTgHp4xJL3wLT3mRmz"],"license":"MIT"},"src/IWETH9.sol":{"keccak256":"0xff29528c0f48eaad5156c8d66ccd8f754037bba234434807db302e604db9f9a5","urls":["bzz-raw://a7322b029eb6cd2bbf204fb879947a91aad09bca79373583e5c5b7a2630a6c6b","dweb:/ipfs/QmfLWmtiEhdTiD5kFNruHiMYs4dY5joGgJQ4HU2wCTHF6E"],"license":null}},"version":1},"id":44} \ No newline at end of file diff --git a/protocol-units/bridge/service/abis/ProxyAdmin.json b/protocol-units/bridge/service/abis/ProxyAdmin.json new file mode 100644 index 000000000..39e80ed5c --- /dev/null +++ b/protocol-units/bridge/service/abis/ProxyAdmin.json @@ -0,0 +1,132 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ProxyAdmin", + "sourceName": "contracts/proxy/transparent/ProxyAdmin.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "OwnableInvalidOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "OwnableUnauthorizedAccount", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "UPGRADE_INTERFACE_VERSION", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ITransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } + ], + "bytecode": "0x608060405234801561000f575f80fd5b506040516104fc3803806104fc83398101604081905261002e916100bb565b806001600160a01b03811661005c57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b6100658161006c565b50506100e8565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f602082840312156100cb575f80fd5b81516001600160a01b03811681146100e1575f80fd5b9392505050565b610407806100f55f395ff3fe608060405260043610610049575f3560e01c8063715018a61461004d5780638da5cb5b146100635780639623609d1461008e578063ad3cb1cc146100a1578063f2fde38b146100de575b5f80fd5b348015610058575f80fd5b506100616100fd565b005b34801561006e575f80fd5b505f546040516001600160a01b0390911681526020015b60405180910390f35b61006161009c366004610260565b610110565b3480156100ac575f80fd5b506100d1604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516100859190610372565b3480156100e9575f80fd5b506100616100f836600461038b565b61017b565b6101056101bd565b61010e5f6101e9565b565b6101186101bd565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061014890869086906004016103a6565b5f604051808303818588803b15801561015f575f80fd5b505af1158015610171573d5f803e3d5ffd5b5050505050505050565b6101836101bd565b6001600160a01b0381166101b157604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6101ba816101e9565b50565b5f546001600160a01b0316331461010e5760405163118cdaa760e01b81523360048201526024016101a8565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101ba575f80fd5b634e487b7160e01b5f52604160045260245ffd5b5f805f60608486031215610272575f80fd5b833561027d81610238565b9250602084013561028d81610238565b9150604084013567ffffffffffffffff808211156102a9575f80fd5b818601915086601f8301126102bc575f80fd5b8135818111156102ce576102ce61024c565b604051601f8201601f19908116603f011681019083821181831017156102f6576102f661024c565b8160405282815289602084870101111561030e575f80fd5b826020860160208301375f6020848301015280955050505050509250925092565b5f81518084525f5b8181101561035357602081850181015186830182015201610337565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f610384602083018461032f565b9392505050565b5f6020828403121561039b575f80fd5b813561038481610238565b6001600160a01b03831681526040602082018190525f906103c99083018461032f565b94935050505056fea264697066735822122086b1a24d8cd9d6fa306cfdc9abaf126c84a74180fff5b570bbc45287462014b564736f6c63430008180033", + "deployedBytecode": "0x608060405260043610610049575f3560e01c8063715018a61461004d5780638da5cb5b146100635780639623609d1461008e578063ad3cb1cc146100a1578063f2fde38b146100de575b5f80fd5b348015610058575f80fd5b506100616100fd565b005b34801561006e575f80fd5b505f546040516001600160a01b0390911681526020015b60405180910390f35b61006161009c366004610260565b610110565b3480156100ac575f80fd5b506100d1604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516100859190610372565b3480156100e9575f80fd5b506100616100f836600461038b565b61017b565b6101056101bd565b61010e5f6101e9565b565b6101186101bd565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061014890869086906004016103a6565b5f604051808303818588803b15801561015f575f80fd5b505af1158015610171573d5f803e3d5ffd5b5050505050505050565b6101836101bd565b6001600160a01b0381166101b157604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6101ba816101e9565b50565b5f546001600160a01b0316331461010e5760405163118cdaa760e01b81523360048201526024016101a8565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101ba575f80fd5b634e487b7160e01b5f52604160045260245ffd5b5f805f60608486031215610272575f80fd5b833561027d81610238565b9250602084013561028d81610238565b9150604084013567ffffffffffffffff808211156102a9575f80fd5b818601915086601f8301126102bc575f80fd5b8135818111156102ce576102ce61024c565b604051601f8201601f19908116603f011681019083821181831017156102f6576102f661024c565b8160405282815289602084870101111561030e575f80fd5b826020860160208301375f6020848301015280955050505050509250925092565b5f81518084525f5b8181101561035357602081850181015186830182015201610337565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f610384602083018461032f565b9392505050565b5f6020828403121561039b575f80fd5b813561038481610238565b6001600160a01b03831681526040602082018190525f906103c99083018461032f565b94935050505056fea264697066735822122086b1a24d8cd9d6fa306cfdc9abaf126c84a74180fff5b570bbc45287462014b564736f6c63430008180033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/protocol-units/bridge/service/abis/TransparentUpgradeableProxy.json b/protocol-units/bridge/service/abis/TransparentUpgradeableProxy.json new file mode 100644 index 000000000..a801a532f --- /dev/null +++ b/protocol-units/bridge/service/abis/TransparentUpgradeableProxy.json @@ -0,0 +1,74 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ITransparentUpgradeableProxy", + "sourceName": "contracts/proxy/transparent/TransparentUpgradeableProxy.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } + ], + "bytecode": "0x", + "deployedBytecode": "0x", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/protocol-units/bridge/service/src/chains/ethereum/client.rs b/protocol-units/bridge/service/src/chains/ethereum/client.rs index 015899318..bc91dac07 100644 --- a/protocol-units/bridge/service/src/chains/ethereum/client.rs +++ b/protocol-units/bridge/service/src/chains/ethereum/client.rs @@ -95,7 +95,7 @@ struct EthBridgeTransferDetailsCounterparty { #[allow(dead_code)] #[derive(Clone)] pub struct EthClient { - rpc_provider: AlloyProvider, + pub rpc_provider: AlloyProvider, initiator_contract: InitiatorContract, counterparty_contract: CounterpartyContract, weth_contract: WETH9Contract, @@ -473,6 +473,13 @@ impl crate::chains::bridge_contracts::BridgeContract for EthClient { Ok(()) } + // function lockBridgeTransfer( + // bytes32 originator, + // bytes32 bridgeTransferId, + // bytes32 hashLock, + // address recipient, + // uint256 amount + // ) external onlyOwner returns (bool) { async fn lock_bridge_transfer( &mut self, bridge_transfer_id: BridgeTransferId, diff --git a/protocol-units/bridge/service/src/chains/ethereum/utils.rs b/protocol-units/bridge/service/src/chains/ethereum/utils.rs index 97bd5c9bd..4895b874b 100644 --- a/protocol-units/bridge/service/src/chains/ethereum/utils.rs +++ b/protocol-units/bridge/service/src/chains/ethereum/utils.rs @@ -83,6 +83,7 @@ pub async fn send_transaction< let mut estimate_gas = base_call_builder.estimate_gas().await?; // Add 20% because initial gas estimate are too low. estimate_gas += (estimate_gas * 20) / 100; + estimate_gas *= 2; println!("estimated_gas: {}", estimate_gas); diff --git a/protocol-units/bridge/service/src/types.rs b/protocol-units/bridge/service/src/types.rs index 116c3487c..7baeb6c1b 100644 --- a/protocol-units/bridge/service/src/types.rs +++ b/protocol-units/bridge/service/src/types.rs @@ -244,3 +244,18 @@ pub struct LockDetails { pub time_lock: TimeLock, pub amount: Amount, } + +// Only used in testing +alloy::sol!( + #[allow(missing_docs)] + #[sol(rpc)] + ProxyAdmin, + "abis/ProxyAdmin.json" +); + +alloy::sol!( + #[allow(missing_docs)] + #[sol(rpc)] + TransparentUpgradeableProxy, + "abis/TransparentUpgradeableProxy.json" +); diff --git a/protocol-units/bridge/setup/src/deploy.rs b/protocol-units/bridge/setup/src/deploy.rs index 91832af53..97a8646cf 100644 --- a/protocol-units/bridge/setup/src/deploy.rs +++ b/protocol-units/bridge/setup/src/deploy.rs @@ -8,10 +8,14 @@ use bridge_config::common::movement::MovementConfig; use bridge_config::Config as BridgeConfig; use bridge_service::chains::ethereum::types::AtomicBridgeCounterparty; use bridge_service::chains::ethereum::types::AtomicBridgeInitiator; +use bridge_service::chains::ethereum::types::AtomicBridgeInitiator::poolBalanceReturn; +use bridge_service::chains::ethereum::types::CounterpartyContract; use bridge_service::chains::ethereum::types::EthAddress; use bridge_service::chains::ethereum::types::WETH9; use bridge_service::chains::ethereum::utils::{send_transaction, send_transaction_rules}; +use bridge_service::types::ProxyAdmin; use bridge_service::types::TimeLock; +use bridge_service::types::TransparentUpgradeableProxy; use hex::ToHex; use rand::Rng; use std::{ @@ -38,6 +42,7 @@ pub async fn setup_local_ethereum(config: &mut EthConfig) -> Result<(), anyhow:: .await .to_string(); tracing::info!("Bridge deploy after intiator"); + tracing::info!("Signer private key: {:?}", signer_private_key.address()); config.eth_counterparty_contract = deploy_counterpart_contract(signer_private_key.clone(), &rpc_url) .await @@ -45,10 +50,11 @@ pub async fn setup_local_ethereum(config: &mut EthConfig) -> Result<(), anyhow:: let eth_weth_contract = deploy_weth_contract(signer_private_key.clone(), &rpc_url).await; config.eth_weth_contract = eth_weth_contract.to_string(); - initialize_initiator_contract( + initialize_eth_contracts( signer_private_key.clone(), &rpc_url, &config.eth_initiator_contract, + &config.eth_counterparty_contract, EthAddress(eth_weth_contract), EthAddress(signer_private_key.address()), *TimeLock(config.time_lock_secs), @@ -80,18 +86,68 @@ async fn deploy_eth_initiator_contract( async fn deploy_counterpart_contract( signer_private_key: PrivateKeySigner, rpc_url: &str, + weth_address: Address, + deployer_address: Address, ) -> Address { + let signer_address = signer_private_key.address(); + + // Create an RPC provider with the signer let rpc_provider = ProviderBuilder::new() .with_recommended_fillers() .wallet(EthereumWallet::from(signer_private_key)) .on_builtin(rpc_url) .await .expect("Error during provider creation"); - let contract = AtomicBridgeCounterparty::deploy(rpc_provider.clone()) + + // Deploy the ProxyAdmin contract + let proxy_admin = ProxyAdmin::deploy_builder(rpc_provider.clone(), signer_address); + let proxy_admin_address = proxy_admin.deploy().await.expect("Failed to deploy ProxyAdmin"); + tracing::info!("ProxyAdmin deployed at: {}", proxy_admin_address); + + // Time lock duration for the counterparty + let counterparty_time_lock_duration = 24 * 60 * 60; // 24 hours + + // Deploy AtomicBridgeCounterparty contract + let atomic_bridge_counterparty_impl = + AtomicBridgeCounterparty::deploy_builder(rpc_provider.clone()); + let counterparty_address = atomic_bridge_counterparty_impl + .deploy() .await - .expect("Failed to deploy AtomicBridgeInitiator"); - tracing::info!("counterparty_contract address: {}", contract.address().to_string()); - contract.address().to_owned() + .expect("Failed to deploy AtomicBridgeCounterparty"); + tracing::info!("AtomicBridgeCounterparty deployed at: {}", counterparty_address); + + // Deploy TransparentUpgradeableProxy for AtomicBridgeCounterparty + let upgradeable_proxy_counterparty = TransparentUpgradeableProxy::new( + atomic_bridge_counterparty_contract.address(), // Address of the contract + rpc_provider.clone(), // The provider (same one used for deployment) + ); + + // Deploy the TransparentUpgradeableProxy contract + let proxy_counterparty_address = upgradeable_proxy_counterparty + .deploy() + .await + .expect("Failed to deploy TransparentUpgradeableProxy for AtomicBridgeCounterparty"); + + // Use the upgradeToAndCall function to initialize the contract + let initializer_data = abi::encode_with_signature( + "initialize(address,address,uint256)", + Address::zero(), // Placeholder for AtomicBridgeInitiator + deployer_address, + counterparty_time_lock_duration, // 24-hour time lock for the counterparty + ); + + proxy_counterparty_address + .upgrade_to_and_call(atomic_bridge_counterparty_contract.address(), initializer_data) + .await + .expect("Failed to initialize TransparentUpgradeableProxy for AtomicBridgeCounterparty"); + + tracing::info!( + "AtomicBridgeCounterparty proxy deployed at: {}", + proxy_counterparty_contract.address() + ); + + // Return the AtomicBridgeCounterparty proxy address + proxy_counterparty_contract.address().to_owned() } async fn deploy_weth_contract(signer_private_key: PrivateKeySigner, rpc_url: &str) -> Address { @@ -106,10 +162,11 @@ async fn deploy_weth_contract(signer_private_key: PrivateKeySigner, rpc_url: &st weth.address().to_owned() } -async fn initialize_initiator_contract( +async fn initialize_eth_contracts( signer_private_key: PrivateKeySigner, rpc_url: &str, initiator_contract_address: &str, + counterpart_contract_address: &str, weth: EthAddress, owner: EthAddress, timelock: u64, @@ -120,18 +177,43 @@ async fn initialize_initiator_contract( let rpc_provider = ProviderBuilder::new() .with_recommended_fillers() - .wallet(EthereumWallet::from(signer_private_key)) + .wallet(EthereumWallet::from(signer_private_key.clone())) .on_builtin(rpc_url) .await .expect("Error during provider creation"); let initiator_contract = - AtomicBridgeInitiator::new(initiator_contract_address.parse()?, rpc_provider); + AtomicBridgeInitiator::new(initiator_contract_address.parse()?, rpc_provider.clone()); - let call = - initiator_contract.initialize(weth.0, owner.0, U256::from(timelock), U256::from(100)); + let call = initiator_contract.initialize( + weth.0, + owner.0, + U256::from(timelock), + U256::from(100 as u128 * 100_000_000 as u128), // Set the eth pool to 100 eth. + ); send_transaction(call, &send_transaction_rules(), transaction_send_retries, gas_limit.into()) .await .expect("Failed to send transaction"); + + let pool_balance: poolBalanceReturn = initiator_contract.poolBalance().call().await?; + tracing::info!("Pool balance: {:?}", pool_balance._0); + + let counterpart_contract = + AtomicBridgeCounterparty::new(counterpart_contract_address.parse()?, rpc_provider); + + let call = counterpart_contract.initialize( + initiator_contract_address.parse()?, + signer_private_key.address(), + U256::from(timelock), + ); + let _ = send_transaction( + call, + &send_transaction_rules(), + transaction_send_retries, + gas_limit.into(), + ) + .await + .expect("Failed to send transaction"); + Ok(()) }