diff --git a/Cargo.lock b/Cargo.lock index 2b9f307e8..c6dadb2ca 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -87,6 +87,7 @@ dependencies = [ "cw-storage-plus 1.1.0", "cw-utils 1.0.1", "error-stack", + "itertools 0.11.0", "report", "schemars", "serde", diff --git a/contracts/aggregate-verifier/Cargo.toml b/contracts/aggregate-verifier/Cargo.toml index 6136d4e2c..af78d5c94 100644 --- a/contracts/aggregate-verifier/Cargo.toml +++ b/contracts/aggregate-verifier/Cargo.toml @@ -42,6 +42,7 @@ cosmwasm-storage = { workspace = true } cw-storage-plus = { workspace = true } cw-utils = "1.0.1" error-stack = { workspace = true } +itertools = { workspace = true } report = { workspace = true } schemars = "0.8.10" serde = { version = "1.0.145", default-features = false, features = ["derive"] } diff --git a/contracts/aggregate-verifier/src/client.rs b/contracts/aggregate-verifier/src/client.rs new file mode 100644 index 000000000..c163bcc40 --- /dev/null +++ b/contracts/aggregate-verifier/src/client.rs @@ -0,0 +1,141 @@ +use axelar_wasm_std::utils::TryMapExt; +use axelar_wasm_std::{FnExt, VerificationStatus}; +use connection_router::state::CrossChainId; +use connection_router::Message; +use cosmwasm_std::{to_binary, Addr, QuerierWrapper, QueryRequest, WasmMsg, WasmQuery}; +use error_stack::{Result, ResultExt}; +use serde::de::DeserializeOwned; +use std::collections::HashMap; + +pub struct Verifier<'a> { + pub querier: QuerierWrapper<'a>, + pub address: Addr, +} + +impl Verifier<'_> { + fn execute(&self, msg: &crate::msg::ExecuteMsg) -> WasmMsg { + WasmMsg::Execute { + contract_addr: self.address.to_string(), + msg: to_binary(msg).expect("msg should always be serializable"), + funds: vec![], + } + } + + fn query(&self, msg: &crate::msg::QueryMsg) -> Result { + self.querier + .query(&QueryRequest::Wasm(WasmQuery::Smart { + contract_addr: self.address.to_string(), + msg: to_binary(&msg).expect("msg should always be serializable"), + })) + .change_context(Error::QueryVerifier) + } + + pub fn verify(&self, msgs: Vec) -> Option { + ignore_empty(msgs) + .map(|msgs| self.execute(&crate::msg::ExecuteMsg::VerifyMessages { messages: msgs })) + } + + pub fn messages_with_status( + &self, + msgs: Vec, + ) -> Result, Error> { + ignore_empty(msgs.clone()) + .try_map(|msgs| self.query_message_status(msgs))? + .map(|status_by_id| ids_to_msgs(status_by_id, msgs)) + .into_iter() + .flatten() + .then(Ok) + } + + fn query_message_status( + &self, + msgs: Vec, + ) -> Result, Error> { + self.query::>( + &crate::msg::QueryMsg::GetMessagesStatus { messages: msgs }, + )? + .into_iter() + .collect::>() + .then(Ok) + } +} + +// TODO: unify across contract clients +fn ignore_empty(msgs: Vec) -> Option> { + if msgs.is_empty() { + None + } else { + Some(msgs) + } +} + +fn ids_to_msgs( + status_by_id: HashMap, + msgs: Vec, +) -> impl Iterator { + msgs.into_iter().map(move |msg| { + let status = status_by_id + .get(&msg.cc_id) + .copied() + .unwrap_or(VerificationStatus::None); + (msg, status) + }) +} + +#[derive(thiserror::Error, Debug)] +pub enum Error { + #[error("could not query the verifier contract")] + QueryVerifier, +} + +#[cfg(test)] +mod tests { + use axelar_wasm_std::VerificationStatus; + use connection_router::state::CrossChainId; + use cosmwasm_std::testing::MockQuerier; + use std::str::FromStr; + + use super::*; + + #[test] + fn verifier_returns_error_when_query_fails() { + let querier = MockQuerier::default(); + let verifier = Verifier { + address: Addr::unchecked("not a contract"), + querier: QuerierWrapper::new(&querier), + }; + + let result = verifier.query::>( + &crate::msg::QueryMsg::GetMessagesStatus { messages: vec![] }, + ); + + assert!(matches!( + result.unwrap_err().current_context(), + Error::QueryVerifier + )) + } + + // due to contract updates or misconfigured verifier contract address the verifier might respond, + // but deliver an unexpected data type. This tests that the client returns an error in such cases. + #[test] + fn verifier_returns_error_on_return_type_mismatch() { + let mut querier = MockQuerier::default(); + querier.update_wasm(|_| { + Ok(to_binary(&CrossChainId::from_str("eth:0x1234").unwrap()).into()).into() + }); + + let verifier = Verifier { + address: Addr::unchecked("not a contract"), + querier: QuerierWrapper::new(&querier), + }; + + let result = verifier.query::>( + &crate::msg::QueryMsg::GetMessagesStatus { messages: vec![] }, + ); + + assert!(matches!( + result.unwrap_err().current_context(), + Error::QueryVerifier + )) + } +} diff --git a/contracts/aggregate-verifier/src/lib.rs b/contracts/aggregate-verifier/src/lib.rs index a5abdbb0f..1a0902c26 100644 --- a/contracts/aggregate-verifier/src/lib.rs +++ b/contracts/aggregate-verifier/src/lib.rs @@ -1,3 +1,4 @@ +pub mod client; pub mod contract; pub mod error; pub mod msg; diff --git a/contracts/connection-router/src/client.rs b/contracts/connection-router/src/client.rs new file mode 100644 index 000000000..552502ffa --- /dev/null +++ b/contracts/connection-router/src/client.rs @@ -0,0 +1,30 @@ +use crate::msg::ExecuteMsg; +use crate::Message; +use cosmwasm_std::{to_binary, Addr, WasmMsg}; + +pub struct Router { + pub address: Addr, +} + +impl Router { + fn execute(&self, msg: &ExecuteMsg) -> WasmMsg { + WasmMsg::Execute { + contract_addr: self.address.to_string(), + msg: to_binary(&msg).expect("msg should always be serializable"), + funds: vec![], + } + } + + pub fn route(&self, msgs: Vec) -> Option { + ignore_empty(msgs).map(|msgs| self.execute(&ExecuteMsg::RouteMessages(msgs))) + } +} + +// TODO: unify across contract clients +fn ignore_empty(msgs: Vec) -> Option> { + if msgs.is_empty() { + None + } else { + Some(msgs) + } +} diff --git a/contracts/connection-router/src/lib.rs b/contracts/connection-router/src/lib.rs index 3b90b4195..6467694bd 100644 --- a/contracts/connection-router/src/lib.rs +++ b/contracts/connection-router/src/lib.rs @@ -1,3 +1,4 @@ +pub mod client; pub mod contract; pub mod error; pub mod events; diff --git a/contracts/gateway/Cargo.toml b/contracts/gateway/Cargo.toml index 61f56b5e2..306efb79f 100644 --- a/contracts/gateway/Cargo.toml +++ b/contracts/gateway/Cargo.toml @@ -24,6 +24,8 @@ path = "src/bin/schema.rs" backtraces = ["cosmwasm-std/backtraces"] # use library feature to disable all instantiate/execute/query exports library = [] +# generate golden files for the tests +generate_golden_files = [] [package.metadata.scripts] optimize = """docker run --rm -v "$(pwd)":/code \ diff --git a/contracts/gateway/src/contract.rs b/contracts/gateway/src/contract.rs index cfbcfc429..eb0480a8e 100644 --- a/contracts/gateway/src/contract.rs +++ b/contracts/gateway/src/contract.rs @@ -1,12 +1,9 @@ #[cfg(not(feature = "library"))] use cosmwasm_std::entry_point; use cosmwasm_std::{Binary, Deps, DepsMut, Env, MessageInfo, Response}; +use std::fmt::Debug; -use crate::contract::execute::Contract; -use crate::{ - msg::{ExecuteMsg, InstantiateMsg, QueryMsg}, - state::{Config, CONFIG}, -}; +use crate::msg::{ExecuteMsg, InstantiateMsg, QueryMsg}; mod execute; mod query; @@ -14,41 +11,116 @@ mod query; #[cfg_attr(not(feature = "library"), entry_point)] pub fn instantiate( deps: DepsMut, - _env: Env, - _info: MessageInfo, + env: Env, + info: MessageInfo, msg: InstantiateMsg, ) -> Result { - let router = deps.api.addr_validate(&msg.router_address)?; - let verifier = deps.api.addr_validate(&msg.verifier_address)?; - - CONFIG.save(deps.storage, &Config { verifier, router })?; - - Ok(Response::new()) + Ok(internal::instantiate(deps, env, info, msg)?) } #[cfg_attr(not(feature = "library"), entry_point)] pub fn execute( deps: DepsMut, - _env: Env, + env: Env, info: MessageInfo, msg: ExecuteMsg, ) -> Result { - let mut contract = Contract::new(deps); - match msg { - ExecuteMsg::VerifyMessages(msgs) => contract.verify_messages(msgs), - ExecuteMsg::RouteMessages(msgs) => contract.route_messages(info.sender, msgs), - } - .map_err(axelar_wasm_std::ContractError::from) + Ok(internal::execute(deps, env, info, msg)?) } #[cfg_attr(not(feature = "library"), entry_point)] pub fn query( deps: Deps, - _env: Env, + env: Env, msg: QueryMsg, ) -> Result { - match msg { - QueryMsg::GetMessages { message_ids } => query::get_messages(deps, message_ids), + Ok(internal::query(deps, env, msg)?) +} + +#[derive(thiserror::Error, Debug)] +pub enum Error { + #[error("gateway contract config is missing")] + ConfigMissing, + #[error("invalid store access")] + InvalidStoreAccess, + #[error("failed to serialize the response")] + SerializeResponse, + #[error("batch contains duplicate message ids")] + DuplicateMessageIds, + #[error("invalid address")] + InvalidAddress, + #[error("failed to query message status")] + MessageStatus, +} + +mod internal { + use crate::contract::Error; + use crate::msg::{ExecuteMsg, InstantiateMsg, QueryMsg}; + use crate::state::Config; + use crate::{contract, state}; + use aggregate_verifier::client::Verifier; + use connection_router::client::Router; + use cosmwasm_std::{to_binary, Binary, Deps, DepsMut, Env, MessageInfo, Response}; + use error_stack::{Result, ResultExt}; + + pub(crate) fn instantiate( + deps: DepsMut, + _env: Env, + _info: MessageInfo, + msg: InstantiateMsg, + ) -> Result { + let router = deps + .api + .addr_validate(&msg.router_address) + .change_context(Error::InvalidAddress) + .attach_printable(msg.router_address)?; + + let verifier = deps + .api + .addr_validate(&msg.verifier_address) + .change_context(Error::InvalidAddress) + .attach_printable(msg.verifier_address)?; + + state::save_config(deps.storage, &Config { verifier, router }) + .change_context(Error::InvalidStoreAccess)?; + + Ok(Response::new()) + } + + pub(crate) fn execute( + deps: DepsMut, + _env: Env, + info: MessageInfo, + msg: ExecuteMsg, + ) -> Result { + let config = state::load_config(deps.storage).change_context(Error::ConfigMissing)?; + let verifier = Verifier { + address: config.verifier, + querier: deps.querier, + }; + + let router = Router { + address: config.router, + }; + + match msg { + ExecuteMsg::VerifyMessages(msgs) => contract::execute::verify_messages(&verifier, msgs), + ExecuteMsg::RouteMessages(msgs) => { + if info.sender == router.address { + contract::execute::route_outgoing_messages(deps.storage, msgs) + } else { + contract::execute::route_incoming_messages(&verifier, &router, msgs) + } + } + } + } + + pub(crate) fn query(deps: Deps, _env: Env, msg: QueryMsg) -> Result { + match msg { + QueryMsg::GetMessages { message_ids } => { + let msgs = contract::query::get_outgoing_messages(deps.storage, message_ids)?; + to_binary(&msgs).change_context(Error::SerializeResponse) + } + } } - .map_err(axelar_wasm_std::ContractError::from) } diff --git a/contracts/gateway/src/contract/execute.rs b/contracts/gateway/src/contract/execute.rs index 250d6857a..06b035c2b 100644 --- a/contracts/gateway/src/contract/execute.rs +++ b/contracts/gateway/src/contract/execute.rs @@ -1,158 +1,63 @@ -use std::collections::HashMap; - -use axelar_wasm_std::VerificationStatus; -use cosmwasm_std::{to_binary, Addr, DepsMut, Response, WasmMsg}; -use error_stack::{Result, ResultExt}; -use itertools::Itertools; - -use crate::contract::query; -use crate::contract::query::Verifier; -use crate::error::ContractError; -use connection_router::state::Message; - +use crate::contract::Error; use crate::events::GatewayEvent; use crate::state; -use crate::state::{Config, Store}; +use aggregate_verifier::client::Verifier; +use axelar_wasm_std::{FnExt, VerificationStatus}; +use connection_router::client::Router; +use connection_router::state::Message; +use cosmwasm_std::{Event, Response, Storage, WasmMsg}; +use error_stack::{Result, ResultExt}; +use itertools::Itertools; -pub struct Contract -where - V: Verifier, - S: Store, -{ - pub config: Config, - pub verifier: V, - pub store: S, +pub fn verify_messages(verifier: &Verifier, msgs: Vec) -> Result { + apply(verifier, msgs, |msgs_by_status| { + verify(verifier, msgs_by_status) + }) } -impl<'a> Contract, state::GatewayStore<'a>> { - pub fn new(deps: DepsMut) -> Contract { - let store = state::GatewayStore { - storage: deps.storage, - }; - let config = store.load_config(); - let verifier_addr = config.verifier.clone(); - Contract { - config, - store, - verifier: query::VerifierApi { - address: verifier_addr, - querier: deps.querier, - }, - } - } +pub(crate) fn route_incoming_messages( + verifier: &Verifier, + router: &Router, + msgs: Vec, +) -> Result { + apply(verifier, msgs, |msgs_by_status| { + route(router, msgs_by_status) + }) } -impl Contract -where - V: Verifier, - S: Store, -{ - pub fn verify_messages(&self, msgs: Vec) -> Result { - // short circuit if there are no messages there is no need to interact with the verifier so it saves gas - if msgs.is_empty() { - return Ok(Response::new()); - } - - ensure_unique_ids(&msgs)?; - - let (_, unverified) = self.partition_by_verified(msgs)?; - - // short circuit if there are no unverified messages - // there is no need to interact with the verifier so it saves gas - if unverified.is_empty() { - return Ok(Response::new()); - } - - Ok(Response::new().add_message(WasmMsg::Execute { - contract_addr: self.config.verifier.to_string(), - msg: to_binary(&aggregate_verifier::msg::ExecuteMsg::VerifyMessages { - messages: unverified, - }) - .change_context(ContractError::CreateVerifierExecuteMsg)?, - funds: vec![], - })) - } - - pub fn route_messages( - &mut self, - sender: Addr, - msgs: Vec, - ) -> Result { - if sender == self.config.router { - self.route_outgoing_messages(msgs) - } else { - self.route_incoming_messages(msgs) - } - } - - fn route_outgoing_messages(&mut self, msgs: Vec) -> Result { - ensure_unique_ids(&msgs)?; - - for msg in msgs.iter() { - self.store.save_outgoing_msg(msg.cc_id.clone(), msg)?; - } - - Ok(Response::new().add_events( - msgs.into_iter() - .map(|msg| GatewayEvent::MessageRouted { msg }.into()), - )) - } - - fn route_incoming_messages(&self, msgs: Vec) -> Result { - ensure_unique_ids(&msgs)?; - - let (verified, unverified) = self.partition_by_verified(msgs)?; - - let any_verified = !verified.is_empty(); - - let mut response = Response::new() - .add_events( - verified - .clone() - .into_iter() - .map(|msg| GatewayEvent::MessageRouted { msg }.into()), - ) - .add_events( - unverified - .into_iter() - .map(|msg| GatewayEvent::MessageRoutingFailed { msg }.into()), - ); - - if any_verified { - response = response.add_message(WasmMsg::Execute { - contract_addr: self.config.router.to_string(), - msg: to_binary(&connection_router::msg::ExecuteMsg::RouteMessages(verified)) - .change_context(ContractError::CreateRouterExecuteMsg)?, - funds: vec![], - }) - } +// because the messages came from the router, we can assume they are already verified +pub(crate) fn route_outgoing_messages( + store: &mut dyn Storage, + verified: Vec, +) -> Result { + let msgs = check_for_duplicates(verified)?; - Ok(response) + for msg in msgs.iter() { + state::save_outgoing_msg(store, msg.cc_id.clone(), msg) + .change_context(Error::InvalidStoreAccess)?; } - fn partition_by_verified( - &self, - msgs: Vec, - ) -> Result<(Vec, Vec), ContractError> { - let query_response = - self.verifier - .verify(aggregate_verifier::msg::QueryMsg::GetMessagesStatus { - messages: msgs.to_vec(), - })?; - - let statuses = query_response.into_iter().collect::>(); + Ok(Response::new().add_events( + msgs.into_iter() + .map(|msg| GatewayEvent::Routing { msg }.into()), + )) +} - Ok(msgs.into_iter().partition(|msg| { - statuses - .get(&msg.cc_id) - .copied() - .unwrap_or(VerificationStatus::None) - == VerificationStatus::SucceededOnChain - })) - } +fn apply( + verifier: &Verifier, + msgs: Vec, + action: impl Fn(Vec<(VerificationStatus, Vec)>) -> (Option, Vec), +) -> Result { + check_for_duplicates(msgs)? + .then(|msgs| verifier.messages_with_status(msgs)) + .change_context(Error::MessageStatus)? + .then(group_by_status) + .then(action) + .then(|(msgs, events)| Response::new().add_messages(msgs).add_events(events)) + .then(Ok) } -fn ensure_unique_ids(msgs: &[Message]) -> Result<(), ContractError> { +fn check_for_duplicates(msgs: Vec) -> Result, Error> { let duplicates: Vec<_> = msgs .iter() // the following two map instructions are separated on purpose @@ -162,443 +67,110 @@ fn ensure_unique_ids(msgs: &[Message]) -> Result<(), ContractError> { .map(|cc_id| cc_id.to_string()) .collect(); if !duplicates.is_empty() { - return Err(ContractError::DuplicateMessageIds) - .attach_printable(duplicates.iter().join(", ")); + return Err(Error::DuplicateMessageIds).attach_printable(duplicates.iter().join(", ")); } - Ok(()) + Ok(msgs) } -#[cfg(test)] -mod tests { - use crate::contract::execute::Contract; - use crate::contract::query; - use crate::error::ContractError; - use crate::state; - use axelar_wasm_std::VerificationStatus; - use connection_router::state::{CrossChainId, Message, ID_SEPARATOR}; - use cosmwasm_std::{Addr, CosmosMsg, SubMsg, WasmMsg}; - use error_stack::bail; - use std::collections::HashMap; - use std::sync::{Arc, RwLock}; - - /// If there are messages with duplicate IDs, the gateway should fail - #[test] - fn verify_fail_duplicates() { - let msg_store = Arc::new(RwLock::new(HashMap::new())); - let mut msgs = generate_messages(10); - // no messages are verified - let verified = HashMap::new(); - let contract = create_contract(msg_store.clone(), verified); - - // duplicate some IDs - msgs[5..] - .iter_mut() - .for_each(|msg| msg.cc_id.id = "same_id:000".parse().unwrap()); - - let result = contract.verify_messages(msgs); - assert!(result - .is_err_and(|err| matches!(err.current_context(), ContractError::DuplicateMessageIds))); - } - - /// If all messages are verified, the gateway should not call the verifier - #[test] - fn verify_all_verified() { - let msg_store = Arc::new(RwLock::new(HashMap::new())); - let msgs = generate_messages(10); - // mark all generated messages as verified - let verified = msgs - .iter() - .map(|msg| (msg.cc_id.clone(), VerificationStatus::SucceededOnChain)) - .collect(); - let contract = create_contract(msg_store.clone(), verified); - - // try zero, one, many messages - let inputs = vec![vec![], msgs[..1].to_vec(), msgs]; - for input in inputs { - let result = contract.verify_messages(input); - assert!(result.is_ok()); - assert_eq!(result.unwrap().messages.len(), 0); - } - } - - /// If none of the messages are verified, the gateway should tell the verifier to verify all - #[test] - fn verify_none_verified() { - let msg_store = Arc::new(RwLock::new(HashMap::new())); - let msgs = generate_messages(10); - // no messages are verified - let verified = HashMap::new(); - let contract = create_contract(msg_store.clone(), verified); - - // try one and many messages (zero messages are tested in verify_all_verified) - let inputs = vec![msgs[..1].to_vec(), msgs]; - - // expect: no error, all input messages get verified - for input in inputs { - let result = contract.verify_messages(input.clone()); - assert!(result.is_ok()); - assert_correct_messages_verified( - result.unwrap().messages, - &contract.config.verifier, - &input, - ); - } - } - - /// If a part of the messages is verified, the gateway should tell the verifier to verify only the unverified messages - #[test] - fn verify_partially_verified() { - let msg_store = Arc::new(RwLock::new(HashMap::new())); - let msgs = generate_messages(10); - // half of the messages are verified - let verified = msgs[..5] - .iter() - .map(|msg| (msg.cc_id.clone(), VerificationStatus::SucceededOnChain)) - .collect(); - let contract = create_contract(msg_store.clone(), verified); - - // expect: no error, only the unverified messages get verified - let result = contract.verify_messages(msgs.clone()); - assert!(result.is_ok()); - assert_correct_messages_verified( - result.unwrap().messages, - &contract.config.verifier, - &msgs[5..], - ); - } - - /// As long as the state of the verifier contract doesn't change, the verify call should always return the same result - #[test] - fn verify_is_idempotent() { - let msg_store = Arc::new(RwLock::new(HashMap::new())); - let msgs = generate_messages(10); - // half of the messages are verified - let verified = msgs[..5] - .iter() - .map(|msg| (msg.cc_id.clone(), VerificationStatus::SucceededOnChain)) - .collect(); - let contract = create_contract(msg_store.clone(), verified); - - // expect: same response when called multiple times and no messages are stored - let result1 = contract.verify_messages(msgs.clone()); - let result2 = contract.verify_messages(msgs.clone()); - assert_eq!(result1.unwrap(), result2.unwrap()); - assert!(msg_store.read().unwrap().is_empty()) - } - - /// If the verifier query returns an error, the gateway should fail - #[test] - fn verify_verifier_fails() { - let msg_store = Arc::new(RwLock::new(HashMap::new())); - let msgs = generate_messages(10); - - // make the fake query fail - let mut verifier = query::MockVerifier::new(); - verifier - .expect_verify() - .returning(|_| bail!(ContractError::QueryVerifier)); - let contract = Contract { - verifier, - ..create_contract(msg_store.clone(), HashMap::new()) - }; - - let result = contract.verify_messages(msgs.clone()); - assert!( - result.is_err_and(|err| matches!(err.current_context(), ContractError::QueryVerifier)) - ); - } - - /// If there are messages with duplicate IDs, the gateway should fail - #[test] - fn route_messages_fail_duplicates() { - let msg_store = Arc::new(RwLock::new(HashMap::new())); - let mut msgs = generate_messages(10); - // no messages are verified - let verified = HashMap::new(); - let mut contract = create_contract(msg_store.clone(), verified); - - // senders are "router" and "not a router" - let senders = vec![ - contract.config.router.clone(), - Addr::unchecked("not a router"), - ]; - - // duplicate some IDs - msgs[5..] - .iter_mut() - .for_each(|msg| msg.cc_id.id = "same_id:000".parse().unwrap()); - - for sender in senders { - let result = contract.route_messages(sender, msgs.clone()); - assert!(result.is_err_and(|err| matches!( - err.current_context(), - ContractError::DuplicateMessageIds - ))); - } - } - - /// If all messages are verified, the gateway should - /// 1. call the router if the sender is not a router - /// 2. store the msgs to be picked up by relayers if the sender is a router - #[test] - fn route_all_verified() { - let msg_store = Arc::new(RwLock::new(HashMap::new())); - - let msgs = generate_messages(10); - // mark all generated messages as verified - let verified = msgs - .iter() - .map(|msg| (msg.cc_id.clone(), VerificationStatus::SucceededOnChain)) - .collect(); - let mut contract = create_contract(msg_store.clone(), verified); +fn group_by_status( + msgs_with_status: impl Iterator, +) -> Vec<(VerificationStatus, Vec)> { + msgs_with_status + .map(|(msg, status)| (status, msg)) + .into_group_map() + .into_iter() + // sort by verification status so the order of messages is deterministic + .sorted_by_key(|(status, _)| *status) + .collect() +} - // try one and many messages (zero messages are tested in route_none_verified) - let inputs = vec![msgs[..1].to_vec(), msgs]; +fn verify( + verifier: &Verifier, + msgs_by_status: Vec<(VerificationStatus, Vec)>, +) -> (Option, Vec) { + msgs_by_status + .into_iter() + .map(|(status, msgs)| { + ( + filter_verifiable_messages(status, &msgs), + into_verify_events(status, msgs), + ) + }) + .then(flat_unzip) + .then(|(msgs, events)| (verifier.verify(msgs), events)) +} - for input in inputs { - // expect: send to router when sender is not the router - let result = contract.route_messages(Addr::unchecked("not a router"), input.clone()); - assert_correct_messages_routed( - result.unwrap().messages, - &contract.config.router, - &input, - ); +fn route( + router: &Router, + msgs_by_status: Vec<(VerificationStatus, Vec)>, +) -> (Option, Vec) { + msgs_by_status + .into_iter() + .map(|(status, msgs)| { + ( + filter_routable_messages(status, &msgs), + into_route_events(status, msgs), + ) + }) + .then(flat_unzip) + .then(|(msgs, events)| (router.route(msgs), events)) +} - // expect: store messages when sender is the router - let result = contract.route_messages(contract.config.router.clone(), input.clone()); - assert_eq!(result.unwrap().messages.len(), 0); - assert_correct_messages_stored(&msg_store, &input); - } +// not all messages are verifiable, so it's better to only take a reference and allocate a vector on demand +// instead of requiring the caller to allocate a vector for every message +fn filter_verifiable_messages(status: VerificationStatus, msgs: &[Message]) -> Vec { + match status { + VerificationStatus::None + | VerificationStatus::NotFound + | VerificationStatus::FailedToVerify => msgs.to_vec(), + _ => vec![], } +} - /// If none of the messages are verified, the gateway should - /// 1. not call the router at all if the sender is not a router - /// 2. store all msgs to be picked up by relayers if the sender is a router, because the gateway trusts the router - #[test] - fn route_none_verified() { - let msg_store = Arc::new(RwLock::new(HashMap::new())); - let msgs = generate_messages(10); - // no messages are verified - let verified = HashMap::new(); - let mut contract = create_contract(msg_store.clone(), verified); - - // try zero, one, many messages - let inputs = vec![vec![], msgs[..1].to_vec(), msgs]; - - for input in inputs { - // expect: don't call router when sender is not the router - let result = contract.route_messages(Addr::unchecked("not a router"), input.clone()); - assert_eq!(result.unwrap().messages.len(), 0); - - // expect: store all messages when sender is the router (no verification check) - let result = contract.route_messages(contract.config.router.clone(), input.clone()); - assert_eq!(result.unwrap().messages.len(), 0); - assert_correct_messages_stored(&msg_store, &input); +fn into_verify_events(status: VerificationStatus, msgs: Vec) -> Vec { + match status { + VerificationStatus::None + | VerificationStatus::NotFound + | VerificationStatus::FailedToVerify + | VerificationStatus::InProgress => { + messages_into_events(msgs, |msg| GatewayEvent::Verifying { msg }) } - } - - /// If a part of the messages is verified, the gateway should - /// 1. only route verified messages to the router when the sender is not a router - /// 2. store all msgs to be picked up by relayers if the sender is a router - #[test] - fn route_partially_verified() { - let msg_store = Arc::new(RwLock::new(HashMap::new())); - let msgs = generate_messages(10); - // half of the messages are verified - let verified = msgs[..5] - .iter() - .map(|msg| (msg.cc_id.clone(), VerificationStatus::SucceededOnChain)) - .collect(); - let mut contract = create_contract(msg_store.clone(), verified); - - // expect: send verified msgs to router when sender is not the router - let result = contract.route_messages(Addr::unchecked("not a router"), msgs.clone()); - assert_correct_messages_routed( - result.unwrap().messages, - &contract.config.router, - &msgs[..5], - ); - - // expect: store all messages when sender is the router (no verification check) - let result = contract.route_messages(contract.config.router.clone(), msgs.clone()); - assert_eq!(result.unwrap().messages.len(), 0); - assert_correct_messages_stored(&msg_store, &msgs); - } - - /// When calling routing multiple times with the same input, the outcome should always be the same - #[test] - fn route_is_idempotent() { - let msg_store = Arc::new(RwLock::new(HashMap::new())); - let msgs = generate_messages(10); - // half of the messages are verified - let verified = msgs[..5] - .iter() - .map(|msg| (msg.cc_id.clone(), VerificationStatus::SucceededOnChain)) - .collect(); - let mut contract = create_contract(msg_store.clone(), verified); - - let senders = vec![ - contract.config.router.clone(), - Addr::unchecked("not a router"), - ]; - - for sender in senders { - // expect: response and store state are the same for multiple calls - let result1 = contract.route_messages(sender.clone(), msgs.clone()); - let msg_store1 = msg_store.read().unwrap().clone(); - let result2 = contract.route_messages(sender, msgs.clone()); - let msg_store2 = msg_store.read().unwrap().clone(); - assert_eq!(result1.unwrap(), result2.unwrap()); - assert_eq!(msg_store1, msg_store2); + VerificationStatus::SucceededOnChain => { + messages_into_events(msgs, |msg| GatewayEvent::AlreadyVerified { msg }) } - } - - /// If the verifier query returns an error, the gateway should - /// 1. fail when the sender is not a router - /// 2. store all messages when the sender is a router (there is no verification check) - #[test] - fn route_verifier_fails() { - let msg_store = Arc::new(RwLock::new(HashMap::new())); - let msgs = generate_messages(10); - - // make the fake query fail - let mut verifier = query::MockVerifier::new(); - verifier - .expect_verify() - .returning(|_| bail!(ContractError::QueryVerifier)); - let mut contract = Contract { - verifier, - ..create_contract(msg_store.clone(), HashMap::new()) - }; - - let result = contract.route_messages(Addr::unchecked("not a router"), msgs.clone()); - assert!( - result.is_err_and(|err| matches!(err.current_context(), ContractError::QueryVerifier)) - ); - - // expect: store all messages when sender is the router (no verification check) - let result = contract.route_messages(contract.config.router.clone(), msgs.clone()); - assert_eq!(result.unwrap().messages.len(), 0); - assert_correct_messages_stored(&msg_store, &msgs); - } - - /// This uses a RwLock for the msg_store so it can also be used in assertions while it is borrowed by the contract - fn create_contract( - // the store mock requires a 'static type that can be moved into the closure, so we need to use an Arc<> here - msg_store: Arc>>, - verified: HashMap, - ) -> Contract { - let config = state::Config { - verifier: Addr::unchecked("verifier"), - router: Addr::unchecked("router"), - }; - - let mut store = state::MockStore::new(); - store.expect_load_config().return_const(config.clone()); - store - .expect_save_outgoing_msg() - .returning(move |key, msg: &Message| { - let mut msg_store = msg_store.write().unwrap(); - msg_store.insert(key, msg.clone()); - Ok(()) - }); - - let mut verifier = query::MockVerifier::new(); - verifier.expect_verify().returning(move |msg| match msg { - aggregate_verifier::msg::QueryMsg::GetMessagesStatus { messages } => Ok(messages - .into_iter() - .map(|msg: Message| { - ( - msg.cc_id.clone(), - // if the msg is not know to the verifier, it is not verified - verified - .get(&msg.cc_id) - .copied() - .unwrap_or(VerificationStatus::None), - ) - }) - .collect::>()), - }); - Contract { - config, - store, - verifier, + VerificationStatus::FailedOnChain => { + messages_into_events(msgs, |msg| GatewayEvent::AlreadyRejected { msg }) } } +} - fn generate_messages(count: usize) -> Vec { - (0..count) - .map(|i| Message { - cc_id: CrossChainId { - chain: "mock-chain".parse().unwrap(), - id: format!("{}{}{}", "hash", ID_SEPARATOR, i).parse().unwrap(), - }, - destination_address: "idc".parse().unwrap(), - destination_chain: "mock-chain-2".parse().unwrap(), - source_address: "idc".parse().unwrap(), - payload_hash: [i as u8; 32], - }) - .collect() +// not all messages are routable, so it's better to only take a reference and allocate a vector on demand +// instead of requiring the caller to allocate a vector for every message +fn filter_routable_messages(status: VerificationStatus, msgs: &[Message]) -> Vec { + if status == VerificationStatus::SucceededOnChain { + msgs.to_vec() + } else { + vec![] } +} - fn assert_correct_messages_verified( - verified_msgs: Vec, - expected_verifier: &Addr, - expected_msgs: &[Message], - ) { - assert_eq!(verified_msgs.len(), 1); - match verified_msgs[0].clone().msg { - CosmosMsg::Wasm(WasmMsg::Execute { - contract_addr, msg, .. - }) => { - assert_eq!(contract_addr, expected_verifier.to_string()); - - let msg: aggregate_verifier::msg::ExecuteMsg = - serde_json::from_slice(msg.as_slice()).unwrap(); - match msg { - aggregate_verifier::msg::ExecuteMsg::VerifyMessages { messages } => { - assert_eq!(messages.as_slice(), expected_msgs) - } - } - } - _ => panic!("unexpected message type"), - } - } - - fn assert_correct_messages_routed( - routed_msgs: Vec, - expected_router: &Addr, - expected_msgs: &[Message], - ) { - assert_eq!(routed_msgs.len(), 1); - match routed_msgs[0].clone().msg { - CosmosMsg::Wasm(WasmMsg::Execute { - contract_addr, msg, .. - }) => { - assert_eq!(contract_addr, expected_router.to_string()); - - let msg: connection_router::msg::ExecuteMsg = - serde_json::from_slice(msg.as_slice()).unwrap(); - match msg { - connection_router::msg::ExecuteMsg::RouteMessages(messages) => { - assert_eq!(messages.as_slice(), expected_msgs) - } - _ => panic!("unexpected message type"), - } - } - _ => panic!("unexpected message type"), +fn into_route_events(status: VerificationStatus, msgs: Vec) -> Vec { + match status { + VerificationStatus::SucceededOnChain => { + messages_into_events(msgs, |msg| GatewayEvent::Routing { msg }) } + _ => messages_into_events(msgs, |msg| GatewayEvent::UnfitForRouting { msg }), } +} - fn assert_correct_messages_stored( - locked_msg_store: &RwLock>, - expected_msgs: &[Message], - ) { - let msg_store = locked_msg_store.read().unwrap(); - assert_eq!((*msg_store).len(), expected_msgs.len()); +fn flat_unzip(x: impl Iterator, Vec)>) -> (Vec, Vec) { + let (x, y): (Vec<_>, Vec<_>) = x.unzip(); + ( + x.into_iter().flatten().collect(), + y.into_iter().flatten().collect(), + ) +} - assert!(expected_msgs - .into_iter() - .all(|msg| { msg_store.get(&msg.cc_id).unwrap() == msg })) - } +fn messages_into_events(msgs: Vec, transform: fn(Message) -> GatewayEvent) -> Vec { + msgs.into_iter().map(|msg| transform(msg).into()).collect() } diff --git a/contracts/gateway/src/contract/query.rs b/contracts/gateway/src/contract/query.rs index 8d99a6cce..4118218e1 100644 --- a/contracts/gateway/src/contract/query.rs +++ b/contracts/gateway/src/contract/query.rs @@ -1,51 +1,18 @@ -use crate::error::ContractError; -use crate::state::OUTGOING_MESSAGES; -use axelar_wasm_std::VerificationStatus; +use crate::contract::Error; +use crate::state; use connection_router::state::CrossChainId; -use cosmwasm_std::{to_binary, Addr, Binary, Deps, QuerierWrapper, QueryRequest, WasmQuery}; +use connection_router::Message; +use cosmwasm_std::Storage; use error_stack::{Result, ResultExt}; -use mockall::automock; +use itertools::Itertools; -#[automock] -pub trait Verifier { - fn verify( - &self, - msg: aggregate_verifier::msg::QueryMsg, - ) -> Result, ContractError>; -} - -pub struct VerifierApi<'a> { - pub address: Addr, - pub querier: QuerierWrapper<'a>, -} - -impl Verifier for VerifierApi<'_> { - fn verify( - &self, - msg: aggregate_verifier::msg::QueryMsg, - ) -> Result, ContractError> { - self.querier - .query(&QueryRequest::Wasm(WasmQuery::Smart { - contract_addr: self.address.to_string(), - msg: to_binary(&msg).change_context(ContractError::QueryVerifier)?, - })) - .change_context(ContractError::QueryVerifier) - } -} - -pub fn get_messages( - deps: Deps, +pub fn get_outgoing_messages( + storage: &dyn Storage, cross_chain_ids: Vec, -) -> Result { - let msgs = cross_chain_ids +) -> Result, Error> { + cross_chain_ids .into_iter() - .map(|id| { - OUTGOING_MESSAGES - .load(deps.storage, id.clone()) - .change_context(ContractError::LoadOutgoingMessage) - .attach_printable(id.to_string()) - }) - .collect::, _>>()?; - - to_binary(&msgs).change_context(ContractError::LoadOutgoingMessage) + .filter_map(|id| state::may_load_outgoing_msg(storage, id).transpose()) + .try_collect() + .change_context(Error::InvalidStoreAccess) } diff --git a/contracts/gateway/src/error.rs b/contracts/gateway/src/error.rs deleted file mode 100644 index 0e440ff3a..000000000 --- a/contracts/gateway/src/error.rs +++ /dev/null @@ -1,23 +0,0 @@ -use axelar_wasm_std_derive::IntoContractError; -use thiserror::Error; - -#[derive(Error, Debug, PartialEq, IntoContractError)] -pub enum ContractError { - #[error("batch contains duplicate message ids")] - DuplicateMessageIds, - - #[error("could not store outgoing message")] - StoreOutgoingMessage, - - #[error("could not load outgoing message")] - LoadOutgoingMessage, - - #[error("could not query the verifier contract")] - QueryVerifier, - - #[error("could not create the execute message to start verification")] - CreateVerifierExecuteMsg, - - #[error("could not create the execute message to start routing")] - CreateRouterExecuteMsg, -} diff --git a/contracts/gateway/src/events.rs b/contracts/gateway/src/events.rs index 10397930d..2a607c910 100644 --- a/contracts/gateway/src/events.rs +++ b/contracts/gateway/src/events.rs @@ -3,23 +3,21 @@ use connection_router::state::Message; use cosmwasm_std::Event; pub enum GatewayEvent { - MessageVerified { msg: Message }, - MessageVerificationFailed { msg: Message }, - MessageRouted { msg: Message }, - MessageRoutingFailed { msg: Message }, + Verifying { msg: Message }, + AlreadyVerified { msg: Message }, + AlreadyRejected { msg: Message }, + Routing { msg: Message }, + UnfitForRouting { msg: Message }, } impl From for Event { fn from(other: GatewayEvent) -> Self { match other { - GatewayEvent::MessageVerified { msg } => make_message_event("message_verified", msg), - GatewayEvent::MessageRouted { msg } => make_message_event("message_routed", msg), - GatewayEvent::MessageVerificationFailed { msg } => { - make_message_event("message_verification_failed", msg) - } - GatewayEvent::MessageRoutingFailed { msg } => { - make_message_event("message_routing_failed", msg) - } + GatewayEvent::Verifying { msg } => make_message_event("verifying", msg), + GatewayEvent::AlreadyVerified { msg } => make_message_event("already_verified", msg), + GatewayEvent::AlreadyRejected { msg } => make_message_event("already_rejected", msg), + GatewayEvent::Routing { msg } => make_message_event("routing", msg), + GatewayEvent::UnfitForRouting { msg } => make_message_event("unfit_for_routing", msg), } } } diff --git a/contracts/gateway/src/lib.rs b/contracts/gateway/src/lib.rs index 4125f8a69..cdacc8154 100644 --- a/contracts/gateway/src/lib.rs +++ b/contracts/gateway/src/lib.rs @@ -1,5 +1,4 @@ pub mod contract; -pub mod error; pub mod events; pub mod msg; pub mod state; diff --git a/contracts/gateway/src/state.rs b/contracts/gateway/src/state.rs index 1dc354244..03b631c92 100644 --- a/contracts/gateway/src/state.rs +++ b/contracts/gateway/src/state.rs @@ -1,48 +1,122 @@ -use crate::error::ContractError; use connection_router::state::{CrossChainId, Message}; use cosmwasm_schema::cw_serde; use cosmwasm_std::{Addr, Storage}; use cw_storage_plus::{Item, Map}; use error_stack::{Result, ResultExt}; -use mockall::automock; - -#[automock] -pub trait Store { - fn load_config(&self) -> Config; - fn save_outgoing_msg( - &mut self, - key: CrossChainId, - value: &Message, - ) -> Result<(), ContractError>; -} #[cw_serde] -pub struct Config { +pub(crate) struct Config { pub verifier: Addr, pub router: Addr, } -pub const CONFIG: Item = Item::new("config"); -pub const OUTGOING_MESSAGES: Map = Map::new("outgoing_messages"); +pub(crate) fn save_config(storage: &mut dyn Storage, value: &Config) -> Result<(), Error> { + CONFIG + .save(storage, value) + .change_context(Error::SaveValue(CONFIG_NAME)) +} +pub(crate) fn load_config(storage: &dyn Storage) -> Result { + CONFIG + .load(storage) + .change_context(Error::LoadValue(CONFIG_NAME)) +} + +pub(crate) fn save_outgoing_msg( + storage: &mut dyn Storage, + key: CrossChainId, + value: &Message, +) -> Result<(), Error> { + OUTGOING_MESSAGES + .save(storage, key, value) + .change_context(Error::SaveValue(OUTGOING_MESSAGES_NAME)) +} +pub(crate) fn may_load_outgoing_msg( + storage: &dyn Storage, + id: CrossChainId, +) -> Result, Error> { + OUTGOING_MESSAGES + .may_load(storage, id.clone()) + .change_context(Error::Parse(OUTGOING_MESSAGES_NAME)) + .attach_printable(id.to_string()) +} -pub struct GatewayStore<'a> { - pub storage: &'a mut dyn Storage, +#[derive(thiserror::Error, Debug)] +pub(crate) enum Error { + #[error("failed to save {0}")] + SaveValue(&'static str), + #[error("failed to load {0}")] + LoadValue(&'static str), + #[error("failed to parse key for {0}")] + Parse(&'static str), } -impl Store for GatewayStore<'_> { - fn load_config(&self) -> Config { - CONFIG - .load(self.storage) - .expect("config should be set during contract instantiation") +const CONFIG_NAME: &str = "config"; +const CONFIG: Item = Item::new(CONFIG_NAME); +const OUTGOING_MESSAGES_NAME: &str = "outgoing_messages"; +const OUTGOING_MESSAGES: Map = Map::new(OUTGOING_MESSAGES_NAME); + +#[cfg(test)] +mod test { + use crate::state::{ + load_config, may_load_outgoing_msg, save_config, save_outgoing_msg, Config, + }; + use connection_router::state::CrossChainId; + use connection_router::Message; + use cosmwasm_std::testing::mock_dependencies; + use cosmwasm_std::Addr; + + #[test] + fn config_storage() { + let mut deps = mock_dependencies(); + + let config = Config { + verifier: Addr::unchecked("verifier"), + router: Addr::unchecked("router"), + }; + assert!(save_config(deps.as_mut().storage, &config).is_ok()); + + assert_eq!(load_config(&deps.storage).unwrap(), config); } - fn save_outgoing_msg( - &mut self, - key: CrossChainId, - value: &Message, - ) -> Result<(), ContractError> { - OUTGOING_MESSAGES - .save(self.storage, key, value) - .change_context(ContractError::StoreOutgoingMessage) + #[test] + fn outgoing_messages_storage() { + let mut deps = mock_dependencies(); + + let message = Message { + cc_id: CrossChainId { + chain: "chain".parse().unwrap(), + id: "id".parse().unwrap(), + }, + source_address: "source_address".parse().unwrap(), + destination_chain: "destination".parse().unwrap(), + destination_address: "destination_address".parse().unwrap(), + payload_hash: [1; 32], + }; + + assert!(save_outgoing_msg(deps.as_mut().storage, message.cc_id.clone(), &message).is_ok()); + + assert_eq!( + may_load_outgoing_msg(&deps.storage, message.cc_id.clone()).unwrap(), + Some(message) + ); + + let unknown_chain_id = CrossChainId { + chain: "unknown".parse().unwrap(), + id: "id".parse().unwrap(), + }; + + assert_eq!( + may_load_outgoing_msg(&deps.storage, unknown_chain_id).unwrap(), + None + ); + + let unknown_id = CrossChainId { + chain: "chain".parse().unwrap(), + id: "unknown".parse().unwrap(), + }; + assert_eq!( + may_load_outgoing_msg(&deps.storage, unknown_id).unwrap(), + None + ); } } diff --git a/contracts/gateway/tests/contract.rs b/contracts/gateway/tests/contract.rs new file mode 100644 index 000000000..992667c25 --- /dev/null +++ b/contracts/gateway/tests/contract.rs @@ -0,0 +1,465 @@ +use axelar_wasm_std::{ContractError, VerificationStatus}; +use connection_router::state::{CrossChainId, Message, ID_SEPARATOR}; +use cosmwasm_std::testing::{mock_dependencies, mock_env, mock_info, MockQuerier}; +use cosmwasm_std::{ + from_binary, to_binary, Addr, ContractResult, DepsMut, QuerierResult, WasmQuery, +}; +use gateway::contract::*; +use gateway::msg::{ExecuteMsg, InstantiateMsg, QueryMsg}; +use itertools::Itertools; +use serde::Serialize; +use std::collections::HashMap; +use std::fmt::Debug; +use std::fs::File; +use std::iter; + +#[cfg(not(feature = "generate_golden_files"))] +use cosmwasm_std::Response; + +#[test] +fn instantiate_works() { + let result = instantiate( + mock_dependencies().as_mut(), + mock_env(), + mock_info("sender", &[]), + InstantiateMsg { + verifier_address: Addr::unchecked("verifier").into_string(), + router_address: Addr::unchecked("router").into_string(), + }, + ); + + assert!(result.is_ok()); +} + +#[test] +fn successful_verify() { + let (test_cases, handler) = test_cases_for_correct_verifier(); + + let mut responses = vec![]; + for msgs in test_cases { + let mut deps = mock_dependencies(); + update_query_handler(&mut deps.querier, handler.clone()); + + instantiate_contract(deps.as_mut(), "verifier", "router"); + + // check verification is idempotent + let response = iter::repeat( + execute( + deps.as_mut(), + mock_env(), + mock_info("sender", &[]), + ExecuteMsg::VerifyMessages(msgs.clone()), + ) + .unwrap(), + ) + .take(10) + .dedup() + .collect::>(); + + assert_eq!(response.len(), 1); + + responses.push(response[0].clone()); + } + + let golden_file = "tests/test_verify.json"; + #[cfg(feature = "generate_golden_files")] + { + let f = File::create(golden_file).unwrap(); + serde_json::to_writer_pretty(f, &responses).unwrap(); + } + #[cfg(not(feature = "generate_golden_files"))] + { + let f = File::open(golden_file).unwrap(); + let expected_responses: Vec = serde_json::from_reader(f).unwrap(); + assert_eq!( + serde_json::to_string_pretty(&responses).unwrap(), + serde_json::to_string_pretty(&expected_responses).unwrap() + ); + } +} + +#[test] +fn successful_route_incoming() { + let (test_cases, handler) = test_cases_for_correct_verifier(); + + let mut responses = vec![]; + for msgs in test_cases { + let mut deps = mock_dependencies(); + update_query_handler(&mut deps.querier, handler.clone()); + + instantiate_contract(deps.as_mut(), "verifier", "router"); + + // check routing of incoming messages is idempotent + let response = iter::repeat( + execute( + deps.as_mut(), + mock_env(), + mock_info("sender", &[]), + ExecuteMsg::RouteMessages(msgs.clone()), + ) + .unwrap(), + ) + .take(2) + .dedup() + .collect::>(); + + assert_eq!(response.len(), 1); + + responses.push(response[0].clone()); + } + + let golden_file = "tests/test_route_incoming.json"; + #[cfg(feature = "generate_golden_files")] + { + let f = File::create(golden_file).unwrap(); + serde_json::to_writer_pretty(f, &responses).unwrap(); + } + #[cfg(not(feature = "generate_golden_files"))] + { + let f = File::open(golden_file).unwrap(); + let expected_responses: Vec = serde_json::from_reader(f).unwrap(); + assert_eq!(responses, expected_responses); + } +} + +#[test] +fn successful_route_outgoing() { + // outgoing routing should not check the verifier, so we ensure this by not mocking it. + // If it was called it would return an error + let (test_cases, _) = test_cases_for_correct_verifier(); + + let mut responses = vec![]; + for msgs in test_cases { + let mut deps = mock_dependencies(); + + let router = "router"; + instantiate_contract(deps.as_mut(), "verifier", router); + + let query_msg = QueryMsg::GetMessages { + message_ids: msgs.iter().map(|msg| msg.cc_id.clone()).collect(), + }; + + // check no messages are outgoing + iter::repeat(query(deps.as_ref(), mock_env(), query_msg.clone()).unwrap()) + .take(2) + .for_each(|response| { + assert_eq!(response, to_binary::>(&vec![]).unwrap()) + }); + + // check routing of outgoing messages is idempotent + let response = iter::repeat( + execute( + deps.as_mut(), + mock_env(), + mock_info(&router, &[]), // execute with router as sender + ExecuteMsg::RouteMessages(msgs.clone()), + ) + .unwrap(), + ) + .take(2) + .dedup() + .collect::>(); + + assert_eq!(response.len(), 1); + + responses.push(response[0].clone()); + + // check all outgoing messages are stored because the router (sender) is implicitly trusted + iter::repeat(query(deps.as_ref(), mock_env().clone(), query_msg).unwrap()) + .take(2) + .for_each(|response| assert_eq!(response, to_binary(&msgs).unwrap())); + } + + let golden_file = "tests/test_route_outgoing.json"; + #[cfg(feature = "generate_golden_files")] + { + let f = File::create(golden_file).unwrap(); + serde_json::to_writer_pretty(f, &responses).unwrap(); + } + #[cfg(not(feature = "generate_golden_files"))] + { + let f = File::open(golden_file).unwrap(); + let expected_responses: Vec = serde_json::from_reader(f).unwrap(); + assert_eq!(responses, expected_responses); + } +} + +#[test] +fn verify_with_faulty_verifier_fails() { + // if the mock querier is not overwritten, it will return an error + let mut deps = mock_dependencies(); + + instantiate_contract(deps.as_mut(), "verifier", "router"); + + let response = execute( + deps.as_mut(), + mock_env(), + mock_info("sender", &[]), + ExecuteMsg::VerifyMessages(generate_msgs("verifier in unreachable", 10)), + ); + + assert!(response.is_err()); +} + +#[test] +fn route_incoming_with_faulty_verifier_fails() { + // if the mock querier is not overwritten, it will return an error + let mut deps = mock_dependencies(); + + instantiate_contract(deps.as_mut(), "verifier", "router"); + + let response = execute( + deps.as_mut(), + mock_env(), + mock_info("sender", &[]), + ExecuteMsg::RouteMessages(generate_msgs("verifier in unreachable", 10)), + ); + + assert!(response.is_err()); +} + +#[test] +fn calls_with_duplicate_ids_should_fail() { + let (test_cases, handler) = test_cases_for_duplicate_msgs(); + for msgs in test_cases { + let mut deps = mock_dependencies(); + update_query_handler(&mut deps.querier, handler.clone()); + + let router = "router"; + instantiate_contract(deps.as_mut(), "verifier", router); + + let response = execute( + deps.as_mut(), + mock_env(), + mock_info("sender", &[]), + ExecuteMsg::VerifyMessages(msgs.clone()), + ); + assert!(response.is_err()); + + let response = execute( + deps.as_mut(), + mock_env(), + mock_info("sender", &[]), + ExecuteMsg::RouteMessages(msgs.clone()), + ); + assert!(response.is_err()); + + let response = execute( + deps.as_mut(), + mock_env(), + mock_info(router, &[]), + ExecuteMsg::RouteMessages(msgs), + ); + assert!(response.is_err()); + } +} + +#[test] +fn route_duplicate_ids_should_fail() { + let (test_cases, handler) = test_cases_for_duplicate_msgs(); + for msgs in test_cases { + let mut deps = mock_dependencies(); + update_query_handler(&mut deps.querier, handler.clone()); + + instantiate_contract(deps.as_mut(), "verifier", "router"); + + let response = execute( + deps.as_mut(), + mock_env(), + mock_info("sender", &[]), + ExecuteMsg::RouteMessages(msgs), + ); + + assert!(response.is_err()); + } +} + +fn test_cases_for_correct_verifier() -> ( + Vec>, + impl Fn( + aggregate_verifier::msg::QueryMsg, + ) -> Result, ContractError> + + Clone + + Sized, +) { + let all_messages = generate_msgs_with_all_statuses(10); + let status_by_id = map_status_by_msg_id(all_messages.clone()); + let handler = correctly_working_verifier_handler(status_by_id); + let all_messages = sort_msgs_by_status(all_messages).collect::>(); + + let mut test_cases = vec![]; + + // no messages + test_cases.push(vec![]); + // // one message of each status + for msgs in all_messages.iter() { + test_cases.push(msgs.into_iter().cloned().take(1).collect::>()); + } + // // multiple messages with same status + for msgs in all_messages.iter() { + test_cases.push(msgs.into_iter().cloned().collect()); + } + // multiple messages with multiple statuses + test_cases.push(all_messages.into_iter().flatten().collect()); + + (test_cases, handler) +} + +fn test_cases_for_duplicate_msgs() -> ( + Vec>, + impl Fn( + aggregate_verifier::msg::QueryMsg, + ) -> Result, ContractError> + + Clone + + Sized, +) { + let all_messages = generate_msgs_with_all_statuses(10); + let status_by_id = map_status_by_msg_id(all_messages.clone()); + let handler = correctly_working_verifier_handler(status_by_id); + let all_messages = sort_msgs_by_status(all_messages) + .flatten() + .collect::>(); + + let mut test_cases = vec![]; + + // one duplicate + test_cases.push(duplicate_msgs(all_messages.clone(), 1)); + + // multiple duplicates + test_cases.push(duplicate_msgs(all_messages.clone(), 10)); + + // all duplicates + test_cases.push( + all_messages + .clone() + .into_iter() + .chain(all_messages.clone()) + .collect::>(), + ); + + (test_cases, handler) +} + +fn generate_msgs_with_all_statuses( + count_per_status: i32, +) -> HashMap> { + all_statuses() + .into_iter() + .map(|status| (status, generate_msgs(status, count_per_status))) + .collect::>>() +} + +fn generate_msgs(namespace: impl Debug, count: i32) -> Vec { + (0..count) + .map(|i| Message { + cc_id: CrossChainId { + chain: "mock-chain".parse().unwrap(), + id: format!("{:?}{}{}", namespace, ID_SEPARATOR, i) + .parse() + .unwrap(), + }, + destination_address: "idc".parse().unwrap(), + destination_chain: "mock-chain-2".parse().unwrap(), + source_address: "idc".parse().unwrap(), + payload_hash: [i as u8; 32], + }) + .collect() +} + +fn all_statuses() -> Vec { + let statuses = vec![ + VerificationStatus::None, + VerificationStatus::NotFound, + VerificationStatus::FailedToVerify, + VerificationStatus::InProgress, + VerificationStatus::SucceededOnChain, + VerificationStatus::FailedOnChain, + ]; + + // we need to make sure that if the variants change, the tests cover all of them + let mut status_count = 0; + for status in &statuses { + match status { + VerificationStatus::None => status_count += 1, + VerificationStatus::NotFound => status_count += 1, + VerificationStatus::FailedToVerify => status_count += 1, + VerificationStatus::InProgress => status_count += 1, + VerificationStatus::SucceededOnChain => status_count += 1, + VerificationStatus::FailedOnChain => status_count += 1, + }; + } + + assert_eq!(statuses.len(), status_count); + + return statuses; +} + +fn map_status_by_msg_id( + messages_by_status: HashMap>, +) -> HashMap { + messages_by_status + .into_iter() + .flat_map(|(status, msgs)| msgs.into_iter().map(move |msg| (msg.cc_id, status))) + .collect() +} + +fn correctly_working_verifier_handler( + status_by_id: HashMap, +) -> impl Fn( + aggregate_verifier::msg::QueryMsg, +) -> Result, ContractError> + + Clone + + 'static { + move |msg: aggregate_verifier::msg::QueryMsg| -> Result, ContractError> { + match msg { + aggregate_verifier::msg::QueryMsg::GetMessagesStatus { messages } => + Ok(messages.into_iter().map(|msg| (msg.cc_id.clone(), status_by_id.get(&msg.cc_id).copied().expect("there is a status for every message"))).collect()) + } + } +} + +fn update_query_handler( + querier: &mut MockQuerier, + handler: impl Fn(aggregate_verifier::msg::QueryMsg) -> Result + 'static, +) { + let handler = move |msg: &WasmQuery| match msg { + WasmQuery::Smart { msg, .. } => { + let result = handler(from_binary(msg).expect("should not fail to deserialize")) + .map(|response| to_binary(&response).expect("should not fail to serialize")); + + QuerierResult::Ok(ContractResult::from(result)) + } + _ => unimplemented!("unsupported query"), + }; + + querier.update_wasm(handler) +} + +fn instantiate_contract(deps: DepsMut, verifier: &str, router: &str) { + let response = instantiate( + deps, + mock_env(), + mock_info("sender", &[]), + InstantiateMsg { + verifier_address: Addr::unchecked(verifier).into_string(), + router_address: Addr::unchecked(router).into_string(), + } + .clone(), + ); + assert!(response.is_ok()); +} + +fn sort_msgs_by_status( + msgs: HashMap>, +) -> impl Iterator> { + msgs.into_iter() + .sorted_by_key(|(status, _)| *status) + .map(|(_, msgs)| msgs) +} + +fn duplicate_msgs(msgs: Vec, amount: usize) -> Vec { + msgs.clone() + .into_iter() + .chain(msgs.into_iter().take(amount)) + .collect() +} diff --git a/contracts/gateway/tests/test_route_incoming.json b/contracts/gateway/tests/test_route_incoming.json new file mode 100644 index 000000000..aaf37ec48 --- /dev/null +++ b/contracts/gateway/tests/test_route_incoming.json @@ -0,0 +1,3798 @@ +[ + { + "messages": [], + "attributes": [], + "events": [], + "data": null + }, + { + "messages": [ + { + "id": 0, + "msg": { + "wasm": { + "execute": { + "contract_addr": "router", + "msg": "eyJyb3V0ZV9tZXNzYWdlcyI6W3siY2NfaWQiOnsiY2hhaW4iOiJtb2NrLWNoYWluIiwiaWQiOiJTdWNjZWVkZWRPbkNoYWluOjAifSwic291cmNlX2FkZHJlc3MiOiJpZGMiLCJkZXN0aW5hdGlvbl9jaGFpbiI6Im1vY2stY2hhaW4tMiIsImRlc3RpbmF0aW9uX2FkZHJlc3MiOiJpZGMiLCJwYXlsb2FkX2hhc2giOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIn1dfQ==", + "funds": [] + } + } + }, + "gas_limit": null, + "reply_on": "never" + } + ], + "attributes": [], + "events": [ + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + } + ], + "data": null + }, + { + "messages": [], + "attributes": [], + "events": [ + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + } + ], + "data": null + }, + { + "messages": [], + "attributes": [], + "events": [ + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "NotFound:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + } + ], + "data": null + }, + { + "messages": [], + "attributes": [], + "events": [ + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + } + ], + "data": null + }, + { + "messages": [], + "attributes": [], + "events": [ + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "InProgress:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + } + ], + "data": null + }, + { + "messages": [], + "attributes": [], + "events": [ + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "None:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + } + ], + "data": null + }, + { + "messages": [ + { + "id": 0, + "msg": { + "wasm": { + "execute": { + "contract_addr": "router", + "msg": "eyJyb3V0ZV9tZXNzYWdlcyI6W3siY2NfaWQiOnsiY2hhaW4iOiJtb2NrLWNoYWluIiwiaWQiOiJTdWNjZWVkZWRPbkNoYWluOjAifSwic291cmNlX2FkZHJlc3MiOiJpZGMiLCJkZXN0aW5hdGlvbl9jaGFpbiI6Im1vY2stY2hhaW4tMiIsImRlc3RpbmF0aW9uX2FkZHJlc3MiOiJpZGMiLCJwYXlsb2FkX2hhc2giOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIn0seyJjY19pZCI6eyJjaGFpbiI6Im1vY2stY2hhaW4iLCJpZCI6IlN1Y2NlZWRlZE9uQ2hhaW46MSJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEifSx7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiU3VjY2VlZGVkT25DaGFpbjoyIn0sInNvdXJjZV9hZGRyZXNzIjoiaWRjIiwiZGVzdGluYXRpb25fY2hhaW4iOiJtb2NrLWNoYWluLTIiLCJkZXN0aW5hdGlvbl9hZGRyZXNzIjoiaWRjIiwicGF5bG9hZF9oYXNoIjoiMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMiJ9LHsiY2NfaWQiOnsiY2hhaW4iOiJtb2NrLWNoYWluIiwiaWQiOiJTdWNjZWVkZWRPbkNoYWluOjMifSwic291cmNlX2FkZHJlc3MiOiJpZGMiLCJkZXN0aW5hdGlvbl9jaGFpbiI6Im1vY2stY2hhaW4tMiIsImRlc3RpbmF0aW9uX2FkZHJlc3MiOiJpZGMiLCJwYXlsb2FkX2hhc2giOiIwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzIn0seyJjY19pZCI6eyJjaGFpbiI6Im1vY2stY2hhaW4iLCJpZCI6IlN1Y2NlZWRlZE9uQ2hhaW46NCJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQifSx7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiU3VjY2VlZGVkT25DaGFpbjo1In0sInNvdXJjZV9hZGRyZXNzIjoiaWRjIiwiZGVzdGluYXRpb25fY2hhaW4iOiJtb2NrLWNoYWluLTIiLCJkZXN0aW5hdGlvbl9hZGRyZXNzIjoiaWRjIiwicGF5bG9hZF9oYXNoIjoiMDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNSJ9LHsiY2NfaWQiOnsiY2hhaW4iOiJtb2NrLWNoYWluIiwiaWQiOiJTdWNjZWVkZWRPbkNoYWluOjYifSwic291cmNlX2FkZHJlc3MiOiJpZGMiLCJkZXN0aW5hdGlvbl9jaGFpbiI6Im1vY2stY2hhaW4tMiIsImRlc3RpbmF0aW9uX2FkZHJlc3MiOiJpZGMiLCJwYXlsb2FkX2hhc2giOiIwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2In0seyJjY19pZCI6eyJjaGFpbiI6Im1vY2stY2hhaW4iLCJpZCI6IlN1Y2NlZWRlZE9uQ2hhaW46NyJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcifSx7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiU3VjY2VlZGVkT25DaGFpbjo4In0sInNvdXJjZV9hZGRyZXNzIjoiaWRjIiwiZGVzdGluYXRpb25fY2hhaW4iOiJtb2NrLWNoYWluLTIiLCJkZXN0aW5hdGlvbl9hZGRyZXNzIjoiaWRjIiwicGF5bG9hZF9oYXNoIjoiMDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgwOCJ9LHsiY2NfaWQiOnsiY2hhaW4iOiJtb2NrLWNoYWluIiwiaWQiOiJTdWNjZWVkZWRPbkNoYWluOjkifSwic291cmNlX2FkZHJlc3MiOiJpZGMiLCJkZXN0aW5hdGlvbl9jaGFpbiI6Im1vY2stY2hhaW4tMiIsImRlc3RpbmF0aW9uX2FkZHJlc3MiOiJpZGMiLCJwYXlsb2FkX2hhc2giOiIwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5In1dfQ==", + "funds": [] + } + } + }, + "gas_limit": null, + "reply_on": "never" + } + ], + "attributes": [], + "events": [ + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:1" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0101010101010101010101010101010101010101010101010101010101010101" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:2" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0202020202020202020202020202020202020202020202020202020202020202" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:3" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0303030303030303030303030303030303030303030303030303030303030303" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:4" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0404040404040404040404040404040404040404040404040404040404040404" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:5" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0505050505050505050505050505050505050505050505050505050505050505" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:6" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0606060606060606060606060606060606060606060606060606060606060606" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:7" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0707070707070707070707070707070707070707070707070707070707070707" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:8" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0808080808080808080808080808080808080808080808080808080808080808" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:9" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0909090909090909090909090909090909090909090909090909090909090909" + } + ] + } + ], + "data": null + }, + { + "messages": [], + "attributes": [], + "events": [ + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:1" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0101010101010101010101010101010101010101010101010101010101010101" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:2" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0202020202020202020202020202020202020202020202020202020202020202" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:3" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0303030303030303030303030303030303030303030303030303030303030303" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:4" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0404040404040404040404040404040404040404040404040404040404040404" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:5" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0505050505050505050505050505050505050505050505050505050505050505" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:6" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0606060606060606060606060606060606060606060606060606060606060606" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:7" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0707070707070707070707070707070707070707070707070707070707070707" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:8" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0808080808080808080808080808080808080808080808080808080808080808" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:9" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0909090909090909090909090909090909090909090909090909090909090909" + } + ] + } + ], + "data": null + }, + { + "messages": [], + "attributes": [], + "events": [ + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "NotFound:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "NotFound:1" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0101010101010101010101010101010101010101010101010101010101010101" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "NotFound:2" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0202020202020202020202020202020202020202020202020202020202020202" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "NotFound:3" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0303030303030303030303030303030303030303030303030303030303030303" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "NotFound:4" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0404040404040404040404040404040404040404040404040404040404040404" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "NotFound:5" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0505050505050505050505050505050505050505050505050505050505050505" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "NotFound:6" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0606060606060606060606060606060606060606060606060606060606060606" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "NotFound:7" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0707070707070707070707070707070707070707070707070707070707070707" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "NotFound:8" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0808080808080808080808080808080808080808080808080808080808080808" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "NotFound:9" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0909090909090909090909090909090909090909090909090909090909090909" + } + ] + } + ], + "data": null + }, + { + "messages": [], + "attributes": [], + "events": [ + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:1" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0101010101010101010101010101010101010101010101010101010101010101" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:2" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0202020202020202020202020202020202020202020202020202020202020202" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:3" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0303030303030303030303030303030303030303030303030303030303030303" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:4" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0404040404040404040404040404040404040404040404040404040404040404" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:5" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0505050505050505050505050505050505050505050505050505050505050505" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:6" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0606060606060606060606060606060606060606060606060606060606060606" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:7" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0707070707070707070707070707070707070707070707070707070707070707" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:8" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0808080808080808080808080808080808080808080808080808080808080808" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:9" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0909090909090909090909090909090909090909090909090909090909090909" + } + ] + } + ], + "data": null + }, + { + "messages": [], + "attributes": [], + "events": [ + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "InProgress:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "InProgress:1" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0101010101010101010101010101010101010101010101010101010101010101" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "InProgress:2" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0202020202020202020202020202020202020202020202020202020202020202" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "InProgress:3" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0303030303030303030303030303030303030303030303030303030303030303" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "InProgress:4" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0404040404040404040404040404040404040404040404040404040404040404" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "InProgress:5" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0505050505050505050505050505050505050505050505050505050505050505" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "InProgress:6" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0606060606060606060606060606060606060606060606060606060606060606" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "InProgress:7" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0707070707070707070707070707070707070707070707070707070707070707" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "InProgress:8" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0808080808080808080808080808080808080808080808080808080808080808" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "InProgress:9" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0909090909090909090909090909090909090909090909090909090909090909" + } + ] + } + ], + "data": null + }, + { + "messages": [], + "attributes": [], + "events": [ + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "None:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "None:1" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0101010101010101010101010101010101010101010101010101010101010101" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "None:2" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0202020202020202020202020202020202020202020202020202020202020202" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "None:3" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0303030303030303030303030303030303030303030303030303030303030303" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "None:4" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0404040404040404040404040404040404040404040404040404040404040404" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "None:5" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0505050505050505050505050505050505050505050505050505050505050505" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "None:6" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0606060606060606060606060606060606060606060606060606060606060606" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "None:7" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0707070707070707070707070707070707070707070707070707070707070707" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "None:8" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0808080808080808080808080808080808080808080808080808080808080808" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "None:9" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0909090909090909090909090909090909090909090909090909090909090909" + } + ] + } + ], + "data": null + }, + { + "messages": [ + { + "id": 0, + "msg": { + "wasm": { + "execute": { + "contract_addr": "router", + "msg": "eyJyb3V0ZV9tZXNzYWdlcyI6W3siY2NfaWQiOnsiY2hhaW4iOiJtb2NrLWNoYWluIiwiaWQiOiJTdWNjZWVkZWRPbkNoYWluOjAifSwic291cmNlX2FkZHJlc3MiOiJpZGMiLCJkZXN0aW5hdGlvbl9jaGFpbiI6Im1vY2stY2hhaW4tMiIsImRlc3RpbmF0aW9uX2FkZHJlc3MiOiJpZGMiLCJwYXlsb2FkX2hhc2giOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIn0seyJjY19pZCI6eyJjaGFpbiI6Im1vY2stY2hhaW4iLCJpZCI6IlN1Y2NlZWRlZE9uQ2hhaW46MSJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEifSx7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiU3VjY2VlZGVkT25DaGFpbjoyIn0sInNvdXJjZV9hZGRyZXNzIjoiaWRjIiwiZGVzdGluYXRpb25fY2hhaW4iOiJtb2NrLWNoYWluLTIiLCJkZXN0aW5hdGlvbl9hZGRyZXNzIjoiaWRjIiwicGF5bG9hZF9oYXNoIjoiMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMiJ9LHsiY2NfaWQiOnsiY2hhaW4iOiJtb2NrLWNoYWluIiwiaWQiOiJTdWNjZWVkZWRPbkNoYWluOjMifSwic291cmNlX2FkZHJlc3MiOiJpZGMiLCJkZXN0aW5hdGlvbl9jaGFpbiI6Im1vY2stY2hhaW4tMiIsImRlc3RpbmF0aW9uX2FkZHJlc3MiOiJpZGMiLCJwYXlsb2FkX2hhc2giOiIwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzIn0seyJjY19pZCI6eyJjaGFpbiI6Im1vY2stY2hhaW4iLCJpZCI6IlN1Y2NlZWRlZE9uQ2hhaW46NCJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQifSx7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiU3VjY2VlZGVkT25DaGFpbjo1In0sInNvdXJjZV9hZGRyZXNzIjoiaWRjIiwiZGVzdGluYXRpb25fY2hhaW4iOiJtb2NrLWNoYWluLTIiLCJkZXN0aW5hdGlvbl9hZGRyZXNzIjoiaWRjIiwicGF5bG9hZF9oYXNoIjoiMDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNSJ9LHsiY2NfaWQiOnsiY2hhaW4iOiJtb2NrLWNoYWluIiwiaWQiOiJTdWNjZWVkZWRPbkNoYWluOjYifSwic291cmNlX2FkZHJlc3MiOiJpZGMiLCJkZXN0aW5hdGlvbl9jaGFpbiI6Im1vY2stY2hhaW4tMiIsImRlc3RpbmF0aW9uX2FkZHJlc3MiOiJpZGMiLCJwYXlsb2FkX2hhc2giOiIwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2In0seyJjY19pZCI6eyJjaGFpbiI6Im1vY2stY2hhaW4iLCJpZCI6IlN1Y2NlZWRlZE9uQ2hhaW46NyJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcifSx7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiU3VjY2VlZGVkT25DaGFpbjo4In0sInNvdXJjZV9hZGRyZXNzIjoiaWRjIiwiZGVzdGluYXRpb25fY2hhaW4iOiJtb2NrLWNoYWluLTIiLCJkZXN0aW5hdGlvbl9hZGRyZXNzIjoiaWRjIiwicGF5bG9hZF9oYXNoIjoiMDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgwOCJ9LHsiY2NfaWQiOnsiY2hhaW4iOiJtb2NrLWNoYWluIiwiaWQiOiJTdWNjZWVkZWRPbkNoYWluOjkifSwic291cmNlX2FkZHJlc3MiOiJpZGMiLCJkZXN0aW5hdGlvbl9jaGFpbiI6Im1vY2stY2hhaW4tMiIsImRlc3RpbmF0aW9uX2FkZHJlc3MiOiJpZGMiLCJwYXlsb2FkX2hhc2giOiIwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5In1dfQ==", + "funds": [] + } + } + }, + "gas_limit": null, + "reply_on": "never" + } + ], + "attributes": [], + "events": [ + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:1" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0101010101010101010101010101010101010101010101010101010101010101" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:2" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0202020202020202020202020202020202020202020202020202020202020202" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:3" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0303030303030303030303030303030303030303030303030303030303030303" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:4" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0404040404040404040404040404040404040404040404040404040404040404" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:5" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0505050505050505050505050505050505050505050505050505050505050505" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:6" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0606060606060606060606060606060606060606060606060606060606060606" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:7" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0707070707070707070707070707070707070707070707070707070707070707" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:8" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0808080808080808080808080808080808080808080808080808080808080808" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:9" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0909090909090909090909090909090909090909090909090909090909090909" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:1" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0101010101010101010101010101010101010101010101010101010101010101" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:2" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0202020202020202020202020202020202020202020202020202020202020202" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:3" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0303030303030303030303030303030303030303030303030303030303030303" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:4" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0404040404040404040404040404040404040404040404040404040404040404" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:5" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0505050505050505050505050505050505050505050505050505050505050505" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:6" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0606060606060606060606060606060606060606060606060606060606060606" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:7" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0707070707070707070707070707070707070707070707070707070707070707" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:8" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0808080808080808080808080808080808080808080808080808080808080808" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:9" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0909090909090909090909090909090909090909090909090909090909090909" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "NotFound:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "NotFound:1" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0101010101010101010101010101010101010101010101010101010101010101" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "NotFound:2" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0202020202020202020202020202020202020202020202020202020202020202" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "NotFound:3" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0303030303030303030303030303030303030303030303030303030303030303" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "NotFound:4" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0404040404040404040404040404040404040404040404040404040404040404" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "NotFound:5" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0505050505050505050505050505050505050505050505050505050505050505" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "NotFound:6" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0606060606060606060606060606060606060606060606060606060606060606" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "NotFound:7" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0707070707070707070707070707070707070707070707070707070707070707" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "NotFound:8" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0808080808080808080808080808080808080808080808080808080808080808" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "NotFound:9" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0909090909090909090909090909090909090909090909090909090909090909" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:1" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0101010101010101010101010101010101010101010101010101010101010101" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:2" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0202020202020202020202020202020202020202020202020202020202020202" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:3" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0303030303030303030303030303030303030303030303030303030303030303" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:4" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0404040404040404040404040404040404040404040404040404040404040404" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:5" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0505050505050505050505050505050505050505050505050505050505050505" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:6" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0606060606060606060606060606060606060606060606060606060606060606" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:7" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0707070707070707070707070707070707070707070707070707070707070707" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:8" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0808080808080808080808080808080808080808080808080808080808080808" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:9" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0909090909090909090909090909090909090909090909090909090909090909" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "InProgress:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "InProgress:1" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0101010101010101010101010101010101010101010101010101010101010101" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "InProgress:2" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0202020202020202020202020202020202020202020202020202020202020202" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "InProgress:3" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0303030303030303030303030303030303030303030303030303030303030303" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "InProgress:4" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0404040404040404040404040404040404040404040404040404040404040404" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "InProgress:5" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0505050505050505050505050505050505050505050505050505050505050505" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "InProgress:6" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0606060606060606060606060606060606060606060606060606060606060606" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "InProgress:7" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0707070707070707070707070707070707070707070707070707070707070707" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "InProgress:8" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0808080808080808080808080808080808080808080808080808080808080808" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "InProgress:9" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0909090909090909090909090909090909090909090909090909090909090909" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "None:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "None:1" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0101010101010101010101010101010101010101010101010101010101010101" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "None:2" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0202020202020202020202020202020202020202020202020202020202020202" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "None:3" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0303030303030303030303030303030303030303030303030303030303030303" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "None:4" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0404040404040404040404040404040404040404040404040404040404040404" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "None:5" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0505050505050505050505050505050505050505050505050505050505050505" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "None:6" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0606060606060606060606060606060606060606060606060606060606060606" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "None:7" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0707070707070707070707070707070707070707070707070707070707070707" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "None:8" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0808080808080808080808080808080808080808080808080808080808080808" + } + ] + }, + { + "type": "unfit_for_routing", + "attributes": [ + { + "key": "id", + "value": "None:9" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0909090909090909090909090909090909090909090909090909090909090909" + } + ] + } + ], + "data": null + } +] \ No newline at end of file diff --git a/contracts/gateway/tests/test_route_outgoing.json b/contracts/gateway/tests/test_route_outgoing.json new file mode 100644 index 000000000..f3ba61c28 --- /dev/null +++ b/contracts/gateway/tests/test_route_outgoing.json @@ -0,0 +1,3753 @@ +[ + { + "messages": [], + "attributes": [], + "events": [], + "data": null + }, + { + "messages": [], + "attributes": [], + "events": [ + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + } + ], + "data": null + }, + { + "messages": [], + "attributes": [], + "events": [ + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + } + ], + "data": null + }, + { + "messages": [], + "attributes": [], + "events": [ + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "NotFound:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + } + ], + "data": null + }, + { + "messages": [], + "attributes": [], + "events": [ + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + } + ], + "data": null + }, + { + "messages": [], + "attributes": [], + "events": [ + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "InProgress:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + } + ], + "data": null + }, + { + "messages": [], + "attributes": [], + "events": [ + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "None:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + } + ], + "data": null + }, + { + "messages": [], + "attributes": [], + "events": [ + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:1" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0101010101010101010101010101010101010101010101010101010101010101" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:2" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0202020202020202020202020202020202020202020202020202020202020202" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:3" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0303030303030303030303030303030303030303030303030303030303030303" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:4" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0404040404040404040404040404040404040404040404040404040404040404" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:5" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0505050505050505050505050505050505050505050505050505050505050505" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:6" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0606060606060606060606060606060606060606060606060606060606060606" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:7" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0707070707070707070707070707070707070707070707070707070707070707" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:8" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0808080808080808080808080808080808080808080808080808080808080808" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:9" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0909090909090909090909090909090909090909090909090909090909090909" + } + ] + } + ], + "data": null + }, + { + "messages": [], + "attributes": [], + "events": [ + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:1" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0101010101010101010101010101010101010101010101010101010101010101" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:2" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0202020202020202020202020202020202020202020202020202020202020202" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:3" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0303030303030303030303030303030303030303030303030303030303030303" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:4" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0404040404040404040404040404040404040404040404040404040404040404" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:5" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0505050505050505050505050505050505050505050505050505050505050505" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:6" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0606060606060606060606060606060606060606060606060606060606060606" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:7" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0707070707070707070707070707070707070707070707070707070707070707" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:8" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0808080808080808080808080808080808080808080808080808080808080808" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:9" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0909090909090909090909090909090909090909090909090909090909090909" + } + ] + } + ], + "data": null + }, + { + "messages": [], + "attributes": [], + "events": [ + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "NotFound:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "NotFound:1" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0101010101010101010101010101010101010101010101010101010101010101" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "NotFound:2" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0202020202020202020202020202020202020202020202020202020202020202" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "NotFound:3" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0303030303030303030303030303030303030303030303030303030303030303" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "NotFound:4" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0404040404040404040404040404040404040404040404040404040404040404" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "NotFound:5" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0505050505050505050505050505050505050505050505050505050505050505" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "NotFound:6" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0606060606060606060606060606060606060606060606060606060606060606" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "NotFound:7" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0707070707070707070707070707070707070707070707070707070707070707" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "NotFound:8" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0808080808080808080808080808080808080808080808080808080808080808" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "NotFound:9" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0909090909090909090909090909090909090909090909090909090909090909" + } + ] + } + ], + "data": null + }, + { + "messages": [], + "attributes": [], + "events": [ + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:1" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0101010101010101010101010101010101010101010101010101010101010101" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:2" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0202020202020202020202020202020202020202020202020202020202020202" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:3" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0303030303030303030303030303030303030303030303030303030303030303" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:4" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0404040404040404040404040404040404040404040404040404040404040404" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:5" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0505050505050505050505050505050505050505050505050505050505050505" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:6" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0606060606060606060606060606060606060606060606060606060606060606" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:7" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0707070707070707070707070707070707070707070707070707070707070707" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:8" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0808080808080808080808080808080808080808080808080808080808080808" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:9" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0909090909090909090909090909090909090909090909090909090909090909" + } + ] + } + ], + "data": null + }, + { + "messages": [], + "attributes": [], + "events": [ + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "InProgress:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "InProgress:1" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0101010101010101010101010101010101010101010101010101010101010101" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "InProgress:2" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0202020202020202020202020202020202020202020202020202020202020202" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "InProgress:3" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0303030303030303030303030303030303030303030303030303030303030303" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "InProgress:4" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0404040404040404040404040404040404040404040404040404040404040404" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "InProgress:5" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0505050505050505050505050505050505050505050505050505050505050505" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "InProgress:6" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0606060606060606060606060606060606060606060606060606060606060606" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "InProgress:7" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0707070707070707070707070707070707070707070707070707070707070707" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "InProgress:8" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0808080808080808080808080808080808080808080808080808080808080808" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "InProgress:9" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0909090909090909090909090909090909090909090909090909090909090909" + } + ] + } + ], + "data": null + }, + { + "messages": [], + "attributes": [], + "events": [ + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "None:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "None:1" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0101010101010101010101010101010101010101010101010101010101010101" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "None:2" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0202020202020202020202020202020202020202020202020202020202020202" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "None:3" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0303030303030303030303030303030303030303030303030303030303030303" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "None:4" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0404040404040404040404040404040404040404040404040404040404040404" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "None:5" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0505050505050505050505050505050505050505050505050505050505050505" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "None:6" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0606060606060606060606060606060606060606060606060606060606060606" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "None:7" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0707070707070707070707070707070707070707070707070707070707070707" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "None:8" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0808080808080808080808080808080808080808080808080808080808080808" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "None:9" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0909090909090909090909090909090909090909090909090909090909090909" + } + ] + } + ], + "data": null + }, + { + "messages": [], + "attributes": [], + "events": [ + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:1" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0101010101010101010101010101010101010101010101010101010101010101" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:2" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0202020202020202020202020202020202020202020202020202020202020202" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:3" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0303030303030303030303030303030303030303030303030303030303030303" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:4" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0404040404040404040404040404040404040404040404040404040404040404" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:5" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0505050505050505050505050505050505050505050505050505050505050505" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:6" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0606060606060606060606060606060606060606060606060606060606060606" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:7" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0707070707070707070707070707070707070707070707070707070707070707" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:8" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0808080808080808080808080808080808080808080808080808080808080808" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:9" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0909090909090909090909090909090909090909090909090909090909090909" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:1" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0101010101010101010101010101010101010101010101010101010101010101" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:2" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0202020202020202020202020202020202020202020202020202020202020202" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:3" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0303030303030303030303030303030303030303030303030303030303030303" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:4" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0404040404040404040404040404040404040404040404040404040404040404" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:5" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0505050505050505050505050505050505050505050505050505050505050505" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:6" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0606060606060606060606060606060606060606060606060606060606060606" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:7" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0707070707070707070707070707070707070707070707070707070707070707" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:8" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0808080808080808080808080808080808080808080808080808080808080808" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:9" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0909090909090909090909090909090909090909090909090909090909090909" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "NotFound:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "NotFound:1" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0101010101010101010101010101010101010101010101010101010101010101" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "NotFound:2" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0202020202020202020202020202020202020202020202020202020202020202" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "NotFound:3" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0303030303030303030303030303030303030303030303030303030303030303" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "NotFound:4" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0404040404040404040404040404040404040404040404040404040404040404" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "NotFound:5" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0505050505050505050505050505050505050505050505050505050505050505" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "NotFound:6" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0606060606060606060606060606060606060606060606060606060606060606" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "NotFound:7" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0707070707070707070707070707070707070707070707070707070707070707" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "NotFound:8" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0808080808080808080808080808080808080808080808080808080808080808" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "NotFound:9" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0909090909090909090909090909090909090909090909090909090909090909" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:1" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0101010101010101010101010101010101010101010101010101010101010101" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:2" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0202020202020202020202020202020202020202020202020202020202020202" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:3" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0303030303030303030303030303030303030303030303030303030303030303" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:4" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0404040404040404040404040404040404040404040404040404040404040404" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:5" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0505050505050505050505050505050505050505050505050505050505050505" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:6" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0606060606060606060606060606060606060606060606060606060606060606" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:7" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0707070707070707070707070707070707070707070707070707070707070707" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:8" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0808080808080808080808080808080808080808080808080808080808080808" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:9" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0909090909090909090909090909090909090909090909090909090909090909" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "InProgress:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "InProgress:1" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0101010101010101010101010101010101010101010101010101010101010101" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "InProgress:2" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0202020202020202020202020202020202020202020202020202020202020202" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "InProgress:3" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0303030303030303030303030303030303030303030303030303030303030303" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "InProgress:4" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0404040404040404040404040404040404040404040404040404040404040404" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "InProgress:5" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0505050505050505050505050505050505050505050505050505050505050505" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "InProgress:6" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0606060606060606060606060606060606060606060606060606060606060606" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "InProgress:7" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0707070707070707070707070707070707070707070707070707070707070707" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "InProgress:8" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0808080808080808080808080808080808080808080808080808080808080808" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "InProgress:9" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0909090909090909090909090909090909090909090909090909090909090909" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "None:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "None:1" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0101010101010101010101010101010101010101010101010101010101010101" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "None:2" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0202020202020202020202020202020202020202020202020202020202020202" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "None:3" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0303030303030303030303030303030303030303030303030303030303030303" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "None:4" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0404040404040404040404040404040404040404040404040404040404040404" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "None:5" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0505050505050505050505050505050505050505050505050505050505050505" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "None:6" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0606060606060606060606060606060606060606060606060606060606060606" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "None:7" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0707070707070707070707070707070707070707070707070707070707070707" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "None:8" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0808080808080808080808080808080808080808080808080808080808080808" + } + ] + }, + { + "type": "routing", + "attributes": [ + { + "key": "id", + "value": "None:9" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0909090909090909090909090909090909090909090909090909090909090909" + } + ] + } + ], + "data": null + } +] \ No newline at end of file diff --git a/contracts/gateway/tests/test_verify.json b/contracts/gateway/tests/test_verify.json new file mode 100644 index 000000000..62cb44dab --- /dev/null +++ b/contracts/gateway/tests/test_verify.json @@ -0,0 +1,3858 @@ +[ + { + "messages": [], + "attributes": [], + "events": [], + "data": null + }, + { + "messages": [], + "attributes": [], + "events": [ + { + "type": "already_verified", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + } + ], + "data": null + }, + { + "messages": [], + "attributes": [], + "events": [ + { + "type": "already_rejected", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + } + ], + "data": null + }, + { + "messages": [ + { + "id": 0, + "msg": { + "wasm": { + "execute": { + "contract_addr": "verifier", + "msg": "eyJ2ZXJpZnlfbWVzc2FnZXMiOnsibWVzc2FnZXMiOlt7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiTm90Rm91bmQ6MCJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAifV19fQ==", + "funds": [] + } + } + }, + "gas_limit": null, + "reply_on": "never" + } + ], + "attributes": [], + "events": [ + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "NotFound:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + } + ], + "data": null + }, + { + "messages": [ + { + "id": 0, + "msg": { + "wasm": { + "execute": { + "contract_addr": "verifier", + "msg": "eyJ2ZXJpZnlfbWVzc2FnZXMiOnsibWVzc2FnZXMiOlt7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiRmFpbGVkVG9WZXJpZnk6MCJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAifV19fQ==", + "funds": [] + } + } + }, + "gas_limit": null, + "reply_on": "never" + } + ], + "attributes": [], + "events": [ + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + } + ], + "data": null + }, + { + "messages": [], + "attributes": [], + "events": [ + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "InProgress:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + } + ], + "data": null + }, + { + "messages": [ + { + "id": 0, + "msg": { + "wasm": { + "execute": { + "contract_addr": "verifier", + "msg": "eyJ2ZXJpZnlfbWVzc2FnZXMiOnsibWVzc2FnZXMiOlt7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiTm9uZTowIn0sInNvdXJjZV9hZGRyZXNzIjoiaWRjIiwiZGVzdGluYXRpb25fY2hhaW4iOiJtb2NrLWNoYWluLTIiLCJkZXN0aW5hdGlvbl9hZGRyZXNzIjoiaWRjIiwicGF5bG9hZF9oYXNoIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJ9XX19", + "funds": [] + } + } + }, + "gas_limit": null, + "reply_on": "never" + } + ], + "attributes": [], + "events": [ + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "None:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + } + ], + "data": null + }, + { + "messages": [], + "attributes": [], + "events": [ + { + "type": "already_verified", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + }, + { + "type": "already_verified", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:1" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0101010101010101010101010101010101010101010101010101010101010101" + } + ] + }, + { + "type": "already_verified", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:2" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0202020202020202020202020202020202020202020202020202020202020202" + } + ] + }, + { + "type": "already_verified", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:3" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0303030303030303030303030303030303030303030303030303030303030303" + } + ] + }, + { + "type": "already_verified", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:4" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0404040404040404040404040404040404040404040404040404040404040404" + } + ] + }, + { + "type": "already_verified", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:5" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0505050505050505050505050505050505050505050505050505050505050505" + } + ] + }, + { + "type": "already_verified", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:6" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0606060606060606060606060606060606060606060606060606060606060606" + } + ] + }, + { + "type": "already_verified", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:7" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0707070707070707070707070707070707070707070707070707070707070707" + } + ] + }, + { + "type": "already_verified", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:8" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0808080808080808080808080808080808080808080808080808080808080808" + } + ] + }, + { + "type": "already_verified", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:9" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0909090909090909090909090909090909090909090909090909090909090909" + } + ] + } + ], + "data": null + }, + { + "messages": [], + "attributes": [], + "events": [ + { + "type": "already_rejected", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + }, + { + "type": "already_rejected", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:1" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0101010101010101010101010101010101010101010101010101010101010101" + } + ] + }, + { + "type": "already_rejected", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:2" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0202020202020202020202020202020202020202020202020202020202020202" + } + ] + }, + { + "type": "already_rejected", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:3" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0303030303030303030303030303030303030303030303030303030303030303" + } + ] + }, + { + "type": "already_rejected", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:4" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0404040404040404040404040404040404040404040404040404040404040404" + } + ] + }, + { + "type": "already_rejected", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:5" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0505050505050505050505050505050505050505050505050505050505050505" + } + ] + }, + { + "type": "already_rejected", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:6" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0606060606060606060606060606060606060606060606060606060606060606" + } + ] + }, + { + "type": "already_rejected", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:7" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0707070707070707070707070707070707070707070707070707070707070707" + } + ] + }, + { + "type": "already_rejected", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:8" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0808080808080808080808080808080808080808080808080808080808080808" + } + ] + }, + { + "type": "already_rejected", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:9" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0909090909090909090909090909090909090909090909090909090909090909" + } + ] + } + ], + "data": null + }, + { + "messages": [ + { + "id": 0, + "msg": { + "wasm": { + "execute": { + "contract_addr": "verifier", + "msg": "eyJ2ZXJpZnlfbWVzc2FnZXMiOnsibWVzc2FnZXMiOlt7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiTm90Rm91bmQ6MCJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAifSx7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiTm90Rm91bmQ6MSJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEifSx7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiTm90Rm91bmQ6MiJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIifSx7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiTm90Rm91bmQ6MyJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMifSx7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiTm90Rm91bmQ6NCJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQifSx7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiTm90Rm91bmQ6NSJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUifSx7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiTm90Rm91bmQ6NiJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYifSx7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiTm90Rm91bmQ6NyJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcifSx7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiTm90Rm91bmQ6OCJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgifSx7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiTm90Rm91bmQ6OSJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkifV19fQ==", + "funds": [] + } + } + }, + "gas_limit": null, + "reply_on": "never" + } + ], + "attributes": [], + "events": [ + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "NotFound:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "NotFound:1" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0101010101010101010101010101010101010101010101010101010101010101" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "NotFound:2" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0202020202020202020202020202020202020202020202020202020202020202" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "NotFound:3" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0303030303030303030303030303030303030303030303030303030303030303" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "NotFound:4" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0404040404040404040404040404040404040404040404040404040404040404" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "NotFound:5" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0505050505050505050505050505050505050505050505050505050505050505" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "NotFound:6" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0606060606060606060606060606060606060606060606060606060606060606" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "NotFound:7" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0707070707070707070707070707070707070707070707070707070707070707" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "NotFound:8" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0808080808080808080808080808080808080808080808080808080808080808" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "NotFound:9" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0909090909090909090909090909090909090909090909090909090909090909" + } + ] + } + ], + "data": null + }, + { + "messages": [ + { + "id": 0, + "msg": { + "wasm": { + "execute": { + "contract_addr": "verifier", + "msg": "eyJ2ZXJpZnlfbWVzc2FnZXMiOnsibWVzc2FnZXMiOlt7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiRmFpbGVkVG9WZXJpZnk6MCJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAifSx7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiRmFpbGVkVG9WZXJpZnk6MSJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEifSx7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiRmFpbGVkVG9WZXJpZnk6MiJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIifSx7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiRmFpbGVkVG9WZXJpZnk6MyJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMifSx7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiRmFpbGVkVG9WZXJpZnk6NCJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQifSx7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiRmFpbGVkVG9WZXJpZnk6NSJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUifSx7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiRmFpbGVkVG9WZXJpZnk6NiJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYifSx7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiRmFpbGVkVG9WZXJpZnk6NyJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcifSx7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiRmFpbGVkVG9WZXJpZnk6OCJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgifSx7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiRmFpbGVkVG9WZXJpZnk6OSJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkifV19fQ==", + "funds": [] + } + } + }, + "gas_limit": null, + "reply_on": "never" + } + ], + "attributes": [], + "events": [ + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:1" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0101010101010101010101010101010101010101010101010101010101010101" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:2" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0202020202020202020202020202020202020202020202020202020202020202" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:3" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0303030303030303030303030303030303030303030303030303030303030303" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:4" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0404040404040404040404040404040404040404040404040404040404040404" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:5" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0505050505050505050505050505050505050505050505050505050505050505" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:6" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0606060606060606060606060606060606060606060606060606060606060606" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:7" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0707070707070707070707070707070707070707070707070707070707070707" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:8" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0808080808080808080808080808080808080808080808080808080808080808" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:9" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0909090909090909090909090909090909090909090909090909090909090909" + } + ] + } + ], + "data": null + }, + { + "messages": [], + "attributes": [], + "events": [ + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "InProgress:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "InProgress:1" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0101010101010101010101010101010101010101010101010101010101010101" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "InProgress:2" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0202020202020202020202020202020202020202020202020202020202020202" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "InProgress:3" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0303030303030303030303030303030303030303030303030303030303030303" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "InProgress:4" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0404040404040404040404040404040404040404040404040404040404040404" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "InProgress:5" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0505050505050505050505050505050505050505050505050505050505050505" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "InProgress:6" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0606060606060606060606060606060606060606060606060606060606060606" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "InProgress:7" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0707070707070707070707070707070707070707070707070707070707070707" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "InProgress:8" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0808080808080808080808080808080808080808080808080808080808080808" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "InProgress:9" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0909090909090909090909090909090909090909090909090909090909090909" + } + ] + } + ], + "data": null + }, + { + "messages": [ + { + "id": 0, + "msg": { + "wasm": { + "execute": { + "contract_addr": "verifier", + "msg": "eyJ2ZXJpZnlfbWVzc2FnZXMiOnsibWVzc2FnZXMiOlt7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiTm9uZTowIn0sInNvdXJjZV9hZGRyZXNzIjoiaWRjIiwiZGVzdGluYXRpb25fY2hhaW4iOiJtb2NrLWNoYWluLTIiLCJkZXN0aW5hdGlvbl9hZGRyZXNzIjoiaWRjIiwicGF5bG9hZF9oYXNoIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJ9LHsiY2NfaWQiOnsiY2hhaW4iOiJtb2NrLWNoYWluIiwiaWQiOiJOb25lOjEifSwic291cmNlX2FkZHJlc3MiOiJpZGMiLCJkZXN0aW5hdGlvbl9jaGFpbiI6Im1vY2stY2hhaW4tMiIsImRlc3RpbmF0aW9uX2FkZHJlc3MiOiJpZGMiLCJwYXlsb2FkX2hhc2giOiIwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxIn0seyJjY19pZCI6eyJjaGFpbiI6Im1vY2stY2hhaW4iLCJpZCI6Ik5vbmU6MiJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIifSx7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiTm9uZTozIn0sInNvdXJjZV9hZGRyZXNzIjoiaWRjIiwiZGVzdGluYXRpb25fY2hhaW4iOiJtb2NrLWNoYWluLTIiLCJkZXN0aW5hdGlvbl9hZGRyZXNzIjoiaWRjIiwicGF5bG9hZF9oYXNoIjoiMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMyJ9LHsiY2NfaWQiOnsiY2hhaW4iOiJtb2NrLWNoYWluIiwiaWQiOiJOb25lOjQifSwic291cmNlX2FkZHJlc3MiOiJpZGMiLCJkZXN0aW5hdGlvbl9jaGFpbiI6Im1vY2stY2hhaW4tMiIsImRlc3RpbmF0aW9uX2FkZHJlc3MiOiJpZGMiLCJwYXlsb2FkX2hhc2giOiIwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0In0seyJjY19pZCI6eyJjaGFpbiI6Im1vY2stY2hhaW4iLCJpZCI6Ik5vbmU6NSJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUifSx7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiTm9uZTo2In0sInNvdXJjZV9hZGRyZXNzIjoiaWRjIiwiZGVzdGluYXRpb25fY2hhaW4iOiJtb2NrLWNoYWluLTIiLCJkZXN0aW5hdGlvbl9hZGRyZXNzIjoiaWRjIiwicGF5bG9hZF9oYXNoIjoiMDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNiJ9LHsiY2NfaWQiOnsiY2hhaW4iOiJtb2NrLWNoYWluIiwiaWQiOiJOb25lOjcifSwic291cmNlX2FkZHJlc3MiOiJpZGMiLCJkZXN0aW5hdGlvbl9jaGFpbiI6Im1vY2stY2hhaW4tMiIsImRlc3RpbmF0aW9uX2FkZHJlc3MiOiJpZGMiLCJwYXlsb2FkX2hhc2giOiIwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3In0seyJjY19pZCI6eyJjaGFpbiI6Im1vY2stY2hhaW4iLCJpZCI6Ik5vbmU6OCJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgifSx7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiTm9uZTo5In0sInNvdXJjZV9hZGRyZXNzIjoiaWRjIiwiZGVzdGluYXRpb25fY2hhaW4iOiJtb2NrLWNoYWluLTIiLCJkZXN0aW5hdGlvbl9hZGRyZXNzIjoiaWRjIiwicGF5bG9hZF9oYXNoIjoiMDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOSJ9XX19", + "funds": [] + } + } + }, + "gas_limit": null, + "reply_on": "never" + } + ], + "attributes": [], + "events": [ + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "None:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "None:1" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0101010101010101010101010101010101010101010101010101010101010101" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "None:2" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0202020202020202020202020202020202020202020202020202020202020202" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "None:3" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0303030303030303030303030303030303030303030303030303030303030303" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "None:4" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0404040404040404040404040404040404040404040404040404040404040404" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "None:5" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0505050505050505050505050505050505050505050505050505050505050505" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "None:6" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0606060606060606060606060606060606060606060606060606060606060606" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "None:7" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0707070707070707070707070707070707070707070707070707070707070707" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "None:8" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0808080808080808080808080808080808080808080808080808080808080808" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "None:9" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0909090909090909090909090909090909090909090909090909090909090909" + } + ] + } + ], + "data": null + }, + { + "messages": [ + { + "id": 0, + "msg": { + "wasm": { + "execute": { + "contract_addr": "verifier", + "msg": "eyJ2ZXJpZnlfbWVzc2FnZXMiOnsibWVzc2FnZXMiOlt7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiTm90Rm91bmQ6MCJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAifSx7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiTm90Rm91bmQ6MSJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEifSx7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiTm90Rm91bmQ6MiJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIifSx7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiTm90Rm91bmQ6MyJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMifSx7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiTm90Rm91bmQ6NCJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQifSx7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiTm90Rm91bmQ6NSJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUifSx7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiTm90Rm91bmQ6NiJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYifSx7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiTm90Rm91bmQ6NyJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcifSx7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiTm90Rm91bmQ6OCJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgifSx7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiTm90Rm91bmQ6OSJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkifSx7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiRmFpbGVkVG9WZXJpZnk6MCJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAifSx7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiRmFpbGVkVG9WZXJpZnk6MSJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEifSx7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiRmFpbGVkVG9WZXJpZnk6MiJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIifSx7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiRmFpbGVkVG9WZXJpZnk6MyJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMifSx7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiRmFpbGVkVG9WZXJpZnk6NCJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQifSx7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiRmFpbGVkVG9WZXJpZnk6NSJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUifSx7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiRmFpbGVkVG9WZXJpZnk6NiJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYifSx7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiRmFpbGVkVG9WZXJpZnk6NyJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcifSx7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiRmFpbGVkVG9WZXJpZnk6OCJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgifSx7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiRmFpbGVkVG9WZXJpZnk6OSJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkifSx7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiTm9uZTowIn0sInNvdXJjZV9hZGRyZXNzIjoiaWRjIiwiZGVzdGluYXRpb25fY2hhaW4iOiJtb2NrLWNoYWluLTIiLCJkZXN0aW5hdGlvbl9hZGRyZXNzIjoiaWRjIiwicGF5bG9hZF9oYXNoIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJ9LHsiY2NfaWQiOnsiY2hhaW4iOiJtb2NrLWNoYWluIiwiaWQiOiJOb25lOjEifSwic291cmNlX2FkZHJlc3MiOiJpZGMiLCJkZXN0aW5hdGlvbl9jaGFpbiI6Im1vY2stY2hhaW4tMiIsImRlc3RpbmF0aW9uX2FkZHJlc3MiOiJpZGMiLCJwYXlsb2FkX2hhc2giOiIwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxIn0seyJjY19pZCI6eyJjaGFpbiI6Im1vY2stY2hhaW4iLCJpZCI6Ik5vbmU6MiJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIifSx7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiTm9uZTozIn0sInNvdXJjZV9hZGRyZXNzIjoiaWRjIiwiZGVzdGluYXRpb25fY2hhaW4iOiJtb2NrLWNoYWluLTIiLCJkZXN0aW5hdGlvbl9hZGRyZXNzIjoiaWRjIiwicGF5bG9hZF9oYXNoIjoiMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMyJ9LHsiY2NfaWQiOnsiY2hhaW4iOiJtb2NrLWNoYWluIiwiaWQiOiJOb25lOjQifSwic291cmNlX2FkZHJlc3MiOiJpZGMiLCJkZXN0aW5hdGlvbl9jaGFpbiI6Im1vY2stY2hhaW4tMiIsImRlc3RpbmF0aW9uX2FkZHJlc3MiOiJpZGMiLCJwYXlsb2FkX2hhc2giOiIwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0In0seyJjY19pZCI6eyJjaGFpbiI6Im1vY2stY2hhaW4iLCJpZCI6Ik5vbmU6NSJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUifSx7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiTm9uZTo2In0sInNvdXJjZV9hZGRyZXNzIjoiaWRjIiwiZGVzdGluYXRpb25fY2hhaW4iOiJtb2NrLWNoYWluLTIiLCJkZXN0aW5hdGlvbl9hZGRyZXNzIjoiaWRjIiwicGF5bG9hZF9oYXNoIjoiMDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNiJ9LHsiY2NfaWQiOnsiY2hhaW4iOiJtb2NrLWNoYWluIiwiaWQiOiJOb25lOjcifSwic291cmNlX2FkZHJlc3MiOiJpZGMiLCJkZXN0aW5hdGlvbl9jaGFpbiI6Im1vY2stY2hhaW4tMiIsImRlc3RpbmF0aW9uX2FkZHJlc3MiOiJpZGMiLCJwYXlsb2FkX2hhc2giOiIwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3MDcwNzA3In0seyJjY19pZCI6eyJjaGFpbiI6Im1vY2stY2hhaW4iLCJpZCI6Ik5vbmU6OCJ9LCJzb3VyY2VfYWRkcmVzcyI6ImlkYyIsImRlc3RpbmF0aW9uX2NoYWluIjoibW9jay1jaGFpbi0yIiwiZGVzdGluYXRpb25fYWRkcmVzcyI6ImlkYyIsInBheWxvYWRfaGFzaCI6IjA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgwODA4MDgifSx7ImNjX2lkIjp7ImNoYWluIjoibW9jay1jaGFpbiIsImlkIjoiTm9uZTo5In0sInNvdXJjZV9hZGRyZXNzIjoiaWRjIiwiZGVzdGluYXRpb25fY2hhaW4iOiJtb2NrLWNoYWluLTIiLCJkZXN0aW5hdGlvbl9hZGRyZXNzIjoiaWRjIiwicGF5bG9hZF9oYXNoIjoiMDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOTA5MDkwOSJ9XX19", + "funds": [] + } + } + }, + "gas_limit": null, + "reply_on": "never" + } + ], + "attributes": [], + "events": [ + { + "type": "already_verified", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + }, + { + "type": "already_verified", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:1" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0101010101010101010101010101010101010101010101010101010101010101" + } + ] + }, + { + "type": "already_verified", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:2" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0202020202020202020202020202020202020202020202020202020202020202" + } + ] + }, + { + "type": "already_verified", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:3" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0303030303030303030303030303030303030303030303030303030303030303" + } + ] + }, + { + "type": "already_verified", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:4" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0404040404040404040404040404040404040404040404040404040404040404" + } + ] + }, + { + "type": "already_verified", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:5" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0505050505050505050505050505050505050505050505050505050505050505" + } + ] + }, + { + "type": "already_verified", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:6" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0606060606060606060606060606060606060606060606060606060606060606" + } + ] + }, + { + "type": "already_verified", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:7" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0707070707070707070707070707070707070707070707070707070707070707" + } + ] + }, + { + "type": "already_verified", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:8" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0808080808080808080808080808080808080808080808080808080808080808" + } + ] + }, + { + "type": "already_verified", + "attributes": [ + { + "key": "id", + "value": "SucceededOnChain:9" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0909090909090909090909090909090909090909090909090909090909090909" + } + ] + }, + { + "type": "already_rejected", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + }, + { + "type": "already_rejected", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:1" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0101010101010101010101010101010101010101010101010101010101010101" + } + ] + }, + { + "type": "already_rejected", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:2" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0202020202020202020202020202020202020202020202020202020202020202" + } + ] + }, + { + "type": "already_rejected", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:3" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0303030303030303030303030303030303030303030303030303030303030303" + } + ] + }, + { + "type": "already_rejected", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:4" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0404040404040404040404040404040404040404040404040404040404040404" + } + ] + }, + { + "type": "already_rejected", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:5" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0505050505050505050505050505050505050505050505050505050505050505" + } + ] + }, + { + "type": "already_rejected", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:6" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0606060606060606060606060606060606060606060606060606060606060606" + } + ] + }, + { + "type": "already_rejected", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:7" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0707070707070707070707070707070707070707070707070707070707070707" + } + ] + }, + { + "type": "already_rejected", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:8" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0808080808080808080808080808080808080808080808080808080808080808" + } + ] + }, + { + "type": "already_rejected", + "attributes": [ + { + "key": "id", + "value": "FailedOnChain:9" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0909090909090909090909090909090909090909090909090909090909090909" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "NotFound:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "NotFound:1" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0101010101010101010101010101010101010101010101010101010101010101" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "NotFound:2" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0202020202020202020202020202020202020202020202020202020202020202" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "NotFound:3" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0303030303030303030303030303030303030303030303030303030303030303" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "NotFound:4" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0404040404040404040404040404040404040404040404040404040404040404" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "NotFound:5" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0505050505050505050505050505050505050505050505050505050505050505" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "NotFound:6" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0606060606060606060606060606060606060606060606060606060606060606" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "NotFound:7" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0707070707070707070707070707070707070707070707070707070707070707" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "NotFound:8" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0808080808080808080808080808080808080808080808080808080808080808" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "NotFound:9" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0909090909090909090909090909090909090909090909090909090909090909" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:1" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0101010101010101010101010101010101010101010101010101010101010101" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:2" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0202020202020202020202020202020202020202020202020202020202020202" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:3" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0303030303030303030303030303030303030303030303030303030303030303" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:4" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0404040404040404040404040404040404040404040404040404040404040404" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:5" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0505050505050505050505050505050505050505050505050505050505050505" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:6" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0606060606060606060606060606060606060606060606060606060606060606" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:7" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0707070707070707070707070707070707070707070707070707070707070707" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:8" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0808080808080808080808080808080808080808080808080808080808080808" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "FailedToVerify:9" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0909090909090909090909090909090909090909090909090909090909090909" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "InProgress:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "InProgress:1" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0101010101010101010101010101010101010101010101010101010101010101" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "InProgress:2" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0202020202020202020202020202020202020202020202020202020202020202" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "InProgress:3" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0303030303030303030303030303030303030303030303030303030303030303" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "InProgress:4" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0404040404040404040404040404040404040404040404040404040404040404" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "InProgress:5" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0505050505050505050505050505050505050505050505050505050505050505" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "InProgress:6" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0606060606060606060606060606060606060606060606060606060606060606" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "InProgress:7" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0707070707070707070707070707070707070707070707070707070707070707" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "InProgress:8" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0808080808080808080808080808080808080808080808080808080808080808" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "InProgress:9" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0909090909090909090909090909090909090909090909090909090909090909" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "None:0" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0000000000000000000000000000000000000000000000000000000000000000" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "None:1" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0101010101010101010101010101010101010101010101010101010101010101" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "None:2" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0202020202020202020202020202020202020202020202020202020202020202" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "None:3" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0303030303030303030303030303030303030303030303030303030303030303" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "None:4" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0404040404040404040404040404040404040404040404040404040404040404" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "None:5" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0505050505050505050505050505050505050505050505050505050505050505" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "None:6" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0606060606060606060606060606060606060606060606060606060606060606" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "None:7" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0707070707070707070707070707070707070707070707070707070707070707" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "None:8" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0808080808080808080808080808080808080808080808080808080808080808" + } + ] + }, + { + "type": "verifying", + "attributes": [ + { + "key": "id", + "value": "None:9" + }, + { + "key": "source_chain", + "value": "mock-chain" + }, + { + "key": "source_addresses", + "value": "idc" + }, + { + "key": "destination_chain", + "value": "mock-chain-2" + }, + { + "key": "destination_addresses", + "value": "idc" + }, + { + "key": "payload_hash", + "value": "0909090909090909090909090909090909090909090909090909090909090909" + } + ] + } + ], + "data": null + } +] \ No newline at end of file diff --git a/packages/axelar-wasm-std/src/utils.rs b/packages/axelar-wasm-std/src/utils.rs index c78672830..06d173a2c 100644 --- a/packages/axelar-wasm-std/src/utils.rs +++ b/packages/axelar-wasm-std/src/utils.rs @@ -62,3 +62,13 @@ impl InspectorResult for Result { }) } } + +pub trait TryMapExt { + fn try_map(self, func: impl FnOnce(T) -> Result) -> Result, E>; +} + +impl TryMapExt for Option { + fn try_map(self, func: impl FnOnce(T) -> Result) -> Result, E> { + self.map(func).transpose() + } +} diff --git a/packages/axelar-wasm-std/src/verification.rs b/packages/axelar-wasm-std/src/verification.rs index 27e77cce1..1139b0286 100644 --- a/packages/axelar-wasm-std/src/verification.rs +++ b/packages/axelar-wasm-std/src/verification.rs @@ -1,11 +1,11 @@ use cosmwasm_schema::cw_serde; #[cw_serde] -#[derive(Copy)] +#[derive(Copy, Hash, Eq, Ord, PartialOrd)] pub enum VerificationStatus { SucceededOnChain, FailedOnChain, - NotFound, + NotFound, // message was not found on source chain FailedToVerify, // verification process failed, e.g. no consensus reached InProgress, // verification in progress None, // not yet verified, e.g. not in a poll