Skip to content

Commit 87eadea

Browse files
authored
Update types for EVM bridge (#79)
* Update types for EVM bridge * Fix warnings * Fix warnings * Remove Native asset kind
1 parent 37a579c commit 87eadea

File tree

20 files changed

+344
-3152
lines changed

20 files changed

+344
-3152
lines changed

pallets/data-signer/src/tests.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030

3131
use super::Call;
3232
use crate::{mock::*, Error};
33-
use bridge_types::{SubNetworkId, H256, U256};
33+
use bridge_types::{SubNetworkId, H256};
3434
use frame_support::{assert_noop, assert_ok};
3535
use sp_core::{
3636
bounded::BoundedVec,
@@ -300,7 +300,7 @@ fn it_fails_add_peer_already_exists() {
300300
#[test]
301301
fn it_fails_add_peer_evm_network_not_supported() {
302302
new_test_ext().execute_with(|| {
303-
let network_id = bridge_types::GenericNetworkId::EVM(U256::from(1));
303+
let network_id = bridge_types::GenericNetworkId::EVM(H256::from_low_u64_be(1));
304304
let (peers, _) = test_peers();
305305
let peers: BoundedVec<ecdsa::Public, BridgeMaxPeers> = peers.try_into().unwrap();
306306

@@ -376,7 +376,7 @@ fn it_fails_remove_peer_pending_update() {
376376
#[test]
377377
fn it_fails_remove_peer_evm_network_not_supported() {
378378
new_test_ext().execute_with(|| {
379-
let network_id = bridge_types::GenericNetworkId::EVM(U256::from(1));
379+
let network_id = bridge_types::GenericNetworkId::EVM(H256::from_low_u64_be(1));
380380
let (peers, _) = test_peers();
381381
let peers: BoundedVec<ecdsa::Public, BridgeMaxPeers> = peers.try_into().unwrap();
382382

pallets/dispatch/src/benchmarking.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -66,10 +66,10 @@ benchmarks_instance_pallet! {
6666
crate::Event::<T, I>: Into<<T as frame_system::Config>::RuntimeEvent>
6767
}
6868
dispatch_success {
69-
let message_id = MessageId::basic(GenericNetworkId::EVM(1.into()), GenericNetworkId::Sub(SubNetworkId::Mainnet), 1);
69+
let message_id = MessageId::basic(GenericNetworkId::EVM([1u8; 32].into()), GenericNetworkId::Sub(SubNetworkId::Mainnet), 1);
7070
}: {
7171
crate::Pallet::<T, I>::dispatch(
72-
1.into(),
72+
[1u8; 32].into(),
7373
message_id,
7474
Default::default(),
7575
// system.remark()
@@ -84,10 +84,10 @@ benchmarks_instance_pallet! {
8484
}
8585

8686
dispatch_decode_failed {
87-
let message_id = MessageId::basic(GenericNetworkId::EVM(1.into()), GenericNetworkId::Sub(SubNetworkId::Mainnet), 1);
87+
let message_id = MessageId::basic(GenericNetworkId::EVM([1u8; 32].into()), GenericNetworkId::Sub(SubNetworkId::Mainnet), 1);
8888
}: {
8989
crate::Pallet::<T, I>::dispatch(
90-
1.into(),
90+
[1u8; 32].into(),
9191
message_id,
9292
Default::default(),
9393
&[],

pallets/dispatch/src/tests.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ fn test_dispatch_bridge_message() {
2424

2525
System::set_block_number(1);
2626
Dispatch::dispatch(
27-
2u32.into(),
27+
H256::from_low_u64_be(2),
2828
id,
2929
Default::default(),
3030
&message,
@@ -60,7 +60,7 @@ fn test_message_decode_failed() {
6060

6161
System::set_block_number(1);
6262
Dispatch::dispatch(
63-
2u32.into(),
63+
H256::from_low_u64_be(2),
6464
id,
6565
Default::default(),
6666
&message,
@@ -95,7 +95,7 @@ fn test_message_rejected() {
9595

9696
System::set_block_number(1);
9797
Dispatch::dispatch(
98-
2u32.into(),
98+
H256::from_low_u64_be(2),
9999
id,
100100
Default::default(),
101101
&message,

pallets/liberland-bridge-provider/src/lib.rs

+18
Original file line numberDiff line numberDiff line change
@@ -370,6 +370,24 @@ impl<T: Config> bridge_types::traits::BridgeAssetLocker<T::AccountId> for Pallet
370370
}
371371
Ok(())
372372
}
373+
374+
fn refund_fee(
375+
_network_id: GenericNetworkId,
376+
_who: &T::AccountId,
377+
_asset_id: &Self::AssetId,
378+
_amount: &Self::Balance,
379+
) -> DispatchResult {
380+
Err(DispatchError::Unavailable)
381+
}
382+
383+
fn withdraw_fee(
384+
_network_id: GenericNetworkId,
385+
_who: &T::AccountId,
386+
_asset_id: &Self::AssetId,
387+
_amount: &Self::Balance,
388+
) -> DispatchResult {
389+
Err(DispatchError::Unavailable)
390+
}
373391
}
374392

375393
impl<T: Config>

pallets/multisig-verifier/src/lib.rs

+31
Original file line numberDiff line numberDiff line change
@@ -323,3 +323,34 @@ impl<T: Config> bridge_types::traits::Verifier for Pallet<T> {
323323
None
324324
}
325325
}
326+
327+
pub struct MultiEVMVerifier<T>(PhantomData<T>);
328+
329+
#[derive(Clone, RuntimeDebug, Encode, Decode, PartialEq, Eq, scale_info::TypeInfo)]
330+
pub struct MultiEVMProof {
331+
pub proof: Vec<ecdsa::Signature>,
332+
}
333+
334+
impl<T: Config> bridge_types::traits::Verifier for MultiEVMVerifier<T> {
335+
type Proof = MultiEVMProof;
336+
337+
fn verify(
338+
network_id: GenericNetworkId,
339+
commitment_hash: H256,
340+
proof: &Self::Proof,
341+
) -> DispatchResult {
342+
let this_network_id = T::ThisNetworkId::get();
343+
let approved_hash = Keccak256::hash_of(&(network_id, this_network_id, commitment_hash));
344+
Pallet::<T>::verify_signatures(network_id, approved_hash, &proof.proof)?;
345+
Ok(())
346+
}
347+
348+
fn verify_weight(proof: &Self::Proof) -> Weight {
349+
<T as Config>::WeightInfo::verifier_verify(proof.proof.len() as u32)
350+
}
351+
352+
#[cfg(feature = "runtime-benchmarks")]
353+
fn valid_proof() -> Option<Self::Proof> {
354+
None
355+
}
356+
}

pallets/types/src/channel_abi.rs

+16-16
Original file line numberDiff line numberDiff line change
@@ -35,28 +35,28 @@ use ethabi::{Function, Param, ParamType, StateMutability, Token};
3535
use frame_support::RuntimeDebug;
3636
use sp_std::prelude::*;
3737

38-
fn authorize_operator_function() -> Function {
38+
fn register_app_function() -> Function {
3939
Function {
40-
name: "authorizeDefaultOperator".into(),
40+
name: "registerApp".into(),
4141
constant: None,
4242
state_mutability: StateMutability::NonPayable,
4343
outputs: vec![],
4444
inputs: vec![Param {
45-
name: "operator".into(),
45+
name: "newApp".into(),
4646
kind: ParamType::Address,
4747
internal_type: None,
4848
}],
4949
}
5050
}
5151

52-
fn revoke_operator_function() -> Function {
52+
fn remove_app_function() -> Function {
5353
Function {
54-
name: "revokeDefaultOperator".into(),
54+
name: "removeApp".into(),
5555
constant: None,
5656
state_mutability: StateMutability::NonPayable,
5757
outputs: vec![],
5858
inputs: vec![Param {
59-
name: "operator".into(),
59+
name: "app".into(),
6060
kind: ParamType::Address,
6161
internal_type: None,
6262
}],
@@ -65,28 +65,28 @@ fn revoke_operator_function() -> Function {
6565

6666
// Message to Ethereum (ABI-encoded)
6767
#[derive(Copy, Clone, PartialEq, Eq, RuntimeDebug)]
68-
pub struct DeregisterOperatorPayload {
69-
pub operator: H160,
68+
pub struct RemoveAppPayload {
69+
pub app: H160,
7070
}
7171

72-
impl DeregisterOperatorPayload {
72+
impl RemoveAppPayload {
7373
/// ABI-encode this payload
7474
pub fn encode(&self) -> Result<Vec<u8>, ethabi::Error> {
75-
let tokens = &[Token::Address(self.operator)];
76-
revoke_operator_function().encode_input(tokens.as_ref())
75+
let tokens = &[Token::Address(self.app)];
76+
remove_app_function().encode_input(tokens.as_ref())
7777
}
7878
}
7979

8080
// Message to Ethereum (ABI-encoded)
8181
#[derive(Copy, Clone, PartialEq, Eq, RuntimeDebug)]
82-
pub struct RegisterOperatorPayload {
83-
pub operator: H160,
82+
pub struct RegisterAppPayload {
83+
pub app: H160,
8484
}
8585

86-
impl RegisterOperatorPayload {
86+
impl RegisterAppPayload {
8787
/// ABI-encode this payload
8888
pub fn encode(&self) -> Result<Vec<u8>, ethabi::Error> {
89-
let tokens = &[Token::Address(self.operator)];
90-
authorize_operator_function().encode_input(tokens.as_ref())
89+
let tokens = &[Token::Address(self.app)];
90+
register_app_function().encode_input(tokens.as_ref())
9191
}
9292
}

0 commit comments

Comments
 (0)