Skip to content

Commit c015932

Browse files
committed
Merge branch 'tiago/update-ethbridge-rs' (#1789)
* origin/tiago/update-ethbridge-rs: Changelog for #1789 Test pending transfers and events have the same ABI encoding Fix compilation errors to support new `ethbridge-rs` Update ethbridge-rs to v0.22.0
2 parents 85a4fca + 5678ee7 commit c015932

File tree

17 files changed

+521
-342
lines changed

17 files changed

+521
-342
lines changed
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
- Update ethbridge-rs to v0.22.0
2+
([\#1789](https://github.com/anoma/namada/pull/1789))

Cargo.lock

Lines changed: 12 additions & 12 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -67,12 +67,12 @@ directories = "4.0.1"
6767
ed25519-consensus = "1.2.0"
6868
escargot = "0.5.7"
6969
ethabi = "18.0.0"
70-
ethbridge-bridge-contract = {git = "https://github.com/heliaxdev/ethbridge-rs", tag = "v0.21.0"}
71-
ethbridge-bridge-events = {git = "https://github.com/heliaxdev/ethbridge-rs", tag = "v0.21.0"}
72-
ethbridge-events = {git = "https://github.com/heliaxdev/ethbridge-rs", tag = "v0.21.0"}
73-
ethbridge-governance-contract = {git = "https://github.com/heliaxdev/ethbridge-rs", tag = "v0.21.0"}
74-
ethbridge-governance-events = {git = "https://github.com/heliaxdev/ethbridge-rs", tag = "v0.21.0"}
75-
ethbridge-structs = { git = "https://github.com/heliaxdev/ethbridge-rs", tag = "v0.21.0" }
70+
ethbridge-bridge-contract = {git = "https://github.com/heliaxdev/ethbridge-rs", tag = "v0.22.0"}
71+
ethbridge-bridge-events = {git = "https://github.com/heliaxdev/ethbridge-rs", tag = "v0.22.0"}
72+
ethbridge-events = {git = "https://github.com/heliaxdev/ethbridge-rs", tag = "v0.22.0"}
73+
ethbridge-governance-contract = {git = "https://github.com/heliaxdev/ethbridge-rs", tag = "v0.22.0"}
74+
ethbridge-governance-events = {git = "https://github.com/heliaxdev/ethbridge-rs", tag = "v0.22.0"}
75+
ethbridge-structs = { git = "https://github.com/heliaxdev/ethbridge-rs", tag = "v0.22.0" }
7676
ethers = "2.0.0"
7777
expectrl = "0.7.0"
7878
eyre = "0.6.5"

apps/src/lib/node/ledger/ethereum_oracle/events.rs

Lines changed: 41 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ pub mod eth_events {
1414
use namada::eth_bridge::ethers::contract::EthEvent;
1515
use namada::types::address::Address;
1616
use namada::types::ethereum_events::{
17-
EthAddress, EthereumEvent, TransferToEthereum, TransferToEthereumKind,
18-
TransferToNamada, Uint,
17+
EthAddress, EthereumEvent, TransferToEthereum, TransferToNamada, Uint,
1918
};
19+
use namada::types::hash::Hash;
2020
use namada::types::keccak::KeccakHash;
2121
use namada::types::token::Amount;
2222
use num256::Uint256;
@@ -153,32 +153,33 @@ pub mod eth_events {
153153
};
154154
}
155155

156-
/// Trait to add parsing methods to foreign types.
157-
trait Parse: Sized {
158-
parse_method! { parse_eth_transfer_kind -> TransferToEthereumKind }
159-
parse_method! { parse_eth_address -> EthAddress }
160-
parse_method! { parse_address -> Address }
161-
parse_method! { parse_amount -> Amount }
162-
parse_method! { parse_u32 -> u32 }
163-
parse_method! { parse_uint256 -> Uint }
164-
parse_method! { parse_bool -> bool }
165-
parse_method! { parse_string -> String }
166-
parse_method! { parse_keccak -> KeccakHash }
167-
parse_method! { parse_amount_array -> Vec<Amount> }
168-
parse_method! { parse_eth_address_array -> Vec<EthAddress> }
169-
parse_method! { parse_address_array -> Vec<Address> }
170-
parse_method! { parse_string_array -> Vec<String> }
171-
parse_method! { parse_transfer_to_namada_array -> Vec<TransferToNamada> }
172-
parse_method! { parse_transfer_to_namada -> TransferToNamada }
173-
parse_method! { parse_transfer_to_eth_array -> Vec<TransferToEthereum> }
174-
parse_method! { parse_transfer_to_eth -> TransferToEthereum }
156+
macro_rules! trait_parse_def {
157+
($($name:ident -> $type:ty;)*) => {
158+
/// Trait to add parsing methods to foreign types.
159+
trait Parse: Sized {
160+
$( parse_method!($name -> $type); )*
161+
}
162+
}
175163
}
176164

177-
impl Parse for u8 {
178-
fn parse_eth_transfer_kind(self) -> Result<TransferToEthereumKind> {
179-
self.try_into()
180-
.map_err(|err| Error::Decode(format!("{:?}", err)))
181-
}
165+
trait_parse_def! {
166+
parse_address -> Address;
167+
parse_address_array -> Vec<Address>;
168+
parse_amount -> Amount;
169+
parse_amount_array -> Vec<Amount>;
170+
parse_bool -> bool;
171+
parse_eth_address -> EthAddress;
172+
parse_eth_address_array -> Vec<EthAddress>;
173+
parse_hash -> Hash;
174+
parse_keccak -> KeccakHash;
175+
parse_string -> String;
176+
parse_string_array -> Vec<String>;
177+
parse_transfer_to_eth -> TransferToEthereum;
178+
parse_transfer_to_eth_array -> Vec<TransferToEthereum>;
179+
parse_transfer_to_namada -> TransferToNamada;
180+
parse_transfer_to_namada_array -> Vec<TransferToNamada>;
181+
parse_u32 -> u32;
182+
parse_uint256 -> Uint;
182183
}
183184

184185
impl Parse for ethabi::Address {
@@ -200,7 +201,13 @@ pub mod eth_events {
200201

201202
impl Parse for ethabi::Uint {
202203
fn parse_amount(self) -> Result<Amount> {
203-
Ok(Amount::from(self.as_u64()))
204+
let uint = {
205+
use namada::core::types::uint::Uint as NamadaUint;
206+
let mut num_buf = [0; 32];
207+
self.to_little_endian(&mut num_buf);
208+
NamadaUint::from_little_endian(&num_buf)
209+
};
210+
Amount::from_uint(uint, 0).map_err(|e| Error::Decode(e.to_string()))
204211
}
205212

206213
fn parse_u32(self) -> Result<u32> {
@@ -222,6 +229,10 @@ pub mod eth_events {
222229
fn parse_keccak(self) -> Result<KeccakHash> {
223230
Ok(KeccakHash(self))
224231
}
232+
233+
fn parse_hash(self) -> Result<Hash> {
234+
Ok(Hash(self))
235+
}
225236
}
226237

227238
impl Parse for Vec<ethabi::Uint> {
@@ -279,21 +290,15 @@ pub mod eth_events {
279290

280291
impl Parse for ethereum_structs::Erc20Transfer {
281292
fn parse_transfer_to_eth(self) -> Result<TransferToEthereum> {
282-
let kind = self.kind.parse_eth_transfer_kind()?;
283293
let asset = self.from.parse_eth_address()?;
284294
let receiver = self.to.parse_eth_address()?;
285-
let sender = self.sender.parse_address()?;
286295
let amount = self.amount.parse_amount()?;
287-
let gas_payer = self.fee_from.parse_address()?;
288-
let gas_amount = self.fee.parse_amount()?;
296+
let checksum = self.namada_data_digest.parse_hash()?;
289297
Ok(TransferToEthereum {
290-
kind,
291298
asset,
292299
amount,
293-
sender,
294300
receiver,
295-
gas_amount,
296-
gas_payer,
301+
checksum,
297302
})
298303
}
299304
}
@@ -509,13 +514,10 @@ pub mod eth_events {
509514
let eth_transfers = TransferToErcFilter {
510515
transfers: vec![
511516
ethereum_structs::Erc20Transfer {
512-
kind: TransferToEthereumKind::Erc20 as u8,
513517
from: H160([1; 20]),
514518
to: H160([2; 20]),
515-
sender: address.clone(),
516519
amount: 0u64.into(),
517-
fee_from: address.clone(),
518-
fee: 0u64.into(),
520+
namada_data_digest: [0; 32],
519521
};
520522
2
521523
],

apps/src/lib/node/ledger/ethereum_oracle/mod.rs

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -569,9 +569,8 @@ mod test_oracle {
569569
use namada::eth_bridge::ethers::types::H160;
570570
use namada::eth_bridge::structs::Erc20Transfer;
571571
use namada::types::address::testing::gen_established_address;
572-
use namada::types::ethereum_events::{
573-
EthAddress, TransferToEthereum, TransferToEthereumKind,
574-
};
572+
use namada::types::ethereum_events::{EthAddress, TransferToEthereum};
573+
use namada::types::hash::Hash;
575574
use tokio::sync::oneshot::channel;
576575
use tokio::time::timeout;
577576

@@ -828,13 +827,10 @@ mod test_oracle {
828827
let gas_payer = gen_established_address();
829828
let second_event = TransferToErcFilter {
830829
transfers: vec![Erc20Transfer {
831-
kind: TransferToEthereumKind::Erc20 as u8,
832830
amount: 0.into(),
833831
from: H160([0; 20]),
834-
sender: gas_payer.to_string(),
835832
to: H160([1; 20]),
836-
fee: 0.into(),
837-
fee_from: gas_payer.to_string(),
833+
namada_data_digest: [0; 32],
838834
}],
839835
valid_map: vec![true],
840836
relayer_address: gas_payer.to_string(),
@@ -898,13 +894,10 @@ mod test_oracle {
898894
assert_eq!(
899895
transfer,
900896
TransferToEthereum {
901-
kind: TransferToEthereumKind::Erc20,
902897
amount: Default::default(),
903898
asset: EthAddress([0; 20]),
904-
sender: gas_payer.clone(),
905899
receiver: EthAddress([1; 20]),
906-
gas_amount: Default::default(),
907-
gas_payer: gas_payer.clone(),
900+
checksum: Hash::default(),
908901
}
909902
);
910903
} else {

apps/src/lib/node/ledger/shell/finalize_block.rs

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1099,9 +1099,7 @@ mod test_finalize_block {
10991099
};
11001100
use namada::proto::{Code, Data, Section, Signature};
11011101
use namada::types::dec::POS_DECIMAL_PRECISION;
1102-
use namada::types::ethereum_events::{
1103-
EthAddress, TransferToEthereum, TransferToEthereumKind, Uint as ethUint,
1104-
};
1102+
use namada::types::ethereum_events::{EthAddress, Uint as ethUint};
11051103
use namada::types::hash::Hash;
11061104
use namada::types::keccak::KeccakHash;
11071105
use namada::types::key::tm_consensus_key_raw_hash;
@@ -1784,17 +1782,24 @@ mod test_finalize_block {
17841782
}
17851783
// write transfer to storage
17861784
let transfer = {
1787-
use namada::core::types::eth_bridge_pool::PendingTransfer;
1788-
let transfer = TransferToEthereum {
1789-
kind: TransferToEthereumKind::Erc20,
1790-
amount: 10u64.into(),
1791-
asset,
1792-
receiver,
1793-
gas_amount: 10u64.into(),
1794-
sender: bertha.clone(),
1795-
gas_payer: bertha.clone(),
1785+
use namada::core::types::eth_bridge_pool::{
1786+
GasFee, PendingTransfer, TransferToEthereum,
1787+
TransferToEthereumKind,
1788+
};
1789+
let pending = PendingTransfer {
1790+
transfer: TransferToEthereum {
1791+
kind: TransferToEthereumKind::Erc20,
1792+
amount: 10u64.into(),
1793+
asset,
1794+
recipient: receiver,
1795+
sender: bertha.clone(),
1796+
},
1797+
gas_fee: GasFee {
1798+
amount: 10u64.into(),
1799+
payer: bertha.clone(),
1800+
},
17961801
};
1797-
let pending = PendingTransfer::from(&transfer);
1802+
let transfer = (&pending).into();
17981803
shell
17991804
.wl_storage
18001805
.write(&bridge_pool::get_pending_key(&pending), pending)

0 commit comments

Comments
 (0)