Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ jobs:

- name: "Check: Mirror.sol events are updated"
run: |
set +H && sed -i '/\/\/ forgefmt: disable-start/,/\/\/ forgefmt: disable-end/{//!d}' src/Mirror.sol && GENERATED_CONDITION=$(grep -Po " event\s+\K[^(]+" src/IMirror.sol | xargs -I{} echo " topic1 != {}.selector &&" | sed '$ s/ &&$//') && awk -v cond="$GENERATED_CONDITION" '/\/\/ forgefmt: disable-start/{print; print " if (!("; print cond; print " )) {"; print " return false;"; print " }"; next}1' src/Mirror.sol > src/Mirror.tmp && mv src/Mirror.tmp src/Mirror.sol
set +H && sed -i '/\/\/ forgefmt: disable-start/,/\/\/ forgefmt: disable-end/{//!d}' src/Mirror.sol && GENERATED_CONDITION=$(grep -Po " event\s+\K[^(]+" src/IMirror.sol | xargs -I{} echo " topic1 != {}.selector &&" | sed '$ s/ &&$//') && awk -v cond="$GENERATED_CONDITION" '/\/\/ forgefmt: disable-start/{print; print " if (!("; print cond; print " )) {"; print " return;"; print " }"; next}1' src/Mirror.sol > src/Mirror.tmp && mv src/Mirror.tmp src/Mirror.sol
git diff --exit-code src/Mirror.sol || (echo "Mirror.sol has been modified. Please commit the changes." && exit 1)
working-directory: ethexe/contracts

Expand Down
10 changes: 10 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -592,6 +592,7 @@ demo-reply-callback = { path = "sdk/examples/reply-callback" }
demo-reservation-manager = { path = "sdk/examples/reservation-manager" }
demo-reserve-gas = { path = "sdk/examples/reserve-gas", default-features = false }
demo-rwlock = { path = "sdk/examples/rwlock" }
demo-sails-events = { path = "sdk/examples/sails-events" }
demo-send-from-reservation = { path = "sdk/examples/send-from-reservation" }
demo-signal-entry = { path = "sdk/examples/signal-entry", default-features = false }
demo-staking-broker = { path = "sdk/examples/staking-broker" }
Expand Down
2 changes: 1 addition & 1 deletion ethexe/common/src/db.rs
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,7 @@ mod tests {
#[test]
fn ensure_types_unchanged() {
const EXPECTED_TYPE_INFO_HASH: &str =
"918c461a80e6ecd2fa36e7742d7c342c99a0b6a72a79b29ebb66499ee8a238f5";
"1554344a8033892b1d0eb51a8bda2e4d5a2bee71d5cb5e1cc7faa1c0abed40b5";

let types = [
meta_type::<BlockMeta>(),
Expand Down
10 changes: 9 additions & 1 deletion ethexe/common/src/events/mirror.rs
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,12 @@ pub struct ValueClaimingRequestedEvent {
pub source: ActorId,
}

#[derive(Clone, Debug, PartialEq, Eq, Decode, Encode, TypeInfo, Hash)]
#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))]
pub struct GearEvent {
pub payload: Vec<u8>,
}

#[derive(Clone, Debug, PartialEq, Eq, Decode, Encode, TypeInfo, Hash)]
#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))]
pub struct TransferLockedValueToInheritorFailedEvent {
Expand Down Expand Up @@ -125,6 +131,7 @@ pub enum Event {
TransferLockedValueToInheritorFailed(TransferLockedValueToInheritorFailedEvent),
ReplyTransferFailed(ReplyTransferFailedEvent),
ValueClaimFailed(ValueClaimFailedEvent),
Gear(GearEvent),
}

impl Event {
Expand All @@ -147,7 +154,8 @@ impl Event {
| Self::ReplyCallFailed(_)
| Self::TransferLockedValueToInheritorFailed(_)
| Self::ReplyTransferFailed(_)
| Self::ValueClaimFailed(_) => return None,
| Self::ValueClaimFailed(_)
| Self::Gear(_) => return None,
})
}
}
Expand Down
6 changes: 6 additions & 0 deletions ethexe/common/src/gear.rs
Original file line number Diff line number Diff line change
Expand Up @@ -373,6 +373,8 @@ pub struct StateTransition {
pub value_to_receive_negative_sign: bool,
pub value_claims: Vec<ValueClaim>,
pub messages: Vec<Message>,
pub events: Vec<Vec<u8>>,
pub eth_events: Vec<Vec<u8>>,
}

impl ToDigest for StateTransition {
Expand All @@ -387,6 +389,8 @@ impl ToDigest for StateTransition {
value_to_receive_negative_sign,
value_claims,
messages,
events,
eth_events,
} = self;

hasher.update(actor_id.to_address_lossy());
Expand All @@ -397,6 +401,8 @@ impl ToDigest for StateTransition {
hasher.update([*value_to_receive_negative_sign as u8]);
hasher.update(value_claims.to_digest());
hasher.update(messages.to_digest());
hasher.update(events.to_digest());
hasher.update(eth_events.to_digest());
}
}

Expand Down
2 changes: 2 additions & 0 deletions ethexe/common/src/mock.rs
Original file line number Diff line number Diff line change
Expand Up @@ -390,6 +390,8 @@ impl Arbitrary for StateTransition {
reply_details: None,
call: false,
}],
events: vec![b"Event 1".to_vec(), b"Event 2".to_vec()],
eth_events: vec![b"Eth Event 1".to_vec(), b"Eth Event 2".to_vec()],
},
)
.boxed()
Expand Down
4 changes: 4 additions & 0 deletions ethexe/consensus/src/validator/batch/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,8 @@ fn nonempty_transition(seed: u8) -> StateTransition {
value_to_receive_negative_sign: false,
value_claims: vec![],
messages: vec![],
events: vec![],
eth_events: vec![],
}
}

