pub struct ProtocolParamset {Show 27 fields
pub network: Network,
pub num_round_txs: usize,
pub num_kickoffs_per_round: usize,
pub num_signed_kickoffs: usize,
pub bridge_amount: Amount,
pub kickoff_amount: Amount,
pub operator_challenge_amount: Amount,
pub collateral_funding_amount: Amount,
pub kickoff_blockhash_commit_length: u32,
pub watchtower_challenge_bytes: usize,
pub winternitz_log_d: u32,
pub user_takes_after: u16,
pub operator_challenge_timeout_timelock: u16,
pub operator_challenge_nack_timelock: u16,
pub disprove_timeout_timelock: u16,
pub assert_timeout_timelock: u16,
pub latest_blockhash_timeout_timelock: u16,
pub operator_reimburse_timelock: u16,
pub watchtower_challenge_timeout_timelock: u16,
pub time_to_send_watchtower_challenge: u16,
pub finality_depth: u32,
pub start_height: u32,
pub genesis_height: u32,
pub genesis_chain_state_hash: [u8; 32],
pub header_chain_proof_batch_size: u32,
pub bridge_circuit_method_id_constant: [u8; 32],
pub bridge_nonstandard: bool,
}
Expand description
Protocol parameters that affect the transactions in the contract (which also change the pre-calculated txids and sighashes).
These parameters are used when generating the transactions and changing them
will break compatibility between actors, making deposits impossible. A
paramset is chosen by the actor by choosing a ParamsetName inside the
crate::config::BridgeConfig
.
Fields§
§network: Network
Bitcoin network to work on (mainnet, testnet, regtest).
num_round_txs: usize
Number of round transactions that the operator will create.
num_kickoffs_per_round: usize
Number of kickoff UTXOs per round transaction.
num_signed_kickoffs: usize
Number of kickoffs that are signed per round and deposit. There are num_kickoffs_per_round utxo’s, but only num_signed_kickoffs are signed.
bridge_amount: Amount
Bridge deposit amount that users can deposit.
kickoff_amount: Amount
Amount allocated for each kickoff UTXO.
operator_challenge_amount: Amount
Amount allocated for operator challenge transactions.
collateral_funding_amount: Amount
Collateral funding amount for operators used to fund the round transaction chain.
kickoff_blockhash_commit_length: u32
Length of the blockhash commitment in kickoff transactions.
watchtower_challenge_bytes: usize
Total number of bytes of a watchtower challenge.
winternitz_log_d: u32
Winternitz derivation log_d (shared for all WOTS commitments)
Currently used in statics and thus cannot be different from WINTERNITZ_LOG_D
.
user_takes_after: u16
Number of blocks after which user can take deposit back if deposit request fails.
operator_challenge_timeout_timelock: u16
Number of blocks for operator challenge timeout timelock (currently BLOCKS_PER_WEEK)
operator_challenge_nack_timelock: u16
Number of blocks for operator challenge NACK timelock (currently BLOCKS_PER_WEEK * 3)
disprove_timeout_timelock: u16
Number of blocks for disprove timeout timelock (currently BLOCKS_PER_WEEK * 5)
assert_timeout_timelock: u16
Number of blocks for assert timeout timelock (currently BLOCKS_PER_WEEK * 4)
latest_blockhash_timeout_timelock: u16
Number of blocks for latest blockhash timeout timelock (currently BLOCKS_PER_WEEK * 2.5)
operator_reimburse_timelock: u16
Number of blocks for operator reimburse timelock (currently BLOCKS_PER_DAY * 2) Timelocks operator from sending the next Round Tx after the Ready to Reimburse Tx.
watchtower_challenge_timeout_timelock: u16
Number of blocks for watchtower challenge timeout timelock (currently BLOCKS_PER_WEEK * 2)
time_to_send_watchtower_challenge: u16
Time to wait after a kickoff to send a watchtower challenge
finality_depth: u32
Amount of depth a block should have from the current head to be considered finalized
start_height: u32
start height to sync the chain from, i.e. the height bridge was deployed
genesis_height: u32
Genesis height to sync the header chain proofs from
genesis_chain_state_hash: [u8; 32]
Genesis chain state hash
header_chain_proof_batch_size: u32
Batch size of the header chain proofs
bridge_circuit_method_id_constant: [u8; 32]
Bridge circuit method id
bridge_nonstandard: bool
Denotes if the bridge is non-standard, i.e. uses 0 sat outputs for round tx (except collateral) and kickoff outputs
Implementations§
Source§impl ProtocolParamset
impl ProtocolParamset
pub fn from_toml_file(path: &Path) -> Result<Self, BridgeError>
pub fn from_env() -> Result<Self, BridgeError>
pub fn default_utxo_amount(&self) -> Amount
pub fn anchor_amount(&self) -> Amount
Trait Implementations§
Source§impl Clone for ProtocolParamset
impl Clone for ProtocolParamset
Source§fn clone(&self) -> ProtocolParamset
fn clone(&self) -> ProtocolParamset
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Debug for ProtocolParamset
impl Debug for ProtocolParamset
Source§impl Default for &'static ProtocolParamset
impl Default for &'static ProtocolParamset
Source§impl Default for ProtocolParamset
impl Default for ProtocolParamset
Source§impl<'de> Deserialize<'de> for ProtocolParamset
impl<'de> Deserialize<'de> for ProtocolParamset
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl From<ProtocolParamsetName> for &'static ProtocolParamset
impl From<ProtocolParamsetName> for &'static ProtocolParamset
Source§fn from(name: ProtocolParamsetName) -> Self
fn from(name: ProtocolParamsetName) -> Self
Source§impl Hash for ProtocolParamset
impl Hash for ProtocolParamset
Source§impl PartialEq for ProtocolParamset
impl PartialEq for ProtocolParamset
Source§impl Serialize for ProtocolParamset
impl Serialize for ProtocolParamset
impl Eq for ProtocolParamset
impl StructuralPartialEq for ProtocolParamset
Auto Trait Implementations§
impl Freeze for ProtocolParamset
impl RefUnwindSafe for ProtocolParamset
impl Send for ProtocolParamset
impl Sync for ProtocolParamset
impl Unpin for ProtocolParamset
impl UnwindSafe for ProtocolParamset
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<T, U> ExactFrom<T> for Uwhere
U: TryFrom<T>,
impl<T, U> ExactFrom<T> for Uwhere
U: TryFrom<T>,
fn exact_from(value: T) -> U
§impl<T, U> ExactInto<U> for Twhere
U: ExactFrom<T>,
impl<T, U> ExactInto<U> for Twhere
U: ExactFrom<T>,
fn exact_into(self) -> U
§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> ⓘ
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 moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T
in a tonic::Request
§impl<T, U> OverflowingInto<U> for Twhere
U: OverflowingFrom<T>,
impl<T, U> OverflowingInto<U> for Twhere
U: OverflowingFrom<T>,
fn overflowing_into(self) -> (U, bool)
§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> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
§impl<T, U> RoundingInto<U> for Twhere
U: RoundingFrom<T>,
impl<T, U> RoundingInto<U> for Twhere
U: RoundingFrom<T>,
fn rounding_into(self, rm: RoundingMode) -> (U, Ordering)
§impl<T, U> SaturatingInto<U> for Twhere
U: SaturatingFrom<T>,
impl<T, U> SaturatingInto<U> for Twhere
U: SaturatingFrom<T>,
fn saturating_into(self) -> U
§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.