Skip to content

Commit ebb96f2

Browse files
authored
feat: always log metadata bytes as hex (#7566)
1 parent d6c6008 commit ebb96f2

30 files changed

Lines changed: 198 additions & 148 deletions

File tree

rust/main/agents/relayer/src/msg/metadata/aggregation.rs

Lines changed: 43 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,12 @@ use tracing::{debug, info, instrument};
88
use {hyperlane_base::cache::FunctionCallCache, tracing::warn};
99

1010
use hyperlane_core::{
11-
AggregationIsm, HyperlaneMessage, InterchainSecurityModule, ModuleType, H256, U256,
11+
AggregationIsm, HyperlaneMessage, InterchainSecurityModule, Metadata, ModuleType, H256, U256,
1212
};
1313

1414
use crate::msg::metadata::{base::MetadataBuildError, message_builder};
1515

16-
use super::{
17-
IsmCachePolicy, MessageMetadataBuildParams, MessageMetadataBuilder, Metadata, MetadataBuilder,
18-
};
16+
use super::{IsmCachePolicy, MessageMetadataBuildParams, MessageMetadataBuilder, MetadataBuilder};
1917

2018
/// Bytes used to store one member of the (start, end) range tuple
2119
/// Copied from `AggregationIsmMetadata.sol`
@@ -31,7 +29,7 @@ struct SubModuleMetadata {
3129
/// The index of the sub-module (ISM) in the aggregation ISM.
3230
index: usize,
3331
/// The metadata for the sub-module.
34-
metadata: Vec<u8>,
32+
metadata: Metadata,
3533
}
3634

3735
#[derive(Debug)]
@@ -41,7 +39,7 @@ struct IsmAndMetadata {
4139
}
4240

4341
impl IsmAndMetadata {
44-
fn new(ism: Box<dyn InterchainSecurityModule>, index: usize, metadata: Vec<u8>) -> Self {
42+
fn new(ism: Box<dyn InterchainSecurityModule>, index: usize, metadata: Metadata) -> Self {
4543
Self {
4644
ism,
4745
meta: SubModuleMetadata::new(index, metadata),
@@ -67,7 +65,7 @@ impl AggregationIsmMetadataBuilder {
6765
let mut buffer = vec![0; range_tuples_size];
6866
for SubModuleMetadata { index, metadata } in metadatas.iter_mut() {
6967
let range_start = buffer.len();
70-
buffer.append(metadata);
68+
buffer.extend_from_slice(metadata.as_ref());
7169
let range_end = buffer.len();
7270

7371
// The new tuple starts at the end of the previous ones.
@@ -269,7 +267,7 @@ impl AggregationIsmMetadataBuilder {
269267
)
270268
.await?;
271269

272-
let metadata = sub_module_and_meta.metadata.to_vec();
270+
let metadata = sub_module_and_meta.metadata;
273271

274272
// return an error if delivering with this metadata fails
275273
if sub_module_and_meta
@@ -357,7 +355,7 @@ impl MetadataBuilder for AggregationIsmMetadataBuilder {
357355
Ok(sub_module_and_meta) => Either::Left(IsmAndMetadata::new(
358356
sub_module_and_meta.ism,
359357
index,
360-
sub_module_and_meta.metadata.to_vec(),
358+
sub_module_and_meta.metadata,
361359
)),
362360
Err(_) => Either::Right((*ism_address, None)),
363361
});
@@ -381,24 +379,30 @@ mod test {
381379
let mut metadatas = vec![
382380
SubModuleMetadata::new(
383381
0,
384-
Vec::from_hex("290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563")
385-
.unwrap(),
382+
Metadata::from_hex(
383+
"290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563",
384+
)
385+
.unwrap(),
386386
),
387387
SubModuleMetadata::new(
388388
1,
389-
Vec::from_hex("510e4e770828ddbf7f7b00ab00a9f6adaf81c0dc9cc85f1f8249c256942d61d9")
390-
.unwrap(),
389+
Metadata::from_hex(
390+
"510e4e770828ddbf7f7b00ab00a9f6adaf81c0dc9cc85f1f8249c256942d61d9",
391+
)
392+
.unwrap(),
391393
),
392394
SubModuleMetadata::new(
393395
2,
394-
Vec::from_hex("356e5a2cc1eba076e650ac7473fccc37952b46bc2e419a200cec0c451dce2336")
395-
.unwrap(),
396+
Metadata::from_hex(
397+
"356e5a2cc1eba076e650ac7473fccc37952b46bc2e419a200cec0c451dce2336",
398+
)
399+
.unwrap(),
396400
),
397401
];
398-
let expected = Vec::from_hex("000000180000003800000038000000580000005800000078290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563510e4e770828ddbf7f7b00ab00a9f6adaf81c0dc9cc85f1f8249c256942d61d9356e5a2cc1eba076e650ac7473fccc37952b46bc2e419a200cec0c451dce2336").unwrap();
402+
let expected = Metadata::from_hex("000000180000003800000038000000580000005800000078290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563510e4e770828ddbf7f7b00ab00a9f6adaf81c0dc9cc85f1f8249c256942d61d9356e5a2cc1eba076e650ac7473fccc37952b46bc2e419a200cec0c451dce2336").unwrap();
399403
assert_eq!(
400404
AggregationIsmMetadataBuilder::format_metadata(&mut metadatas, 3),
401-
expected
405+
*expected
402406
);
403407
}
404408

@@ -408,23 +412,31 @@ mod test {
408412
let mut metadatas = vec![
409413
SubModuleMetadata::new(
410414
0,
411-
Vec::from_hex("290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563")
412-
.unwrap(),
415+
Metadata::from_hex(
416+
"290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563",
417+
)
418+
.unwrap(),
413419
),
414420
SubModuleMetadata::new(
415421
1,
416-
Vec::from_hex("510e4e770828ddbf7f7b00ab00a9f6adaf81c0dc9cc85f1f8249c256942d61d9")
417-
.unwrap(),
422+
Metadata::from_hex(
423+
"510e4e770828ddbf7f7b00ab00a9f6adaf81c0dc9cc85f1f8249c256942d61d9",
424+
)
425+
.unwrap(),
418426
),
419427
SubModuleMetadata::new(
420428
2,
421-
Vec::from_hex("356e5a2cc1eba076e650ac7473fccc37952b46bc2e419a200cec0c451dce2336")
422-
.unwrap(),
429+
Metadata::from_hex(
430+
"356e5a2cc1eba076e650ac7473fccc37952b46bc2e419a200cec0c451dce2336",
431+
)
432+
.unwrap(),
423433
),
424434
SubModuleMetadata::new(
425435
4,
426-
Vec::from_hex("f2e59013a0a379837166b59f871b20a8a0d101d1c355ea85d35329360e69c000")
427-
.unwrap(),
436+
Metadata::from_hex(
437+
"f2e59013a0a379837166b59f871b20a8a0d101d1c355ea85d35329360e69c000",
438+
)
439+
.unwrap(),
428440
),
429441
];
430442
let expected = Vec::from_hex("000000280000004800000048000000680000006800000088000000000000000000000088000000a8290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563510e4e770828ddbf7f7b00ab00a9f6adaf81c0dc9cc85f1f8249c256942d61d9356e5a2cc1eba076e650ac7473fccc37952b46bc2e419a200cec0c451dce2336f2e59013a0a379837166b59f871b20a8a0d101d1c355ea85d35329360e69c000").unwrap();
@@ -436,7 +448,7 @@ mod test {
436448

437449
#[test]
438450
fn test_format_empty_metadata_works_correctly() {
439-
let mut metadatas = vec![SubModuleMetadata::new(0, Vec::from_hex("").unwrap())];
451+
let mut metadatas = vec![SubModuleMetadata::new(0, Metadata::from_hex("").unwrap())];
440452
let expected = Vec::from_hex("0000000800000008").unwrap();
441453
assert_eq!(
442454
AggregationIsmMetadataBuilder::format_metadata(&mut metadatas, 1),
@@ -448,23 +460,23 @@ mod test {
448460
fn test_n_cheapest_metas_works() {
449461
let metas_and_gas = vec![
450462
(
451-
SubModuleMetadata::new(3, vec![]),
463+
SubModuleMetadata::new(3, Metadata::new(vec![])),
452464
U256::from_dec_str("3").unwrap(),
453465
),
454466
(
455-
SubModuleMetadata::new(2, vec![]),
467+
SubModuleMetadata::new(2, Metadata::new(vec![])),
456468
U256::from_dec_str("2").unwrap(),
457469
),
458470
(
459-
SubModuleMetadata::new(1, vec![]),
471+
SubModuleMetadata::new(1, Metadata::new(vec![])),
460472
U256::from_dec_str("1").unwrap(),
461473
),
462474
];
463475
assert_eq!(
464476
AggregationIsmMetadataBuilder::n_cheapest_metas(metas_and_gas, 2),
465477
vec![
466-
SubModuleMetadata::new(1, vec![]),
467-
SubModuleMetadata::new(2, vec![])
478+
SubModuleMetadata::new(1, Metadata::new(vec![])),
479+
SubModuleMetadata::new(2, Metadata::new(vec![]))
468480
]
469481
)
470482
}

rust/main/agents/relayer/src/msg/metadata/base.rs

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ use serde::{Deserialize, Deserializer};
1515
use tokio::sync::{Mutex, RwLock};
1616

1717
use hyperlane_core::{
18-
HyperlaneDomain, HyperlaneMessage, InterchainSecurityModule, Mailbox, ModuleType,
18+
HyperlaneDomain, HyperlaneMessage, InterchainSecurityModule, Mailbox, Metadata, ModuleType,
1919
ReorgEventResponse, H256,
2020
};
2121

@@ -55,15 +55,6 @@ pub enum MetadataBuildRefused {
5555
Reorg(ReorgEventResponse),
5656
}
5757

58-
#[derive(Clone, Debug, new)]
59-
pub struct Metadata(Vec<u8>);
60-
61-
impl Metadata {
62-
pub fn to_vec(&self) -> Vec<u8> {
63-
self.0.clone()
64-
}
65-
}
66-
6758
#[async_trait::async_trait]
6859
pub trait MetadataBuilder: Send + Sync {
6960
/// Given a message, build it's ISM metadata

rust/main/agents/relayer/src/msg/metadata/ccip_read/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ use sha3::{digest::Update, Digest, Keccak256};
1515
use tracing::{info, instrument, warn};
1616

1717
use hyperlane_core::{
18-
utils::bytes_to_hex, CcipReadIsm, HyperlaneMessage, HyperlaneSignerExt, ModuleType,
18+
utils::bytes_to_hex, CcipReadIsm, HyperlaneMessage, HyperlaneSignerExt, Metadata, ModuleType,
1919
RawHyperlaneMessage, Signable, H160, H256,
2020
};
2121
use hyperlane_ethereum::{OffchainLookup, Signers};
@@ -25,7 +25,7 @@ use crate::msg::metadata::base_builder::IsmBuildMetricsParams;
2525
use super::{
2626
base::{MessageMetadataBuildParams, MetadataBuildError},
2727
message_builder::MessageMetadataBuilder,
28-
Metadata, MetadataBuilder,
28+
MetadataBuilder,
2929
};
3030

3131
mod cache_types;

rust/main/agents/relayer/src/msg/metadata/message_builder.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use std::{fmt::Debug, sync::Arc};
55

66
use async_trait::async_trait;
77
use eyre::Result;
8-
use hyperlane_core::{HyperlaneMessage, InterchainSecurityModule, ModuleType, H256};
8+
use hyperlane_core::{HyperlaneMessage, InterchainSecurityModule, Metadata, ModuleType, H256};
99
use tracing::instrument;
1010
use {
1111
hyperlane_base::cache::{FunctionCallCache, NoParams},
@@ -24,7 +24,7 @@ use super::{
2424
multisig::{MerkleRootMultisigMetadataBuilder, MessageIdMultisigMetadataBuilder},
2525
null_metadata::NullMetadataBuilder,
2626
routing::RoutingIsmMetadataBuilder,
27-
Metadata, MetadataBuilder,
27+
MetadataBuilder,
2828
};
2929

3030
/// Builds metadata for a message.

rust/main/agents/relayer/src/msg/metadata/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ mod routing;
99

1010
pub(crate) use base::{
1111
AppContextClassifier, DefaultIsmCache, IsmAwareAppContextClassifier, IsmCacheConfig,
12-
IsmCachePolicy, IsmCachePolicyClassifier, MessageMetadataBuildParams, Metadata,
13-
MetadataBuildError, MetadataBuilder,
12+
IsmCachePolicy, IsmCachePolicyClassifier, MessageMetadataBuildParams, MetadataBuildError,
13+
MetadataBuilder,
1414
};
1515
#[allow(unused_imports)]
1616
pub(crate) use base_builder::{BaseMetadataBuilder, BuildsBaseMetadata, IsmBuildMetricsParams};

rust/main/agents/relayer/src/msg/metadata/multisig/base.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,16 @@ use hyperlane_base::cache::FunctionCallCache;
1010
use hyperlane_base::settings::CheckpointSyncerBuildError;
1111
use hyperlane_base::MultisigCheckpointSyncer;
1212
use hyperlane_core::accumulator::merkle::Proof;
13-
use hyperlane_core::{HyperlaneMessage, ModuleType, MultisigIsm, MultisigSignedCheckpoint, H256};
13+
use hyperlane_core::{
14+
HyperlaneMessage, Metadata, ModuleType, MultisigIsm, MultisigSignedCheckpoint, H256,
15+
};
1416
use strum::Display;
1517
use tracing::{debug, info, warn};
1618

1719
use crate::msg::metadata::base::{MetadataBuildError, MetadataBuildRefused};
1820
use crate::msg::metadata::base_builder::IsmBuildMetricsParams;
1921
use crate::msg::metadata::message_builder::MessageMetadataBuilder;
20-
use crate::msg::metadata::{IsmCachePolicy, MessageMetadataBuildParams, Metadata, MetadataBuilder};
22+
use crate::msg::metadata::{IsmCachePolicy, MessageMetadataBuildParams, MetadataBuilder};
2123

2224
#[derive(new, AsRef, Deref, Debug, PartialEq)]
2325
pub struct MultisigMetadata {

rust/main/agents/relayer/src/msg/metadata/null_metadata.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
use async_trait::async_trait;
22
use derive_new::new;
33

4-
use hyperlane_core::{HyperlaneMessage, H256};
4+
use hyperlane_core::{HyperlaneMessage, Metadata, H256};
55

6-
use super::{MessageMetadataBuildParams, Metadata, MetadataBuildError, MetadataBuilder};
6+
use super::{MessageMetadataBuildParams, MetadataBuildError, MetadataBuilder};
77

88
#[derive(Clone, Debug, new)]
99
pub struct NullMetadataBuilder {}

rust/main/agents/relayer/src/msg/metadata/routing.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@ use derive_more::Deref;
33
use derive_new::new;
44
use hyperlane_base::cache::FunctionCallCache;
55

6-
use hyperlane_core::{HyperlaneMessage, ModuleType, H256};
6+
use hyperlane_core::{HyperlaneMessage, Metadata, ModuleType, H256};
77
use tracing::instrument;
88

99
use super::{
10-
base::MessageMetadataBuildParams, IsmCachePolicy, MessageMetadataBuilder, Metadata,
11-
MetadataBuildError, MetadataBuilder,
10+
base::MessageMetadataBuildParams, IsmCachePolicy, MessageMetadataBuilder, MetadataBuildError,
11+
MetadataBuilder,
1212
};
1313

1414
#[derive(Clone, Debug, new, Deref)]

rust/main/agents/relayer/src/msg/op_batch.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ mod tests {
194194
};
195195
use hyperlane_core::{
196196
config::OpSubmissionConfig, Decode, HyperlaneMessage, KnownHyperlaneDomain,
197-
MessageSubmissionData, ReorgPeriod, SubmitterType, H160, U256,
197+
MessageSubmissionData, Metadata, ReorgPeriod, SubmitterType, H160, U256,
198198
};
199199
use hyperlane_ethereum::{ConnectionConf, RpcConnectionConf};
200200
use hyperlane_test::mocks::{MockMailboxContract, MockValidatorAnnounceContract};
@@ -422,7 +422,7 @@ mod tests {
422422
let mut pending_messages = vec![];
423423
// Message found here https://basescan.org/tx/0x65345812a1f7df6236292d52d50418a090c84e2c901912bede6cadb9810a9882#eventlog
424424
let metadata =
425-
"0x000000100000001000000010000001680000000000000000000000100000015800000000000000000000000019dc38aeae620380430c200a6e990d5af5480117dbd3d5e656de9dcf604fcc90b52a3b97d9f3573b4a0733e824f1358e515698cf00139eaa5452e030aa937f6b14162a44ec3327f6832bbf16e4b0d6df452524af1c1a04e875b4ce7ac0da92aa08838a89f2a126eef23f6b6a08b6cdbe9e9e804b321088b91b034f9466eed2da1dcc36cb220b887b15f3e111a179142c27e4a0b6d6b7a291e22577d6296d82b7c3f29e8989ec1161d853aba0982b2db28b9a9917226c2c27111c41c99e6a84e7717740f901528062385e659b4330e7227593a334be532d27bcf24f3f13bf4fc1a860e96f8d6937984ea83ef61c8ea30d48cc903f6ff725406a4d1ce73f46064b3403ea4c720b770f4389d7259b275f085c6a98cef9a04880a249b42c382ba34a63031debbfb5b9b232ffd9ee45ff63a7249e83c7e9720f9e978a431b".as_bytes().to_vec();
425+
Metadata::new("0x000000100000001000000010000001680000000000000000000000100000015800000000000000000000000019dc38aeae620380430c200a6e990d5af5480117dbd3d5e656de9dcf604fcc90b52a3b97d9f3573b4a0733e824f1358e515698cf00139eaa5452e030aa937f6b14162a44ec3327f6832bbf16e4b0d6df452524af1c1a04e875b4ce7ac0da92aa08838a89f2a126eef23f6b6a08b6cdbe9e9e804b321088b91b034f9466eed2da1dcc36cb220b887b15f3e111a179142c27e4a0b6d6b7a291e22577d6296d82b7c3f29e8989ec1161d853aba0982b2db28b9a9917226c2c27111c41c99e6a84e7717740f901528062385e659b4330e7227593a334be532d27bcf24f3f13bf4fc1a860e96f8d6937984ea83ef61c8ea30d48cc903f6ff725406a4d1ce73f46064b3403ea4c720b770f4389d7259b275f085c6a98cef9a04880a249b42c382ba34a63031debbfb5b9b232ffd9ee45ff63a7249e83c7e9720f9e978a431b".as_bytes().to_vec());
426426

427427
for b in 0..batch_size {
428428
let mut pending_message = PendingMessage::new(

rust/main/agents/relayer/src/msg/pending_message.rs

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ use hyperlane_base::{
2121
use hyperlane_core::{
2222
gas_used_by_operation, BatchItem, ChainCommunicationError, ChainResult, ConfirmReason,
2323
FixedPointNumber, HyperlaneChain, HyperlaneDomain, HyperlaneMessage, Mailbox,
24-
MessageSubmissionData, PendingOperation, PendingOperationResult, PendingOperationStatus,
25-
ReprepareReason, TryBatchAs, TxCostEstimate, TxOutcome, H256, U256,
24+
MessageSubmissionData, Metadata, PendingOperation, PendingOperationResult,
25+
PendingOperationStatus, ReprepareReason, TryBatchAs, TxCostEstimate, TxOutcome, H256, U256,
2626
};
2727
use hyperlane_operation_verifier::ApplicationOperationVerifier;
2828

@@ -33,7 +33,7 @@ use crate::{
3333

3434
use super::{
3535
gas_payment::{GasPaymentEnforcer, GasPolicyStatus},
36-
metadata::{BuildsBaseMetadata, MessageMetadataBuilder, Metadata, MetadataBuilder},
36+
metadata::{BuildsBaseMetadata, MessageMetadataBuilder, MetadataBuilder},
3737
};
3838

3939
/// a default of 66 is picked, so messages are retried for 2 weeks (period confirmed by @nambrot) before being skipped.
@@ -111,7 +111,7 @@ pub struct PendingMessage {
111111
submission_outcome: Option<TxOutcome>,
112112
#[new(default)]
113113
#[serde(skip_serializing)]
114-
metadata: Option<Vec<u8>>,
114+
metadata: Option<Metadata>,
115115
#[new(default)]
116116
#[serde(skip_serializing)]
117117
metric: Option<Arc<IntGauge>>,
@@ -297,16 +297,15 @@ impl PendingOperation for PendingMessage {
297297
None => None,
298298
};
299299

300-
let metadata_bytes = match self.metadata.as_ref() {
300+
let metadata = match self.metadata.as_ref() {
301301
Some(metadata) => {
302302
tracing::debug!(USE_CACHE_METADATA_LOG);
303303
metadata.clone()
304304
}
305305
_ => match self.build_metadata().await {
306306
Ok(metadata) => {
307-
let metadata_bytes = metadata.to_vec();
308-
self.metadata = Some(metadata_bytes.clone());
309-
metadata_bytes
307+
self.metadata = Some(metadata.clone());
308+
metadata
310309
}
311310
Err(err) => {
312311
return err;
@@ -324,7 +323,7 @@ impl PendingOperation for PendingMessage {
324323
None => match self
325324
.ctx
326325
.destination_mailbox
327-
.process_estimate_costs(&self.message, &metadata_bytes)
326+
.process_estimate_costs(&self.message, &metadata)
328327
.await
329328
{
330329
Ok(cost) => cost,
@@ -365,7 +364,7 @@ impl PendingOperation for PendingMessage {
365364
}
366365

367366
self.submission_data = Some(Box::new(MessageSubmissionData {
368-
metadata: metadata_bytes,
367+
metadata,
369368
gas_limit,
370369
}));
371370
PendingOperationResult::Success

0 commit comments

Comments
 (0)