Expand Down Expand Up @@ -496,6 +498,8 @@ async fn squash_orders_negative_value_transitions_first() {
value_to_receive_negative_sign,
value_claims: vec![],
messages: vec![],
events: vec![],
eth_events: vec![],
};

let mb1_neg = transition(actor_negative, H256::from([1; 32]), 70, true);
Expand Down
65 changes: 62 additions & 3 deletions ethexe/consensus/src/validator/batch/utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,10 @@ use ethexe_common::{
},
};
use gprimitives::{ActorId, H256};
use std::collections::{HashMap, hash_map::Entry};
use std::{
collections::{HashMap, hash_map::Entry},
mem,
};

/// MBs in `(last_committed_mb, mb_hash]`, chronological order. Strict: errors
/// if the walk doesn't reach the anchor or any MB along the way is not computed.
Expand Down Expand Up @@ -386,14 +389,18 @@ struct ActorAggregation {
newest: StateTransition,
messages: Vec<Message>,
value_claims: Vec<ValueClaim>,
events: Vec<Vec<u8>>,
eth_events: Vec<Vec<u8>>,
value_to_receive: SignedMagnitude,
exit_inheritor: Option<ActorId>,
}

impl ActorAggregation {
fn new(mut transition: StateTransition) -> Self {
let messages = std::mem::take(&mut transition.messages);
let value_claims = std::mem::take(&mut transition.value_claims);
let messages = mem::take(&mut transition.messages);
let value_claims = mem::take(&mut transition.value_claims);
let events = mem::take(&mut transition.events);
let eth_events = mem::take(&mut transition.eth_events);
let exit_inheritor = transition.exited.then_some(transition.inheritor);

Self {
Expand All @@ -404,6 +411,8 @@ impl ActorAggregation {
newest: transition,
messages,
value_claims,
events,
eth_events,
exit_inheritor,
}
}
Expand All @@ -413,6 +422,8 @@ impl ActorAggregation {
debug_assert_eq!(self.newest.actor_id, actor_id);
self.messages.append(&mut transition.messages);
self.value_claims.append(&mut transition.value_claims);
self.events.append(&mut transition.events);
self.eth_events.append(&mut transition.eth_events);
self.value_to_receive.add_assign(
SignedMagnitude::new(
transition.value_to_receive,
Expand Down Expand Up @@ -441,6 +452,8 @@ impl ActorAggregation {
value_to_receive_negative_sign,
value_claims: self.value_claims,
messages: self.messages,
events: self.events,
eth_events: self.eth_events,
}
}
}
Expand Down Expand Up @@ -729,6 +742,8 @@ mod tests {
value_to_receive_negative_sign: false,
value_claims: vec![],
messages: vec![],
events: vec![],
eth_events: vec![],
}],
head: block_hash,
last_advanced_eth_block: H256::zero(),
Expand Down Expand Up @@ -798,6 +813,12 @@ mod tests {
call: false,
};

let e1 = "Event 1".as_bytes().to_vec();
let e2 = "Event 2".as_bytes().to_vec();

let eth_e1 = "Eth Event 1".as_bytes().to_vec();
let eth_e2 = "Eth Event 2".as_bytes().to_vec();

let transitions = vec![
StateTransition {
actor_id: actor,
Expand All @@ -808,6 +829,8 @@ mod tests {
value_to_receive_negative_sign: false,
value_claims: vec![],
messages: vec![m1.clone()],
events: vec![e1.clone()],
eth_events: vec![eth_e1.clone()],
},
StateTransition {
actor_id: actor,
Expand All @@ -818,6 +841,8 @@ mod tests {
value_to_receive_negative_sign: false,
value_claims: vec![],
messages: vec![m2.clone()],
events: vec![e2.clone()],
eth_events: vec![eth_e2.clone()],
},
];

Expand All @@ -830,6 +855,8 @@ mod tests {
assert!(st.exited);
assert_eq!(st.inheritor, inheritor_new);
assert_eq!(st.messages, vec![m1, m2]);
assert_eq!(st.events, vec![e1, e2]);
assert_eq!(st.eth_events, vec![eth_e1, eth_e2]);
assert_eq!(st.value_to_receive, 3);
}

Expand All @@ -848,6 +875,8 @@ mod tests {
value_to_receive_negative_sign: false,
value_claims: vec![],
messages: vec![],
events: vec![],
eth_events: vec![],
},
StateTransition {
actor_id: actor,
Expand All @@ -858,6 +887,8 @@ mod tests {
value_to_receive_negative_sign: false,
value_claims: vec![],
messages: vec![],
events: vec![],
eth_events: vec![],
},
]);
}
Expand All @@ -877,6 +908,8 @@ mod tests {
value_to_receive_negative_sign: false,
value_claims: vec![],
messages: vec![],
events: vec![],
eth_events: vec![],
},
StateTransition {
actor_id: actor_b,
Expand All @@ -887,6 +920,8 @@ mod tests {
value_to_receive_negative_sign: false,
value_claims: vec![],
messages: vec![],
events: vec![],
eth_events: vec![],
},
];

Expand Down Expand Up @@ -917,6 +952,8 @@ mod tests {
value_to_receive_negative_sign: false,
value_claims: vec![],
messages: vec![],
events: vec![],
eth_events: vec![],
},
StateTransition {
actor_id: actor_b,
Expand All @@ -927,6 +964,8 @@ mod tests {
value_to_receive_negative_sign: true,
value_claims: vec![],
messages: vec![],
events: vec![],
eth_events: vec![],
},
StateTransition {
actor_id: actor_a,
Expand All @@ -937,6 +976,8 @@ mod tests {
value_to_receive_negative_sign: false,
value_claims: vec![],
messages: vec![],
events: vec![],
eth_events: vec![],
},
]);

Expand All @@ -963,6 +1004,8 @@ mod tests {
value_to_receive_negative_sign: false,
value_claims: vec![],
messages: vec![],
events: vec![],
eth_events: vec![],
},
StateTransition {
actor_id: actor,
Expand All @@ -973,6 +1016,8 @@ mod tests {
value_to_receive_negative_sign: false,
value_claims: vec![],
messages: vec![],
events: vec![],
eth_events: vec![],
},
];

Expand Down Expand Up @@ -1000,6 +1045,8 @@ mod tests {
value_to_receive_negative_sign: false,
value_claims: vec![],
messages: vec![],
events: vec![],
eth_events: vec![],
},
StateTransition {
actor_id: actor,
Expand All @@ -1010,6 +1057,8 @@ mod tests {
value_to_receive_negative_sign: false,
value_claims: vec![],
messages: vec![],
events: vec![],
eth_events: vec![],
},
];

Expand All @@ -1036,6 +1085,8 @@ mod tests {
value_to_receive_negative_sign: false,
value_claims: vec![],
messages: vec![],
events: vec![],
eth_events: vec![],
},
StateTransition {
actor_id: actor,
Expand All @@ -1046,6 +1097,8 @@ mod tests {
value_to_receive_negative_sign: true,
value_claims: vec![],
messages: vec![],
events: vec![],
eth_events: vec![],
},
]);

Expand All @@ -1068,6 +1121,8 @@ mod tests {
value_to_receive_negative_sign: false,
value_claims: vec![],
messages: vec![],
events: vec![],
eth_events: vec![],
},
StateTransition {
actor_id: actor,
Expand All @@ -1078,6 +1133,8 @@ mod tests {
value_to_receive_negative_sign: true,
value_claims: vec![],
messages: vec![],
events: vec![],
eth_events: vec![],
},
]);

Expand Down Expand Up @@ -1143,6 +1200,8 @@ mod tests {
value_to_receive_negative_sign: false,
value_claims: vec![],
messages: vec![msg_a.clone(), msg_b.clone(), msg_c.clone()],
events: vec![],
eth_events: vec![],
};

// MB 1: has committed ids for (a) and (c) only.
Expand Down
Loading
Loading