Skip to content

Commit

Permalink
Relay DummyOrdered messages (paritytech#318)
Browse files Browse the repository at this point in the history
* DummyOrdered relay: initial commit

* 1 ML file -> 3 files

* extracted generic message race loop

* uncommented race error procesing

* lane loop tests

* cargo fmt

* moved HeaderId to utils.rs

* restart lane loop on stall

* message delivery strategy tests

* removed obsolete code

* clippy

* Update relays/ethereum/src/message_lane_loop.rs

Co-authored-by: Tomasz Drwięga <tomusdrw@users.noreply.github.com>

* Update relays/ethereum/src/message_lane_loop.rs

Co-authored-by: Tomasz Drwięga <tomusdrw@users.noreply.github.com>

* added more races docs

* Update relays/ethereum/src/message_race_delivery.rs

Co-authored-by: Tomasz Drwięga <tomusdrw@users.noreply.github.com>

* update docs

* Update relays/ethereum/src/message_race_loop.rs

Co-authored-by: Tomasz Drwięga <tomusdrw@users.noreply.github.com>

* deal with TODOs

* removed docs

* docs

* cargo fmt --all

* Update relays/ethereum/src/message_race_loop.rs

Co-authored-by: Hernando Castano <HCastano@users.noreply.github.com>

Co-authored-by: Tomasz Drwięga <tomusdrw@users.noreply.github.com>
Co-authored-by: Hernando Castano <HCastano@users.noreply.github.com>
  • Loading branch information
3 people authored and serban300 committed Apr 9, 2024
1 parent 4e9a596 commit 4b6ad38
Show file tree
Hide file tree
Showing 18 changed files with 1,540 additions and 94 deletions.
4 changes: 2 additions & 2 deletions bridges/relays/ethereum/src/ethereum_client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@ use crate::ethereum_types::{
use crate::rpc::{Ethereum, EthereumRpc};
use crate::rpc_errors::{EthereumNodeError, RpcError};
use crate::substrate_types::{GrandpaJustification, Hash as SubstrateHash, QueuedSubstrateHeader, SubstrateHeaderId};
use crate::sync_types::{HeaderId, SubmittedHeaders};
use crate::utils::MaybeConnectionError;
use crate::sync_types::SubmittedHeaders;
use crate::utils::{HeaderId, MaybeConnectionError};

use async_trait::async_trait;
use codec::{Decode, Encode};
Expand Down
2 changes: 1 addition & 1 deletion bridges/relays/ethereum/src/ethereum_deploy_contract.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ use crate::instances::BridgeInstance;
use crate::rpc::SubstrateRpc;
use crate::substrate_client::{SubstrateConnectionParams, SubstrateRpcClient};
use crate::substrate_types::{Hash as SubstrateHash, Header as SubstrateHeader, SubstrateHeaderId};
use crate::sync_types::HeaderId;
use crate::utils::HeaderId;

use codec::{Decode, Encode};
use num_traits::Zero;
Expand Down
2 changes: 1 addition & 1 deletion bridges/relays/ethereum/src/ethereum_exchange.rs
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ use crate::substrate_client::{
SubmitEthereumExchangeTransactionProof, SubstrateConnectionParams, SubstrateRpcClient, SubstrateSigningParams,
};
use crate::substrate_types::into_substrate_ethereum_receipt;
use crate::sync_types::HeaderId;
use crate::utils::HeaderId;

use async_trait::async_trait;
use bp_currency_exchange::MaybeLockFundsTransaction;
Expand Down
3 changes: 2 additions & 1 deletion bridges/relays/ethereum/src/ethereum_types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@
// along with Parity Bridges Common. If not, see <http://www.gnu.org/licenses/>.

use crate::substrate_types::{into_substrate_ethereum_header, into_substrate_ethereum_receipts};
use crate::sync_types::{HeaderId, HeadersSyncPipeline, QueuedHeader, SourceHeader};
use crate::sync_types::{HeadersSyncPipeline, QueuedHeader, SourceHeader};
use crate::utils::HeaderId;
use codec::Encode;

pub use web3::types::{Address, Bytes, CallRequest, H256, U128, U256, U64};
Expand Down
6 changes: 3 additions & 3 deletions bridges/relays/ethereum/src/exchange.rs
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ pub trait SourceBlock {
type Transaction: SourceTransaction;

/// Return hash of the block.
fn id(&self) -> crate::sync_types::HeaderId<Self::Hash, Self::Number>;
fn id(&self) -> crate::utils::HeaderId<Self::Hash, Self::Number>;
/// Return block transactions iterator.
fn transactions(&self) -> Vec<Self::Transaction>;
}
Expand All @@ -81,7 +81,7 @@ pub type TransactionOf<P> = <<P as TransactionProofPipeline>::Block as SourceBlo
pub type TransactionHashOf<P> = <TransactionOf<P> as SourceTransaction>::Hash;

/// Header id.
pub type HeaderId<P> = crate::sync_types::HeaderId<BlockHashOf<P>, BlockNumberOf<P>>;
pub type HeaderId<P> = crate::utils::HeaderId<BlockHashOf<P>, BlockNumberOf<P>>;

/// Source client API.
#[async_trait]
Expand Down Expand Up @@ -443,7 +443,7 @@ async fn wait_header_finalized<P: TransactionProofPipeline>(
#[cfg(test)]
pub(crate) mod tests {
use super::*;
use crate::sync_types::HeaderId;
use crate::utils::HeaderId;

use parking_lot::Mutex;
use std::{
Expand Down
6 changes: 4 additions & 2 deletions bridges/relays/ethereum/src/headers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,9 @@
// You should have received a copy of the GNU General Public License
// along with Parity Bridges Common. If not, see <http://www.gnu.org/licenses/>.

use crate::sync_types::{HeaderId, HeaderIdOf, HeaderStatus, HeadersSyncPipeline, QueuedHeader, SourceHeader};
use crate::sync_types::{HeaderIdOf, HeaderStatus, HeadersSyncPipeline, QueuedHeader, SourceHeader};
use crate::utils::HeaderId;

use linked_hash_map::LinkedHashMap;
use num_traits::{One, Zero};
use std::{
Expand Down Expand Up @@ -777,7 +779,7 @@ fn queued_incomplete_header<Id: Clone + Eq + std::hash::Hash, T>(
pub(crate) mod tests {
use super::*;
use crate::ethereum_types::{EthereumHeaderId, EthereumHeadersSyncPipeline, Header, H256};
use crate::sync_types::{HeaderId, QueuedHeader};
use crate::sync_types::QueuedHeader;

pub(crate) fn header(number: u64) -> QueuedHeader<EthereumHeadersSyncPipeline> {
QueuedHeader::new(Header {
Expand Down
4 changes: 4 additions & 0 deletions bridges/relays/ethereum/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,10 @@ mod exchange_loop;
mod exchange_loop_metrics;
mod headers;
mod instances;
mod message_lane;
mod message_lane_loop;
mod message_race_delivery;
mod message_race_loop;
mod metrics;
mod rpc;
mod rpc_errors;
Expand Down
55 changes: 55 additions & 0 deletions bridges/relays/ethereum/src/message_lane.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
// Copyright 2019-2020 Parity Technologies (UK) Ltd.
// This file is part of Parity Bridges Common.

// Parity Bridges Common is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.

// Parity Bridges Common is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with Parity Bridges Common. If not, see <http://www.gnu.org/licenses/>.

//! One-way message lane types. Within single one-way lane we have three 'races' where we try to:
//!
//! 1) relay new messages from source to target node;
//! 2) relay proof-of-receiving from target to source node;
//! 3) relay proof-of-processing from target no source node.

use crate::utils::HeaderId;

use std::fmt::Debug;

/// One-way message lane.
pub trait MessageLane {
/// Name of the messages source.
const SOURCE_NAME: &'static str;
/// Name of the messages target.
const TARGET_NAME: &'static str;

/// Message nonce type.
type MessageNonce: Clone + Copy + Debug + Default + From<u32> + Ord + std::ops::Add<Output = Self::MessageNonce>;

/// Messages proof.
type MessagesProof: Clone;

/// Number of the source header.
type SourceHeaderNumber: Clone + Debug + Default + Ord + PartialEq;
/// Hash of the source header.
type SourceHeaderHash: Clone + Debug + Default + PartialEq;

/// Number of the target header.
type TargetHeaderNumber: Clone + Debug + Default + Ord + PartialEq;
/// Hash of the target header.
type TargetHeaderHash: Clone + Debug + Default + PartialEq;
}

/// Source header id within given one-way message lane.
pub type SourceHeaderIdOf<P> = HeaderId<<P as MessageLane>::SourceHeaderHash, <P as MessageLane>::SourceHeaderNumber>;

/// Target header id within given one-way message lane.
pub type TargetHeaderIdOf<P> = HeaderId<<P as MessageLane>::TargetHeaderHash, <P as MessageLane>::TargetHeaderNumber>;
Loading

0 comments on commit 4b6ad38

Please sign in to comment.