fix RPC limit add blob signing domain
This commit is contained in:
parent
ba16a037a3
commit
7527c2b455
@ -134,10 +134,7 @@ pub enum BlockError<T: EthSpec> {
|
|||||||
/// its parent.
|
/// its parent.
|
||||||
ParentUnknown(Arc<SignedBeaconBlock<T>>),
|
ParentUnknown(Arc<SignedBeaconBlock<T>>),
|
||||||
/// The block skips too many slots and is a DoS risk.
|
/// The block skips too many slots and is a DoS risk.
|
||||||
TooManySkippedSlots {
|
TooManySkippedSlots { parent_slot: Slot, block_slot: Slot },
|
||||||
parent_slot: Slot,
|
|
||||||
block_slot: Slot,
|
|
||||||
},
|
|
||||||
/// The block slot is greater than the present slot.
|
/// The block slot is greater than the present slot.
|
||||||
///
|
///
|
||||||
/// ## Peer scoring
|
/// ## Peer scoring
|
||||||
@ -152,10 +149,7 @@ pub enum BlockError<T: EthSpec> {
|
|||||||
/// ## Peer scoring
|
/// ## Peer scoring
|
||||||
///
|
///
|
||||||
/// The peer has incompatible state transition logic and is faulty.
|
/// The peer has incompatible state transition logic and is faulty.
|
||||||
StateRootMismatch {
|
StateRootMismatch { block: Hash256, local: Hash256 },
|
||||||
block: Hash256,
|
|
||||||
local: Hash256,
|
|
||||||
},
|
|
||||||
/// The block was a genesis block, these blocks cannot be re-imported.
|
/// The block was a genesis block, these blocks cannot be re-imported.
|
||||||
GenesisBlock,
|
GenesisBlock,
|
||||||
/// The slot is finalized, no need to import.
|
/// The slot is finalized, no need to import.
|
||||||
@ -174,9 +168,7 @@ pub enum BlockError<T: EthSpec> {
|
|||||||
///
|
///
|
||||||
/// It's unclear if this block is valid, but it conflicts with finality and shouldn't be
|
/// It's unclear if this block is valid, but it conflicts with finality and shouldn't be
|
||||||
/// imported.
|
/// imported.
|
||||||
NotFinalizedDescendant {
|
NotFinalizedDescendant { block_parent_root: Hash256 },
|
||||||
block_parent_root: Hash256,
|
|
||||||
},
|
|
||||||
/// Block is already known, no need to re-import.
|
/// Block is already known, no need to re-import.
|
||||||
///
|
///
|
||||||
/// ## Peer scoring
|
/// ## Peer scoring
|
||||||
@ -189,10 +181,7 @@ pub enum BlockError<T: EthSpec> {
|
|||||||
///
|
///
|
||||||
/// The `proposer` has already proposed a block at this slot. The existing block may or may not
|
/// The `proposer` has already proposed a block at this slot. The existing block may or may not
|
||||||
/// be equal to the given block.
|
/// be equal to the given block.
|
||||||
RepeatProposal {
|
RepeatProposal { proposer: u64, slot: Slot },
|
||||||
proposer: u64,
|
|
||||||
slot: Slot,
|
|
||||||
},
|
|
||||||
/// The block slot exceeds the MAXIMUM_BLOCK_SLOT_NUMBER.
|
/// The block slot exceeds the MAXIMUM_BLOCK_SLOT_NUMBER.
|
||||||
///
|
///
|
||||||
/// ## Peer scoring
|
/// ## Peer scoring
|
||||||
@ -207,10 +196,7 @@ pub enum BlockError<T: EthSpec> {
|
|||||||
/// ## Peer scoring
|
/// ## Peer scoring
|
||||||
///
|
///
|
||||||
/// The block is invalid and the peer is faulty.
|
/// The block is invalid and the peer is faulty.
|
||||||
IncorrectBlockProposer {
|
IncorrectBlockProposer { block: u64, local_shuffling: u64 },
|
||||||
block: u64,
|
|
||||||
local_shuffling: u64,
|
|
||||||
},
|
|
||||||
/// The proposal signature in invalid.
|
/// The proposal signature in invalid.
|
||||||
///
|
///
|
||||||
/// ## Peer scoring
|
/// ## Peer scoring
|
||||||
@ -234,10 +220,7 @@ pub enum BlockError<T: EthSpec> {
|
|||||||
/// ## Peer scoring
|
/// ## Peer scoring
|
||||||
///
|
///
|
||||||
/// The block is invalid and the peer is faulty.
|
/// The block is invalid and the peer is faulty.
|
||||||
BlockIsNotLaterThanParent {
|
BlockIsNotLaterThanParent { block_slot: Slot, parent_slot: Slot },
|
||||||
block_slot: Slot,
|
|
||||||
parent_slot: Slot,
|
|
||||||
},
|
|
||||||
/// At least one block in the chain segment did not have it's parent root set to the root of
|
/// At least one block in the chain segment did not have it's parent root set to the root of
|
||||||
/// the prior block.
|
/// the prior block.
|
||||||
///
|
///
|
||||||
@ -293,9 +276,7 @@ pub enum BlockError<T: EthSpec> {
|
|||||||
///
|
///
|
||||||
/// The peer sent us an invalid block, but I'm not really sure how to score this in an
|
/// The peer sent us an invalid block, but I'm not really sure how to score this in an
|
||||||
/// "optimistic" sync world.
|
/// "optimistic" sync world.
|
||||||
ParentExecutionPayloadInvalid {
|
ParentExecutionPayloadInvalid { parent_root: Hash256 },
|
||||||
parent_root: Hash256,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returned when block validation failed due to some issue verifying
|
/// Returned when block validation failed due to some issue verifying
|
||||||
|
@ -20,8 +20,10 @@ use tokio_util::{
|
|||||||
codec::Framed,
|
codec::Framed,
|
||||||
compat::{Compat, FuturesAsyncReadCompatExt},
|
compat::{Compat, FuturesAsyncReadCompatExt},
|
||||||
};
|
};
|
||||||
|
use types::BlobsSidecar;
|
||||||
|
use types::SignedBlobsSidecar;
|
||||||
use types::{
|
use types::{
|
||||||
BeaconBlock, BeaconBlockAltair, BeaconBlockBase, BeaconBlockMerge, EthSpec, ForkContext,
|
BeaconBlock, BeaconBlockAltair, BeaconBlockBase, BeaconBlockMerge, Blob, EthSpec, ForkContext,
|
||||||
ForkName, Hash256, MainnetEthSpec, Signature, SignedBeaconBlock,
|
ForkName, Hash256, MainnetEthSpec, Signature, SignedBeaconBlock,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -98,6 +100,14 @@ lazy_static! {
|
|||||||
.as_ssz_bytes()
|
.as_ssz_bytes()
|
||||||
.len();
|
.len();
|
||||||
|
|
||||||
|
pub static ref SIGNED_BLOBS_SIDECAR_MIN: usize = SignedBlobsSidecar {
|
||||||
|
message: BlobsSidecar::<MainnetEthSpec>::empty(),
|
||||||
|
signature: Signature::empty(),
|
||||||
|
}.as_ssz_bytes()
|
||||||
|
.len();
|
||||||
|
|
||||||
|
pub static ref SIGNED_BLOBS_SIDECAR_MAX: usize = *SIGNED_BLOBS_SIDECAR_MIN // Max size of variable length `blobs` field
|
||||||
|
+ (MainnetEthSpec::max_blobs_per_block() * <Blob<MainnetEthSpec> as Encode>::ssz_fixed_len());
|
||||||
}
|
}
|
||||||
|
|
||||||
/// The maximum bytes that can be sent across the RPC pre-merge.
|
/// The maximum bytes that can be sent across the RPC pre-merge.
|
||||||
|
@ -1182,8 +1182,6 @@ impl<T: BeaconChainTypes> BeaconProcessor<T> {
|
|||||||
self.spawn_worker(item, toolbox);
|
self.spawn_worker(item, toolbox);
|
||||||
} else if let Some(item) = bbrange_queue.pop() {
|
} else if let Some(item) = bbrange_queue.pop() {
|
||||||
self.spawn_worker(item, toolbox);
|
self.spawn_worker(item, toolbox);
|
||||||
} else if let Some(item) = txbbrange_queue.pop() {
|
|
||||||
self.spawn_worker(item, toolbox);
|
|
||||||
} else if let Some(item) = bbroots_queue.pop() {
|
} else if let Some(item) = bbroots_queue.pop() {
|
||||||
self.spawn_worker(item, toolbox);
|
self.spawn_worker(item, toolbox);
|
||||||
// Check slashings after all other consensus messages so we prioritize
|
// Check slashings after all other consensus messages so we prioritize
|
||||||
|
@ -12,7 +12,7 @@ use tree_hash_derive::TreeHash;
|
|||||||
pub struct BlobsSidecar<E: EthSpec> {
|
pub struct BlobsSidecar<E: EthSpec> {
|
||||||
pub beacon_block_root: Hash256,
|
pub beacon_block_root: Hash256,
|
||||||
pub beacon_block_slot: Slot,
|
pub beacon_block_slot: Slot,
|
||||||
pub blobs: VariableList<Blob<E::FieldElementsPerBlob>, E::MaxBlobsPerBlock>,
|
pub blobs: VariableList<Blob<E>, E::MaxBlobsPerBlock>,
|
||||||
pub kzg_aggregate_proof: KzgProof,
|
pub kzg_aggregate_proof: KzgProof,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -24,6 +24,6 @@ impl<E: EthSpec> BlobsSidecar<E> {
|
|||||||
// Fixed part
|
// Fixed part
|
||||||
Self::empty().as_ssz_bytes().len()
|
Self::empty().as_ssz_bytes().len()
|
||||||
// Max size of variable length `blobs` field
|
// Max size of variable length `blobs` field
|
||||||
+ (E::max_blobs_per_block() * <Blob<E::FieldElementsPerBlob> as Encode>::ssz_fixed_len())
|
+ (E::max_blobs_per_block() * <Blob<E> as Encode>::ssz_fixed_len())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,7 @@ use tree_hash::TreeHash;
|
|||||||
pub enum Domain {
|
pub enum Domain {
|
||||||
BeaconProposer,
|
BeaconProposer,
|
||||||
BeaconAttester,
|
BeaconAttester,
|
||||||
|
BlobsSideCar,
|
||||||
Randao,
|
Randao,
|
||||||
Deposit,
|
Deposit,
|
||||||
VoluntaryExit,
|
VoluntaryExit,
|
||||||
@ -22,7 +23,6 @@ pub enum Domain {
|
|||||||
ContributionAndProof,
|
ContributionAndProof,
|
||||||
SyncCommitteeSelectionProof,
|
SyncCommitteeSelectionProof,
|
||||||
ApplicationMask(ApplicationDomain),
|
ApplicationMask(ApplicationDomain),
|
||||||
BlobsSideCar,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Lighthouse's internal configuration struct.
|
/// Lighthouse's internal configuration struct.
|
||||||
@ -99,6 +99,7 @@ pub struct ChainSpec {
|
|||||||
*/
|
*/
|
||||||
pub(crate) domain_beacon_proposer: u32,
|
pub(crate) domain_beacon_proposer: u32,
|
||||||
pub(crate) domain_beacon_attester: u32,
|
pub(crate) domain_beacon_attester: u32,
|
||||||
|
pub(crate) domain_blobs_sidecar: u32,
|
||||||
pub(crate) domain_randao: u32,
|
pub(crate) domain_randao: u32,
|
||||||
pub(crate) domain_deposit: u32,
|
pub(crate) domain_deposit: u32,
|
||||||
pub(crate) domain_voluntary_exit: u32,
|
pub(crate) domain_voluntary_exit: u32,
|
||||||
@ -340,6 +341,7 @@ impl ChainSpec {
|
|||||||
match domain {
|
match domain {
|
||||||
Domain::BeaconProposer => self.domain_beacon_proposer,
|
Domain::BeaconProposer => self.domain_beacon_proposer,
|
||||||
Domain::BeaconAttester => self.domain_beacon_attester,
|
Domain::BeaconAttester => self.domain_beacon_attester,
|
||||||
|
Domain::BlobsSideCar => self.domain_blobs_sidecar,
|
||||||
Domain::Randao => self.domain_randao,
|
Domain::Randao => self.domain_randao,
|
||||||
Domain::Deposit => self.domain_deposit,
|
Domain::Deposit => self.domain_deposit,
|
||||||
Domain::VoluntaryExit => self.domain_voluntary_exit,
|
Domain::VoluntaryExit => self.domain_voluntary_exit,
|
||||||
@ -529,6 +531,7 @@ impl ChainSpec {
|
|||||||
domain_voluntary_exit: 4,
|
domain_voluntary_exit: 4,
|
||||||
domain_selection_proof: 5,
|
domain_selection_proof: 5,
|
||||||
domain_aggregate_and_proof: 6,
|
domain_aggregate_and_proof: 6,
|
||||||
|
domain_blobs_sidecar: 10, // 0x0a000000
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Fork choice
|
* Fork choice
|
||||||
@ -743,6 +746,7 @@ impl ChainSpec {
|
|||||||
domain_voluntary_exit: 4,
|
domain_voluntary_exit: 4,
|
||||||
domain_selection_proof: 5,
|
domain_selection_proof: 5,
|
||||||
domain_aggregate_and_proof: 6,
|
domain_aggregate_and_proof: 6,
|
||||||
|
domain_blobs_sidecar: 10,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Fork choice
|
* Fork choice
|
||||||
@ -1181,6 +1185,7 @@ mod tests {
|
|||||||
|
|
||||||
test_domain(Domain::BeaconProposer, spec.domain_beacon_proposer, &spec);
|
test_domain(Domain::BeaconProposer, spec.domain_beacon_proposer, &spec);
|
||||||
test_domain(Domain::BeaconAttester, spec.domain_beacon_attester, &spec);
|
test_domain(Domain::BeaconAttester, spec.domain_beacon_attester, &spec);
|
||||||
|
test_domain(Domain::BlobsSideCar, spec.domain_blobs_sidecar, &spec);
|
||||||
test_domain(Domain::Randao, spec.domain_randao, &spec);
|
test_domain(Domain::Randao, spec.domain_randao, &spec);
|
||||||
test_domain(Domain::Deposit, spec.domain_deposit, &spec);
|
test_domain(Domain::Deposit, spec.domain_deposit, &spec);
|
||||||
test_domain(Domain::VoluntaryExit, spec.domain_voluntary_exit, &spec);
|
test_domain(Domain::VoluntaryExit, spec.domain_voluntary_exit, &spec);
|
||||||
|
@ -72,6 +72,7 @@ pub fn get_extra_fields(spec: &ChainSpec) -> HashMap<String, Value> {
|
|||||||
"bls_withdrawal_prefix".to_uppercase() => u8_hex(spec.bls_withdrawal_prefix_byte),
|
"bls_withdrawal_prefix".to_uppercase() => u8_hex(spec.bls_withdrawal_prefix_byte),
|
||||||
"domain_beacon_proposer".to_uppercase() => u32_hex(spec.domain_beacon_proposer),
|
"domain_beacon_proposer".to_uppercase() => u32_hex(spec.domain_beacon_proposer),
|
||||||
"domain_beacon_attester".to_uppercase() => u32_hex(spec.domain_beacon_attester),
|
"domain_beacon_attester".to_uppercase() => u32_hex(spec.domain_beacon_attester),
|
||||||
|
"domain_blobs_sidecar".to_uppercase() => u32_hex(spec.domain_blobs_sidecar),
|
||||||
"domain_randao".to_uppercase()=> u32_hex(spec.domain_randao),
|
"domain_randao".to_uppercase()=> u32_hex(spec.domain_randao),
|
||||||
"domain_deposit".to_uppercase()=> u32_hex(spec.domain_deposit),
|
"domain_deposit".to_uppercase()=> u32_hex(spec.domain_deposit),
|
||||||
"domain_voluntary_exit".to_uppercase() => u32_hex(spec.domain_voluntary_exit),
|
"domain_voluntary_exit".to_uppercase() => u32_hex(spec.domain_voluntary_exit),
|
||||||
|
@ -157,6 +157,7 @@ pub use crate::signed_beacon_block::{
|
|||||||
SignedBeaconBlockHash, SignedBeaconBlockMerge, SignedBlindedBeaconBlock,
|
SignedBeaconBlockHash, SignedBeaconBlockMerge, SignedBlindedBeaconBlock,
|
||||||
};
|
};
|
||||||
pub use crate::signed_beacon_block_header::SignedBeaconBlockHeader;
|
pub use crate::signed_beacon_block_header::SignedBeaconBlockHeader;
|
||||||
|
pub use crate::signed_blobs_sidecar::SignedBlobsSidecar;
|
||||||
pub use crate::signed_contribution_and_proof::SignedContributionAndProof;
|
pub use crate::signed_contribution_and_proof::SignedContributionAndProof;
|
||||||
pub use crate::signed_voluntary_exit::SignedVoluntaryExit;
|
pub use crate::signed_voluntary_exit::SignedVoluntaryExit;
|
||||||
pub use crate::signing_data::{SignedRoot, SigningData};
|
pub use crate::signing_data::{SignedRoot, SigningData};
|
||||||
@ -183,7 +184,8 @@ pub type Uint256 = ethereum_types::U256;
|
|||||||
pub type Address = H160;
|
pub type Address = H160;
|
||||||
pub type ForkVersion = [u8; 4];
|
pub type ForkVersion = [u8; 4];
|
||||||
pub type BLSFieldElement = Uint256;
|
pub type BLSFieldElement = Uint256;
|
||||||
pub type Blob<T> = FixedVector<BLSFieldElement, T>;
|
pub type Blob<T> = FixedVector<BLSFieldElement, <T as EthSpec>::FieldElementsPerBlob>;
|
||||||
|
pub type Polynomial<T> = VariableList<BLSFieldElement, <T as EthSpec>::FieldElementsPerBlob>;
|
||||||
|
|
||||||
pub use bls::{
|
pub use bls::{
|
||||||
AggregatePublicKey, AggregateSignature, Keypair, PublicKey, PublicKeyBytes, SecretKey,
|
AggregatePublicKey, AggregateSignature, Keypair, PublicKey, PublicKeyBytes, SecretKey,
|
||||||
|
Loading…
Reference in New Issue
Block a user