Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
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
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 @@ -578,6 +578,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
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
63 changes: 60 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 @@ -363,14 +366,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 @@ -381,6 +388,8 @@ impl ActorAggregation {
newest: transition,
messages,
value_claims,
events,
eth_events,
exit_inheritor,
}
}
Expand All @@ -390,6 +399,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 @@ -418,6 +429,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 @@ -705,6 +718,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 @@ -774,6 +789,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 @@ -784,6 +805,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 @@ -794,6 +817,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 @@ -806,6 +831,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 @@ -824,6 +851,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 @@ -834,6 +863,8 @@ mod tests {
value_to_receive_negative_sign: false,
value_claims: vec![],
messages: vec![],
events: vec![],
eth_events: vec![],
},
]);
}
Expand All @@ -853,6 +884,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 @@ -863,6 +896,8 @@ mod tests {
value_to_receive_negative_sign: false,
value_claims: vec![],
messages: vec![],
events: vec![],
eth_events: vec![],
},
];

Expand Down Expand Up @@ -893,6 +928,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 @@ -903,6 +940,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 @@ -913,6 +952,8 @@ mod tests {
value_to_receive_negative_sign: false,
value_claims: vec![],
messages: vec![],
events: vec![],
eth_events: vec![],
},
]);

Expand All @@ -939,6 +980,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 @@ -949,6 +992,8 @@ mod tests {
value_to_receive_negative_sign: false,
value_claims: vec![],
messages: vec![],
events: vec![],
eth_events: vec![],
},
];

Expand Down Expand Up @@ -976,6 +1021,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 @@ -986,6 +1033,8 @@ mod tests {
value_to_receive_negative_sign: false,
value_claims: vec![],
messages: vec![],
events: vec![],
eth_events: vec![],
},
];

Expand All @@ -1012,6 +1061,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 @@ -1022,6 +1073,8 @@ mod tests {
value_to_receive_negative_sign: true,
value_claims: vec![],
messages: vec![],
events: vec![],
eth_events: vec![],
},
]);

Expand All @@ -1044,6 +1097,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 @@ -1054,6 +1109,8 @@ mod tests {
value_to_receive_negative_sign: true,
value_claims: vec![],
messages: vec![],
events: vec![],
eth_events: vec![],
},
]);

Expand Down
2 changes: 1 addition & 1 deletion ethexe/contracts/.vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,5 @@
"editor.defaultFormatter": "JuanBlanco.solidity"
},
"solidity.formatter": "forge",
"solidity.compileUsingRemoteVersion": "v0.8.33"
"solidity.compileUsingRemoteVersion": "v0.8.34"
}
8 changes: 8 additions & 0 deletions ethexe/contracts/src/IMirror.sol
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,14 @@ interface IMirror {
*/
event ValueClaimed(bytes32 claimedId, uint128 value);

/**
* @dev Emitted when the program emits a Gear event, which is a custom event defined by the program.
* @param payload The payload of the Gear event.
* NOTE: It's event for USERS:
* it informs about Gear event emitted by the program.
*/
event GearEvent(bytes payload);

/**
* @dev Emitted when the program fails to transfer locked value to inheritor after exit.
* @param inheritor The address of the inheritor.
Expand Down
Loading
Loading