pub enum BindingStatus {
Bound,
Mismatch,
Unbound,
Unknown,
}Expand description
Whether the node’s local iroh key is the one bound to its operator address on-chain (#1034).
This is a correctness signal, not a liveness one. SlashJudge resolves an
accused node through CapacityBond.nodeIdOf, so a node serving under a key
no binding points at is unslashable: it earns normally while its bond is
unreachable, which is a protocol fault rather than an outage — and one with
no symptom the operator would otherwise notice. A key rotation that swapped
node.secret without submitting bindNodeId lands exactly here, which is
why decdn node rotate-key orders its steps to make the state unreachable
and why the daemon reports it when it happens anyway.
Advisory by construction. The check is one RPC at bring-up, and a daemon that refused to start on it would be brickable by a transient RPC failure and unable to run the very rotation that repairs it.
Variants§
Bound
The on-chain binding names this node’s key. Nothing to do.
Mismatch
The operator is bound to a DIFFERENT node id than the local key —
the un-slashable state. Either rotate on-chain to match the local key
(decdn node rotate-key --key iroh --bind-existing) or restore the
key the binding names. Sampled once at bring-up like every other
variant here, so a live repair does not clear this to Bound until
the daemon restarts — a mismatch seen right after running
--bind-existing is not a failed repair, just a stale sample.
Unbound
The operator address has no binding at all: never registered, or the
node id was reclaimed. decdn node register makes the initial binding.
Unknown
Not determined — no [blockchain] configuration to check against, or
the read failed. Explicitly not a synonym for “fine”.
Trait Implementations§
Source§impl Clone for BindingStatus
impl Clone for BindingStatus
impl Copy for BindingStatus
Source§impl Debug for BindingStatus
impl Debug for BindingStatus
Source§impl<'de> Deserialize<'de> for BindingStatus
impl<'de> Deserialize<'de> for BindingStatus
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>,
impl Eq for BindingStatus
Source§impl PartialEq for BindingStatus
impl PartialEq for BindingStatus
Source§impl Serialize for BindingStatus
impl Serialize for BindingStatus
impl StructuralPartialEq for BindingStatus
Auto Trait Implementations§
impl Freeze for BindingStatus
impl RefUnwindSafe for BindingStatus
impl Send for BindingStatus
impl Sync for BindingStatus
impl Unpin for BindingStatus
impl UnsafeUnpin for BindingStatus
impl UnwindSafe for BindingStatus
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<'de, T> BorrowedRpcObject<'de> for T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
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.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§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