pub struct TransactionTaskState<TYPES: NodeType, I: NodeImplementation<TYPES>, V: Versions> {Show 14 fields
pub builder_timeout: Duration,
pub output_event_stream: Sender<Event<TYPES>>,
pub cur_view: TYPES::View,
pub cur_epoch: TYPES::Epoch,
pub consensus: OuterConsensus<TYPES>,
pub membership: Arc<TYPES::Membership>,
pub builder_clients: Vec<BuilderClient<TYPES>>,
pub public_key: TYPES::SignatureKey,
pub private_key: <TYPES::SignatureKey as SignatureKey>::PrivateKey,
pub instance_state: Arc<TYPES::InstanceState>,
pub id: u64,
pub upgrade_lock: UpgradeLock<TYPES, V>,
pub auction_results_provider: Arc<I::AuctionResultsProvider>,
pub fallback_builder_url: Url,
}
Expand description
Tracks state of a Transaction task
Fields§
§builder_timeout: Duration
The state’s api
output_event_stream: Sender<Event<TYPES>>
Output events to application
cur_view: TYPES::View
View number this view is executing in.
cur_epoch: TYPES::Epoch
Epoch number this node is executing in.
consensus: OuterConsensus<TYPES>
Reference to consensus. Leader will require a read lock on this.
membership: Arc<TYPES::Membership>
Membership for the quorum
builder_clients: Vec<BuilderClient<TYPES>>
Builder 0.1 API clients
public_key: TYPES::SignatureKey
This Nodes Public Key
private_key: <TYPES::SignatureKey as SignatureKey>::PrivateKey
Our Private Key
instance_state: Arc<TYPES::InstanceState>
InstanceState
id: u64
This state’s ID
upgrade_lock: UpgradeLock<TYPES, V>
Lock for a decided upgrade
auction_results_provider: Arc<I::AuctionResultsProvider>
auction results provider
fallback_builder_url: Url
fallback builder url
Implementations§
source§impl<TYPES: NodeType, I: NodeImplementation<TYPES>, V: Versions> TransactionTaskState<TYPES, I, V>
impl<TYPES: NodeType, I: NodeImplementation<TYPES>, V: Versions> TransactionTaskState<TYPES, I, V>
sourcepub async fn handle_view_change(
&mut self,
event_stream: &Sender<Arc<HotShotEvent<TYPES>>>,
block_view: TYPES::View,
) -> Option<HotShotTaskCompleted>
pub async fn handle_view_change( &mut self, event_stream: &Sender<Arc<HotShotEvent<TYPES>>>, block_view: TYPES::View, ) -> Option<HotShotTaskCompleted>
handle view change decide legacy or not
sourcepub async fn handle_view_change_legacy(
&mut self,
event_stream: &Sender<Arc<HotShotEvent<TYPES>>>,
block_view: TYPES::View,
) -> Option<HotShotTaskCompleted>
pub async fn handle_view_change_legacy( &mut self, event_stream: &Sender<Arc<HotShotEvent<TYPES>>>, block_view: TYPES::View, ) -> Option<HotShotTaskCompleted>
legacy view change handler
sourceasync fn produce_block_marketplace(
&mut self,
block_view: TYPES::View,
task_start_time: Instant,
) -> Result<PackedBundle<TYPES>>
async fn produce_block_marketplace( &mut self, block_view: TYPES::View, task_start_time: Instant, ) -> Result<PackedBundle<TYPES>>
Produce a block by fetching auction results from the solver and bundles from builders.
§Errors
Returns an error if the solver cannot be contacted, or if none of the builders respond.
sourcepub fn null_block(
&self,
block_view: TYPES::View,
version: Version,
) -> Option<PackedBundle<TYPES>>
pub fn null_block( &self, block_view: TYPES::View, version: Version, ) -> Option<PackedBundle<TYPES>>
Produce a null block
sourcepub async fn handle_view_change_marketplace(
&mut self,
event_stream: &Sender<Arc<HotShotEvent<TYPES>>>,
block_view: TYPES::View,
) -> Option<HotShotTaskCompleted>
pub async fn handle_view_change_marketplace( &mut self, event_stream: &Sender<Arc<HotShotEvent<TYPES>>>, block_view: TYPES::View, ) -> Option<HotShotTaskCompleted>
marketplace view change handler
sourcepub async fn handle_view_change_epochs(
&mut self,
event_stream: &Sender<Arc<HotShotEvent<TYPES>>>,
block_view: TYPES::View,
) -> Option<HotShotTaskCompleted>
pub async fn handle_view_change_epochs( &mut self, event_stream: &Sender<Arc<HotShotEvent<TYPES>>>, block_view: TYPES::View, ) -> Option<HotShotTaskCompleted>
epochs view change handler
sourcepub async fn handle(
&mut self,
event: Arc<HotShotEvent<TYPES>>,
event_stream: Sender<Arc<HotShotEvent<TYPES>>>,
) -> Result<()>
pub async fn handle( &mut self, event: Arc<HotShotEvent<TYPES>>, event_stream: Sender<Arc<HotShotEvent<TYPES>>>, ) -> Result<()>
main task event handler
sourceasync fn last_vid_commitment_retry(
&self,
block_view: TYPES::View,
task_start_time: Instant,
) -> Result<(TYPES::View, VidCommitment)>
async fn last_vid_commitment_retry( &self, block_view: TYPES::View, task_start_time: Instant, ) -> Result<(TYPES::View, VidCommitment)>
Get VID commitment for the last successful view before block_view
.
Returns None if we don’t have said commitment recorded.
sourceasync fn last_vid_commitment(
&self,
block_view: TYPES::View,
) -> Result<(TYPES::View, VidCommitment)>
async fn last_vid_commitment( &self, block_view: TYPES::View, ) -> Result<(TYPES::View, VidCommitment)>
Get VID commitment for the last successful view before block_view
.
Returns None if we don’t have said commitment recorded.
async fn wait_for_block( &self, block_view: TYPES::View, ) -> Option<BuilderResponse<TYPES>>
sourceasync fn get_available_blocks(
&self,
parent_comm: VidCommitment,
view_number: TYPES::View,
parent_comm_sig: &<<TYPES as NodeType>::SignatureKey as SignatureKey>::PureAssembledSignatureType,
) -> Vec<(AvailableBlockInfo<TYPES>, usize)>
async fn get_available_blocks( &self, parent_comm: VidCommitment, view_number: TYPES::View, parent_comm_sig: &<<TYPES as NodeType>::SignatureKey as SignatureKey>::PureAssembledSignatureType, ) -> Vec<(AvailableBlockInfo<TYPES>, usize)>
Query the builders for available blocks. Queries only fraction of the builders based on the response time.
sourceasync fn block_from_builder(
&self,
parent_comm: VidCommitment,
view_number: TYPES::View,
parent_comm_sig: &<<TYPES as NodeType>::SignatureKey as SignatureKey>::PureAssembledSignatureType,
) -> Result<BuilderResponse<TYPES>>
async fn block_from_builder( &self, parent_comm: VidCommitment, view_number: TYPES::View, parent_comm_sig: &<<TYPES as NodeType>::SignatureKey as SignatureKey>::PureAssembledSignatureType, ) -> Result<BuilderResponse<TYPES>>
Get a block from builder. Queries the sufficiently fast builders for available blocks and chooses the one with the best fee/byte ratio, re-trying with the next best one in case of failure.
§Errors
If none of the builder reports any available blocks or claiming block fails for all of the builders.
Trait Implementations§
source§impl<TYPES: NodeType, I: NodeImplementation<TYPES>, V: Versions> TaskState for TransactionTaskState<TYPES, I, V>
impl<TYPES: NodeType, I: NodeImplementation<TYPES>, V: Versions> TaskState for TransactionTaskState<TYPES, I, V>
task state implementation for Transactions Task
source§type Event = HotShotEvent<TYPES>
type Event = HotShotEvent<TYPES>
source§fn handle_event<'life0, 'life1, 'life2, 'async_trait>(
&'life0 mut self,
event: Arc<Self::Event>,
sender: &'life1 Sender<Arc<Self::Event>>,
_receiver: &'life2 Receiver<Arc<Self::Event>>,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn handle_event<'life0, 'life1, 'life2, 'async_trait>(
&'life0 mut self,
event: Arc<Self::Event>,
sender: &'life1 Sender<Arc<Self::Event>>,
_receiver: &'life2 Receiver<Arc<Self::Event>>,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
source§fn cancel_subtasks(&mut self)
fn cancel_subtasks(&mut self)
Auto Trait Implementations§
impl<TYPES, I, V> Freeze for TransactionTaskState<TYPES, I, V>where
<TYPES as NodeType>::View: Freeze,
<TYPES as NodeType>::Epoch: Freeze,
<TYPES as NodeType>::SignatureKey: Freeze,
<<TYPES as NodeType>::SignatureKey as SignatureKey>::PrivateKey: Freeze,
impl<TYPES, I, V> !RefUnwindSafe for TransactionTaskState<TYPES, I, V>
impl<TYPES, I, V> Send for TransactionTaskState<TYPES, I, V>
impl<TYPES, I, V> Sync for TransactionTaskState<TYPES, I, V>
impl<TYPES, I, V> Unpin for TransactionTaskState<TYPES, I, V>where
<TYPES as NodeType>::View: Unpin,
<TYPES as NodeType>::Epoch: Unpin,
<TYPES as NodeType>::SignatureKey: Unpin,
<<TYPES as NodeType>::SignatureKey as SignatureKey>::PrivateKey: Unpin,
V: Unpin,
TYPES: Unpin,
impl<TYPES, I, V> !UnwindSafe for TransactionTaskState<TYPES, I, V>
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self
, then passes self.as_ref()
into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self
, then passes self.as_mut()
into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow()
only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref()
only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.