Skip to content

Commit 251c00c

Browse files
authored
Merge pull request #5403 from mpapierski/backporting-vm2-fixes
Backporting fixes from feat-vm2
2 parents 0a5d075 + 4b66e5e commit 251c00c

23 files changed

Lines changed: 348 additions & 317 deletions

File tree

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ lint-smart-contracts:
131131

132132
.PHONY: audit-rs
133133
audit-rs:
134-
$(CARGO) audit --ignore RUSTSEC-2024-0437 --ignore RUSTSEC-2025-0022 --ignore RUSTSEC-2025-0055 --ignore RUSTSEC-2026-0001 --ignore RUSTSEC-2026-0007 --ignore RUSTSEC-2026-0049 --ignore RUSTSEC-2026-0068 --ignore RUSTSEC-2026-0067
134+
$(CARGO) audit --ignore RUSTSEC-2024-0437 --ignore RUSTSEC-2025-0022 --ignore RUSTSEC-2025-0055 --ignore RUSTSEC-2026-0001 --ignore RUSTSEC-2026-0007 --ignore RUSTSEC-2026-0049 --ignore RUSTSEC-2026-0068 --ignore RUSTSEC-2026-0067 --ignore RUSTSEC-2026-0098 --ignore RUSTSEC-2026-0099
135135

136136
.PHONY: audit
137137
audit: audit-rs

