Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: wiring for bandwidth scheduler #12234

Merged
merged 46 commits into from
Oct 24, 2024
Merged
Show file tree
Hide file tree
Changes from 33 commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
e782412
Add ProtocolFeature::BandwidthScheduler
jancionear Oct 15, 2024
3e22208
Add BandwidthRequest and BandwidthRequests structs
jancionear Oct 15, 2024
5614b06
Add bandwidth requests to chunk header
jancionear Oct 15, 2024
a217022
Add bandwidth requests to ApplyResult
jancionear Oct 15, 2024
dc156ac
Add banwidth requests to ApplyChunkResult
jancionear Oct 15, 2024
24dd104
Add bandwidth requests to ChunkExtra
jancionear Oct 15, 2024
c9edcb9
Add bandwidth requests to ApplyState
jancionear Oct 15, 2024
66103e5
Add bandwidth scheduler state
jancionear Oct 15, 2024
47e97a7
Mock bandwidth scheduler implementation
jancionear Oct 15, 2024
40db96e
Propagate previous bandwidth requests for missing chunks
jancionear Oct 15, 2024
db96527
Fix test_empty_apply
jancionear Oct 15, 2024
db19186
Fix test_apply_chunk
jancionear Oct 15, 2024
dc1cd5f
Fix test_flat_storage_iter
jancionear Oct 15, 2024
d7bfc1e
Fix test_archival_save_trie_changes
jancionear Oct 15, 2024
7c4af68
Fix test_dump_epoch_missing_chunk_in_last_block
jancionear Oct 15, 2024
4336cae
Fix test_sync_and_call_cached_contract
jancionear Oct 15, 2024
3e63448
Add a sanity check for scheduler state
jancionear Oct 16, 2024
caed220
Fix python formatting
jancionear Oct 16, 2024
1a27050
Merge branch 'master' into bandsim-wires
jancionear Oct 16, 2024
54ff731
Don't allow ShardChunkHeaderInner::V3 when BandwidthScheduler feature…
jancionear Oct 17, 2024
dfb11b6
Validate that bandwidth requests in chunk extra match the chunk header
jancionear Oct 17, 2024
272d486
Merge branch 'master' into bandsim-wires
jancionear Oct 17, 2024
f7ec382
Don't unwrap all StateRecords in test_resharding_v3
jancionear Oct 17, 2024
ccec51a
Merge branch 'master' into bandsim-wires
jancionear Oct 17, 2024
a0ea12d
fix(test_loop) - drop endorsements instead of partial chunks to simul…
jancionear Oct 17, 2024
ca1ebd6
Add a testloop protocol upgrade test
jancionear Oct 17, 2024
e6bd44e
Test protocol upgrade to version with bandwidth scheduler
jancionear Oct 17, 2024
bb3f370
Revert "Test protocol upgrade to version with bandwidth scheduler"
jancionear Oct 18, 2024
2af440c
Revert "Add a testloop protocol upgrade test"
jancionear Oct 18, 2024
aeea61f
Revert "fix(test_loop) - drop endorsements instead of partial chunks …
jancionear Oct 18, 2024
b4fca01
Merge branch 'master' into bandsim-wires
jancionear Oct 18, 2024
a539c3a
Test protocol upgrade to version with bandwidth scheduler
jancionear Oct 17, 2024
8ad224b
Merge branch 'master' into bandsim-wires
jancionear Oct 22, 2024
c4fde1a
Box structs that are too large
jancionear Oct 22, 2024
d8068ee
Merge branch 'master' into bandsim-wires
jancionear Oct 23, 2024
42eae3b
Add a commit about BandwidthSchedulerStateUpdate
jancionear Oct 23, 2024
15336ba
check that boxing a struct doesn't change serialization format
jancionear Oct 23, 2024
5d921fa
Fix python serialization, forgot a square bracket
jancionear Oct 24, 2024
02d8ccb
Don't check state root equality in two more tests.
jancionear Oct 24, 2024
6241590
Merge branch 'master' into bandsim-wires
jancionear Oct 24, 2024
8b456a2
Fix - use MaybeNew enum when iterating over previous chunks
jancionear Oct 24, 2024
aca486c
Revert "check that boxing a struct doesn't change serialization format"
jancionear Oct 24, 2024
fa002ab
Revert "Box structs that are too large"
jancionear Oct 24, 2024
5a251c9
Fix python serialization schema
jancionear Oct 24, 2024
86cec08
Reapply "Box structs that are too large"
jancionear Oct 24, 2024
ed32376
Fix python deserialization again
jancionear Oct 24, 2024
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
5 changes: 5 additions & 0 deletions chain/chain-primitives/src/error.rs
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,9 @@ pub enum Error {
/// Invalid Congestion Info
#[error("Invalid Congestion Info: {0}")]
InvalidCongestionInfo(String),
/// Invalid bandwidth requests
#[error("Invalid bandwidth requests - chunk extra doesn't match chunk header: {0}")]
InvalidBandwidthRequests(String),
/// Invalid shard id
#[error("Shard id {0} does not exist")]
InvalidShardId(ShardId),
Expand Down Expand Up @@ -315,6 +318,7 @@ impl Error {
| Error::InvalidGasUsed
| Error::InvalidBalanceBurnt
| Error::InvalidCongestionInfo(_)
| Error::InvalidBandwidthRequests(_)
| Error::InvalidShardId(_)
| Error::InvalidStateRequest(_)
| Error::InvalidRandomnessBeaconOutput
Expand Down Expand Up @@ -393,6 +397,7 @@ impl Error {
Error::InvalidGasUsed => "invalid_gas_used",
Error::InvalidBalanceBurnt => "invalid_balance_burnt",
Error::InvalidCongestionInfo(_) => "invalid_congestion_info",
Error::InvalidBandwidthRequests(_) => "invalid_bandwidth_requests",
Error::InvalidShardId(_) => "invalid_shard_id",
Error::InvalidStateRequest(_) => "invalid_state_request",
Error::InvalidRandomnessBeaconOutput => "invalid_randomness_beacon_output",
Expand Down
9 changes: 8 additions & 1 deletion chain/chain/src/chain.rs
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ use near_chain_configs::{MutableConfigValue, MutableValidatorSigner};
use near_chain_primitives::error::{BlockKnownError, Error, LogTransientStorageError};
use near_epoch_manager::shard_tracker::ShardTracker;
use near_epoch_manager::EpochManagerAdapter;
use near_primitives::bandwidth_scheduler::BandwidthRequests;
use near_primitives::block::{genesis_chunks, Block, BlockValidityError, Tip};
use near_primitives::block_header::BlockHeader;
use near_primitives::challenge::{
Expand Down Expand Up @@ -621,6 +622,7 @@ impl Chain {
gas_limit,
0,
congestion_info,
BandwidthRequests::default_for_protocol_version(genesis_protocol_version),
)
}

Expand Down Expand Up @@ -3209,7 +3211,12 @@ impl Chain {
};
let congestion_info = block.block_congestion_info();

Ok(ApplyChunkBlockContext::from_header(block_header, gas_price, congestion_info))
Ok(ApplyChunkBlockContext::from_header(
block_header,
gas_price,
congestion_info,
block.block_bandwidth_requests(),
))
}

fn block_catch_up_postprocess(
Expand Down
23 changes: 23 additions & 0 deletions chain/chain/src/chain_update.rs
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ impl<'a> ChainUpdate<'a> {
should_save_state_transition_data: bool,
) -> Result<(), Error> {
let _span = tracing::debug_span!(target: "chain", "apply_chunk_postprocessing", height=block.header().height()).entered();
Self::bandwidth_scheduler_state_sanity_check(&apply_results);
for result in apply_results {
self.process_apply_chunk_result(block, result, should_save_state_transition_data)?;
}
Expand Down Expand Up @@ -123,6 +124,7 @@ impl<'a> ChainUpdate<'a> {
gas_limit,
apply_result.total_balance_burnt,
apply_result.congestion_info,
apply_result.bandwidth_requests,
),
);

Expand Down Expand Up @@ -193,6 +195,24 @@ impl<'a> ChainUpdate<'a> {
Ok(())
}

/// Extra sanity check for bandwdith scheduler - the scheduler state should be the same on all shards.
fn bandwidth_scheduler_state_sanity_check(apply_results: &[ShardUpdateResult]) {
let state_hashes: Vec<CryptoHash> = apply_results
.iter()
.map(|r| match r {
ShardUpdateResult::NewChunk(new_res) => {
new_res.apply_result.bandwidth_scheduler_state_hash
}
ShardUpdateResult::OldChunk(old_res) => {
old_res.apply_result.bandwidth_scheduler_state_hash
}
})
.collect();
for hash in &state_hashes {
assert_eq!(*hash, state_hashes[0]);
}
}

/// This is the last step of process_block_single, where we take the preprocess block info
/// apply chunk results and store the results on chain.
#[tracing::instrument(
Expand Down Expand Up @@ -527,6 +547,7 @@ impl<'a> ChainUpdate<'a> {
challenges_result: block_header.challenges_result().clone(),
random_seed: *block_header.random_value(),
congestion_info: block.block_congestion_info(),
bandwidth_requests: block.block_bandwidth_requests(),
},
&receipts,
chunk.transactions(),
Expand Down Expand Up @@ -562,6 +583,7 @@ impl<'a> ChainUpdate<'a> {
gas_limit,
apply_result.total_balance_burnt,
apply_result.congestion_info,
apply_result.bandwidth_requests,
);
self.chain_store_update.save_chunk_extra(block_header.hash(), &shard_uid, chunk_extra);

Expand Down Expand Up @@ -633,6 +655,7 @@ impl<'a> ChainUpdate<'a> {
&block_header,
prev_block_header.next_gas_price(),
block.block_congestion_info(),
block.block_bandwidth_requests(),
),
&[],
&[],
Expand Down
4 changes: 4 additions & 0 deletions chain/chain/src/runtime/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -269,6 +269,7 @@ impl NightshadeRuntime {
challenges_result,
random_seed,
congestion_info,
bandwidth_requests,
} = block;
let ApplyChunkShardContext {
shard_id,
Expand Down Expand Up @@ -390,6 +391,7 @@ impl NightshadeRuntime {
is_first_block_with_chunk_of_version,
},
congestion_info,
bandwidth_requests,
};

let instant = Instant::now();
Expand Down Expand Up @@ -467,6 +469,8 @@ impl NightshadeRuntime {
applied_receipts_hash: hash(&borsh::to_vec(receipts).unwrap()),
congestion_info: apply_result.congestion_info,
contract_accesses: apply_result.contract_accesses,
bandwidth_requests: apply_result.bandwidth_requests,
bandwidth_scheduler_state_hash: apply_result.bandwidth_scheduler_state_hash,
};

Ok(result)
Expand Down
3 changes: 3 additions & 0 deletions chain/chain/src/runtime/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ use near_pool::{
};
use near_primitives::action::FunctionCallAction;
use near_primitives::apply::ApplyChunkReason;
use near_primitives::bandwidth_scheduler::BlockBandwidthRequests;
use near_primitives::congestion_info::{BlockCongestionInfo, ExtendedCongestionInfo};
use near_primitives::epoch_block_info::BlockInfo;
use near_primitives::receipt::{ActionReceipt, ReceiptV1};
Expand Down Expand Up @@ -214,6 +215,7 @@ impl TestEnv {
) -> ApplyChunkResult {
// TODO(congestion_control): pass down prev block info and read congestion info from there
// For now, just use default.
// TODO(bandwidth_scheduler) - pass bandwidth requests from prev_block
let prev_block_hash = self.head.last_block_hash;
let epoch_id = self.epoch_manager.get_epoch_id_from_prev_block(&prev_block_hash).unwrap();
let shard_layout = self.epoch_manager.get_shard_layout(&epoch_id).unwrap();
Expand Down Expand Up @@ -256,6 +258,7 @@ impl TestEnv {
challenges_result,
random_seed: CryptoHash::default(),
congestion_info,
bandwidth_requests: BlockBandwidthRequests::empty(),
},
receipts,
transactions,
Expand Down
1 change: 1 addition & 0 deletions chain/chain/src/stateless_validation/chunk_validation.rs
Original file line number Diff line number Diff line change
Expand Up @@ -587,6 +587,7 @@ pub fn apply_result_to_chunk_extra(
chunk.gas_limit(),
apply_result.total_balance_burnt,
apply_result.congestion_info,
apply_result.bandwidth_requests,
)
}

Expand Down
3 changes: 3 additions & 0 deletions chain/chain/src/test_utils/kv_runtime.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ use near_parameters::RuntimeConfig;
use near_pool::types::TransactionGroupIterator;
use near_primitives::account::{AccessKey, Account};
use near_primitives::apply::ApplyChunkReason;
use near_primitives::bandwidth_scheduler::BandwidthRequests;
use near_primitives::block::Tip;
use near_primitives::block_header::{Approval, ApprovalInner};
use near_primitives::congestion_info::{CongestionInfo, ExtendedCongestionInfo};
Expand Down Expand Up @@ -1382,6 +1383,8 @@ impl RuntimeAdapter for KeyValueRuntime {
congestion_info: Self::get_congestion_info(PROTOCOL_VERSION),
// Since all actions are transfer actions, there is no contracts accessed.
contract_accesses: vec![],
bandwidth_requests: BandwidthRequests::default_for_protocol_version(PROTOCOL_VERSION),
bandwidth_scheduler_state_hash: CryptoHash::default(),
})
}

Expand Down
4 changes: 2 additions & 2 deletions chain/chain/src/tests/simple_chain.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ fn build_chain() {
// cargo insta test --accept -p near-chain --features nightly -- tests::simple_chain::build_chain
let hash = chain.head().unwrap().last_block_hash;
if cfg!(feature = "nightly") {
insta::assert_snapshot!(hash, @"Hc3bWEd7ikHf9BAe2SknvH2jAAakEtBRU1FBu6Udocm3");
insta::assert_snapshot!(hash, @"2V6auEJDpFWUadSMYwAUg68tn9KmoMmHw2JnHizYicwc");
} else {
insta::assert_snapshot!(hash, @"GHZFAFiMdGzAfnWTcS9u9wqFvxMrgFpyEr6Use7jk2Lo");
}
Expand All @@ -50,7 +50,7 @@ fn build_chain() {

let hash = chain.head().unwrap().last_block_hash;
if cfg!(feature = "nightly") {
insta::assert_snapshot!(hash, @"39R6bDFXkPfwdYs4crV3RyCde85ecycqP5DBwdtwyjcJ");
insta::assert_snapshot!(hash, @"8yW4usbwYcRDKmKmDkHTFpzggDZBGu6avKLu1iTf4Lr6");
} else {
insta::assert_snapshot!(hash, @"3Pdm44L71Bk8EokPHF1pxakHojsriNadBdZZSpcoDv9q");
}
Expand Down
10 changes: 10 additions & 0 deletions chain/chain/src/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ pub use near_epoch_manager::EpochManagerAdapter;
use near_parameters::RuntimeConfig;
use near_pool::types::TransactionGroupIterator;
use near_primitives::apply::ApplyChunkReason;
use near_primitives::bandwidth_scheduler::BandwidthRequests;
use near_primitives::bandwidth_scheduler::BlockBandwidthRequests;
pub use near_primitives::block::{Block, BlockHeader, Tip};
use near_primitives::challenge::{ChallengesResult, PartialState};
use near_primitives::checked_feature;
Expand Down Expand Up @@ -104,6 +106,11 @@ pub struct ApplyChunkResult {
pub congestion_info: Option<CongestionInfo>,
/// Hashes of the contracts accessed while applying the chunk.
pub contract_accesses: Vec<CodeHash>,
/// Requests for bandwidth to send receipts to other shards.
/// Will be None for protocol versions that don't have the BandwidthScheduler feature enabled.
pub bandwidth_requests: Option<BandwidthRequests>,
/// Used only for a sanity check.
pub bandwidth_scheduler_state_hash: CryptoHash,
Comment on lines +110 to +114
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

mini nit: Maybe put it next to congestion control? They are very similar.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

}

impl ApplyChunkResult {
Expand Down Expand Up @@ -298,13 +305,15 @@ pub struct ApplyChunkBlockContext {
pub challenges_result: ChallengesResult,
pub random_seed: CryptoHash,
pub congestion_info: BlockCongestionInfo,
pub bandwidth_requests: BlockBandwidthRequests,
}

impl ApplyChunkBlockContext {
pub fn from_header(
header: &BlockHeader,
gas_price: Balance,
congestion_info: BlockCongestionInfo,
bandwidth_requests: BlockBandwidthRequests,
) -> Self {
Self {
height: header.height(),
Expand All @@ -315,6 +324,7 @@ impl ApplyChunkBlockContext {
challenges_result: header.challenges_result().clone(),
random_seed: *header.random_value(),
congestion_info,
bandwidth_requests,
}
}
}
Expand Down
40 changes: 40 additions & 0 deletions chain/chain/src/validate.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ use borsh::BorshDeserialize;

use near_crypto::PublicKey;
use near_epoch_manager::EpochManagerAdapter;
use near_primitives::bandwidth_scheduler::BandwidthRequests;
use near_primitives::block::{Block, BlockHeader};
use near_primitives::challenge::{
BlockDoubleSign, Challenge, ChallengeBody, ChunkProofs, ChunkState, MaybeEncodedShardChunk,
Expand Down Expand Up @@ -178,6 +179,10 @@ pub fn validate_chunk_with_chunk_extra_and_receipts_root(
}

validate_congestion_info(&prev_chunk_extra.congestion_info(), &chunk_header.congestion_info())?;
validate_bandwidth_requests(
prev_chunk_extra.bandwidth_requests(),
chunk_header.bandwidth_requests(),
)?;

Ok(())
}
Expand Down Expand Up @@ -211,6 +216,41 @@ fn validate_congestion_info(
}
}

fn validate_bandwidth_requests(
extra_bandwidth_requests: Option<&BandwidthRequests>,
header_bandwidth_requests: Option<&BandwidthRequests>,
) -> Result<(), Error> {
if extra_bandwidth_requests.is_none()
&& header_bandwidth_requests == Some(&BandwidthRequests::empty())
{
// This corner case happens for the first chunk that has the BandwidthScheduler feature enabled.
// The previous chunk was applied with a protocol version which doesn't have bandwidth scheduler
// enabled and because of that the bandwidth requests in ChunkExtra are None.
// The header was produced in the new protocol version, and the newer version of header always
// has some bandwidth requests, it's not an `Option`. Because of that the header requests are `Some(BandwidthRequests::empty())`.
return Ok(());
}
Comment on lines +223 to +232
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you do it the same way as it worked for congestion info? Basically they always have to match. I don't remember the exact reasons but it was way cleaner way to handle protocol upgrade this way.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmm I'm not sure if it's better, the way congestion control does it causes the protocol to accept two different chunk header versions for one protocol version :/
I don't know, I can try it in a follow up PR. I'll merge this one as is, there's enough mess here already. Let's discuss it in a different PR.


if extra_bandwidth_requests != header_bandwidth_requests {
fn requests_len(requests_opt: Option<&BandwidthRequests>) -> usize {
match requests_opt {
Some(BandwidthRequests::V1(requests_v1)) => requests_v1.requests.len(),
None => 0,
}
}
let error_info_str = format!(
"chunk extra: (is_some: {}, len: {}) chunk header: (is_some: {}, len: {})",
extra_bandwidth_requests.is_some(),
requests_len(extra_bandwidth_requests),
header_bandwidth_requests.is_some(),
requests_len(header_bandwidth_requests)
);
return Err(Error::InvalidBandwidthRequests(error_info_str));
}

Ok(())
}

/// Validates a double sign challenge.
/// Only valid if ancestors of both blocks are present in the chain.
fn validate_double_sign(
Expand Down
3 changes: 3 additions & 0 deletions chain/chunks/src/shards_manager_actor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,7 @@ use near_network::types::{
};
use near_network::types::{NetworkRequests, PeerManagerMessageRequest};
use near_performance_metrics_macros::perf;
use near_primitives::bandwidth_scheduler::BandwidthRequests;
use near_primitives::block::Tip;
use near_primitives::congestion_info::CongestionInfo;
use near_primitives::errors::EpochError;
Expand Down Expand Up @@ -1994,6 +1995,7 @@ impl ShardsManagerActor {
prev_outgoing_receipts_root: CryptoHash,
tx_root: CryptoHash,
congestion_info: Option<CongestionInfo>,
bandwidth_requests: Option<BandwidthRequests>,
signer: &ValidatorSigner,
rs: &ReedSolomon,
protocol_version: ProtocolVersion,
Expand All @@ -2014,6 +2016,7 @@ impl ShardsManagerActor {
prev_outgoing_receipts,
prev_outgoing_receipts_root,
congestion_info,
bandwidth_requests,
signer,
protocol_version,
)
Expand Down
2 changes: 2 additions & 0 deletions chain/chunks/src/test_utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ use near_epoch_manager::test_utils::setup_epoch_manager_with_block_and_chunk_pro
use near_epoch_manager::EpochManagerHandle;
use near_network::shards_manager::ShardsManagerRequestFromNetwork;
use near_network::test_utils::MockPeerManagerAdapter;
use near_primitives::bandwidth_scheduler::BandwidthRequests;
use near_primitives::congestion_info::CongestionInfo;
use near_primitives::hash::CryptoHash;
use near_primitives::merkle::{self, MerklePath};
Expand Down Expand Up @@ -153,6 +154,7 @@ impl ChunkTestFixture {
receipts_root,
MerkleHash::default(),
congestion_info,
BandwidthRequests::default_for_protocol_version(PROTOCOL_VERSION),
&signer,
&rs,
PROTOCOL_VERSION,
Expand Down
8 changes: 5 additions & 3 deletions chain/client/src/chunk_distribution_network.rs
Original file line number Diff line number Diff line change
Expand Up @@ -220,11 +220,12 @@ mod tests {
time::Clock,
};
use near_primitives::{
bandwidth_scheduler::BandwidthRequests,
congestion_info::CongestionInfo,
hash::hash,
sharding::{
PartialEncodedChunkV2, ShardChunkHeaderInner, ShardChunkHeaderInnerV3,
ShardChunkHeaderV3,
shard_chunk_header_inner::ShardChunkHeaderInnerV4, PartialEncodedChunkV2,
ShardChunkHeaderInner, ShardChunkHeaderV3,
},
validator_signer::EmptyValidatorSigner,
};
Expand Down Expand Up @@ -398,7 +399,7 @@ mod tests {
let mut mock_hashes = MockHashes::new(prev_block_hash);

let signer = EmptyValidatorSigner::default().into();
let header_inner = ShardChunkHeaderInner::V3(ShardChunkHeaderInnerV3 {
let header_inner = ShardChunkHeaderInner::V4(ShardChunkHeaderInnerV4 {
prev_block_hash,
prev_state_root: mock_hashes.next().unwrap(),
prev_outcome_root: mock_hashes.next().unwrap(),
Expand All @@ -413,6 +414,7 @@ mod tests {
tx_root: mock_hashes.next().unwrap(),
prev_validator_proposals: Vec::new(),
congestion_info: CongestionInfo::default(),
bandwidth_requests: BandwidthRequests::empty(),
});
let header = ShardChunkHeaderV3::from_inner(header_inner, &signer);
PartialEncodedChunk::V2(PartialEncodedChunkV2 {
Expand Down
1 change: 1 addition & 0 deletions chain/client/src/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -924,6 +924,7 @@ impl Client {
outgoing_receipts_root,
tx_root,
congestion_info,
chunk_extra.bandwidth_requests().cloned(),
&*validator_signer,
&mut self.rs_for_chunk_production,
protocol_version,
Expand Down
Loading
Loading