execution_engine_testing/test_support/src/chainspec_config.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@ impl ChainspecConfig {
131131
locked_funds_period,
132132
unbonding_delay,
133133
round_seigniorage_rate,
134+
enable_addressable_entity,
134135
minimum_delegation_rate,
135136
..
136137
} = core_config;
@@ -146,6 +147,7 @@ impl ChainspecConfig {
146147
.with_unbonding_delay(*unbonding_delay)
147148
.with_genesis_timestamp_millis(DEFAULT_GENESIS_TIMESTAMP_MILLIS)
148149
.with_storage_costs(*storage_costs)
150+
.with_enable_addressable_entity(*enable_addressable_entity)
149151
.with_minimum_delegation_rate(*minimum_delegation_rate)
150152
.build();
151153

execution_engine_testing/tests/src/test/regression/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ mod regression_20220224;
6262
mod regression_20220303;
6363
mod regression_20220727;
6464
mod regression_20240105;
65+
mod regression_20250812;
6566
mod slow_input;
6667
pub(crate) mod test_utils;
6768
mod transforms_must_be_ordered;
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
use casper_engine_test_support::{
2+
ChainspecConfig, ExecuteRequestBuilder, LmdbWasmTestBuilder, DEFAULT_ACCOUNTS,
3+
DEFAULT_ACCOUNT_ADDR, DEFAULT_PROTOCOL_VERSION,
4+
};
5+
use casper_types::RuntimeArgs;
6+
7+
const DO_NOTHING_CONTRACT: &str = "do_nothing_stored.wasm";
8+
9+
#[ignore]
10+
#[test]
11+
fn should_correctly_install_and_add_contract_version_with_ae_turned_on() {
12+
let chainspec = ChainspecConfig::default().with_enable_addressable_entity(true);
13+
let genesis_request = chainspec
14+
.create_genesis_request(DEFAULT_ACCOUNTS.to_vec(), DEFAULT_PROTOCOL_VERSION)
15+
.expect("must create genesis request");
16+
17+
let mut builder = LmdbWasmTestBuilder::new_temporary_with_config(chainspec);
18+
builder.run_genesis(genesis_request).commit();
19+
20+
let install_request_1 = ExecuteRequestBuilder::standard(
21+
*DEFAULT_ACCOUNT_ADDR,
22+
DO_NOTHING_CONTRACT,
23+
RuntimeArgs::default(),
24+
)
25+
.build();
26+
27+
let install_request_2 = ExecuteRequestBuilder::standard(
28+
*DEFAULT_ACCOUNT_ADDR,
29+
DO_NOTHING_CONTRACT,
30+
RuntimeArgs::default(),
31+
)
32+
.build();
33+
34+
builder.exec(install_request_1).expect_success().commit();
35+
builder.exec(install_request_2).expect_success().commit();
36+
}

node/src/components/consensus/consensus_protocol.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ pub(crate) enum ProtocolOutcome<C: Context> {
126126
CreatedGossipMessage(SerializedMessage),
127127
CreatedTargetedMessage(SerializedMessage, NodeId),
128128
CreatedMessageToRandomPeer(SerializedMessage),
129-
CreatedRequestToRandomPeer(SerializedMessage),
129+
CreatedRequestToRandomValidator(SerializedMessage),
130130
ScheduleTimer(Timestamp, TimerId),
131131
QueueAction(ActionId),
132132
/// Request transactions for a new block, providing the necessary context.

node/src/components/consensus/era_supervisor.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1039,11 +1039,13 @@ impl EraSupervisor {
10391039
}
10401040
.ignore()
10411041
}
1042-
ProtocolOutcome::CreatedRequestToRandomPeer(payload) => {
1042+
ProtocolOutcome::CreatedRequestToRandomValidator(payload) => {
10431043
let message = ConsensusRequestMessage { era_id, payload };
10441044

10451045
async move {
1046-
let peers = effect_builder.get_fully_connected_peers(1).await;
1046+
let peers = effect_builder
1047+
.get_fully_connected_validators(1, era_id)
1048+
.await;
10471049
if let Some(to) = peers.into_iter().next() {
10481050
effect_builder.enqueue_message(to, message.into()).await;
10491051
}

node/src/components/consensus/protocols/zug.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -454,7 +454,7 @@ impl<C: Context + 'static> Zug<C> {
454454
.choose(rng)
455455
.unwrap_or(self.current_round);
456456
let payload = self.create_sync_request(rng, first_validator_idx, round_id);
457-
let mut outcomes = vec![ProtocolOutcome::CreatedRequestToRandomPeer(
457+
let mut outcomes = vec![ProtocolOutcome::CreatedRequestToRandomValidator(
458458
SerializedMessage::from_message(&payload),
459459
)];
460460
// Periodically sync the state with a random peer.
@@ -1515,7 +1515,7 @@ impl<C: Context + 'static> Zug<C> {
15151515
| ProtocolOutcome::CreatedGossipMessage(_)
15161516
| ProtocolOutcome::CreatedTargetedMessage(_, _)
15171517
| ProtocolOutcome::CreatedMessageToRandomPeer(_)
1518-
| ProtocolOutcome::CreatedRequestToRandomPeer(_)
1518+
| ProtocolOutcome::CreatedRequestToRandomValidator(_)
15191519
| ProtocolOutcome::ScheduleTimer(_, _)
15201520
| ProtocolOutcome::QueueAction(_)
15211521
| ProtocolOutcome::CreateNewBlock(_, _)

node/src/components/consensus/protocols/zug/des_testing.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ impl From<ProtocolOutcome<TestContext>> for ZugMessage {
127127
ProtocolOutcome::CreatedMessageToRandomPeer(msg) => {
128128
ZugMessage::MessageToRandomPeer(msg)
129129
}
130-
ProtocolOutcome::CreatedRequestToRandomPeer(request) => {
130+
ProtocolOutcome::CreatedRequestToRandomValidator(request) => {
131131
ZugMessage::RequestToRandomPeer(request)
132132
}
133133
ProtocolOutcome::ScheduleTimer(timestamp, timer_id) => {

node/src/components/consensus/protocols/zug/tests.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -196,15 +196,16 @@ fn remove_proposal(
196196
}
197197
}
198198

199-
/// Removes all `CreatedRequestToRandomPeer`s from `outcomes` and returns the deserialized messages.
199+
/// Removes all `CreatedRequestToRandomValidator`s from `outcomes` and returns the deserialized
200+
/// messages.
200201
fn remove_requests_to_random(
201202
outcomes: &mut ProtocolOutcomes<ClContext>,
202203
) -> Vec<SyncRequest<ClContext>> {
203204
let mut result = Vec::new();
204205
let expected_instance_id = ClContext::hash(INSTANCE_ID_DATA);
205206
outcomes.retain(|outcome| {
206207
let msg: SyncRequest<ClContext> = match outcome {
207-
ProtocolOutcome::CreatedRequestToRandomPeer(msg) => msg.deserialize_expect(),
208+
ProtocolOutcome::CreatedRequestToRandomValidator(msg) => msg.deserialize_expect(),
208209
_ => return true,
209210
};
210211
assert_eq!(msg.instance_id, expected_instance_id);
@@ -892,7 +893,7 @@ fn zug_handles_sync_request() {
892893
for _ in 0..2 {
893894
let mut outcomes = zug2.handle_timer(timestamp, timestamp, TIMER_ID_SYNC_PEER, &mut rng);
894895
let msg = loop {
895-
if let ProtocolOutcome::CreatedRequestToRandomPeer(payload) =
896+
if let ProtocolOutcome::CreatedRequestToRandomValidator(payload) =
896897
outcomes.pop().expect("expected request to random peer")
897898
{
898899
break payload;

node/src/components/network.rs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1015,6 +1015,22 @@ where
10151015
.choose_multiple(rng, count)
10161016
}
10171017

1018+
pub(crate) fn fully_connected_validators_random(
1019+
&self,
1020+
rng: &mut NodeRng,
1021+
count: usize,
1022+
era_id: EraId,
1023+
) -> Vec<NodeId> {
1024+
let is_validator_in_era =
1025+
|era: EraId, peer_id: &NodeId| self.outgoing_limiter.is_validator_in_era(era, peer_id);
1026+
self.connection_symmetries
1027+
.iter()
1028+
.filter(|(_, sym)| matches!(sym, ConnectionSymmetry::Symmetric { .. }))
1029+
.map(|(node_id, _)| *node_id)
1030+
.filter(|node_id| is_validator_in_era(era_id, node_id))
1031+
.choose_multiple(rng, count)
1032+
}
1033+
10181034
pub(crate) fn has_sufficient_fully_connected_peers(&self) -> bool {
10191035
self.connection_symmetries
10201036
.iter()
@@ -1222,6 +1238,13 @@ where
12221238
NetworkInfoRequest::FullyConnectedPeers { count, responder } => responder
12231239
.respond(self.fully_connected_peers_random(rng, count))
12241240
.ignore(),
1241+
NetworkInfoRequest::FullyConnectedValidators {
1242+
count,
1243+
era_id,
1244+
responder,
1245+
} => responder
1246+
.respond(self.fully_connected_validators_random(rng, count, era_id))
1247+
.ignore(),
12251248
NetworkInfoRequest::Insight { responder } => responder
12261249
.respond(NetworkInsights::collect_from_component(self))
12271250
.ignore(),

0 commit comments

Comments
 (0)