pub struct NodeUpdateTransactionBody {
pub node_id: u64,
pub account_id: Option<AccountId>,
pub description: Option<String>,
pub gossip_endpoint: Vec<ServiceEndpoint>,
pub service_endpoint: Vec<ServiceEndpoint>,
pub gossip_ca_certificate: Option<Vec<u8>>,
pub grpc_certificate_hash: Option<Vec<u8>>,
pub admin_key: Option<Key>,
pub decline_reward: Option<bool>,
pub grpc_proxy_endpoint: Option<ServiceEndpoint>,
}
Expand description
Transaction body to modify address book node attributes.
- This transaction SHALL enable the node operator, as identified by the
admin_key
, to modify operational attributes of the node. - This transaction MUST be signed by the active
admin_key
for the node. - If this transaction sets a new value for the
admin_key
, then both the currentadmin_key
, and the newadmin_key
MUST sign this transaction. - This transaction SHALL NOT change any field that is not set (is null) in this transaction body.
- This SHALL create a pending update to the node, but the change SHALL NOT be immediately applied to the active configuration.
- All pending node updates SHALL be applied to the active network
configuration during the next
freeze
transaction with the fieldfreeze_type
set toPREPARE_UPGRADE
.
§Block Stream Effects
None.
Fields§
§node_id: u64
A consensus node identifier in the network state.
The node identified MUST exist in the network address book.
The node identified MUST NOT be deleted.
This value is REQUIRED.
account_id: Option<AccountId>
An account identifier.
If set, this SHALL replace the node account identifier.
If set, this transaction MUST be signed by the active `key` for _both_
the current node account _and_ the identified new node account.
description: Option<String>
A short description of the node.
This value, if set, MUST NOT exceed `transaction.maxMemoUtf8Bytes`
(default 100) bytes when encoded as UTF-8.
If set, this value SHALL replace the previous value.
gossip_endpoint: Vec<ServiceEndpoint>
A list of service endpoints for gossip.
If set, this list MUST meet the following requirements.
These endpoints SHALL represent the published endpoints to which other consensus nodes may _gossip_ transactions.
These endpoints SHOULD NOT specify both address and DNS name.
This list MUST NOT be empty.
This list MUST NOT contain more than `10` entries.
The first two entries in this list SHALL be the endpoints published to all consensus nodes.
All other entries SHALL be reserved for future use.
Each network may have additional requirements for these endpoints.
A client MUST check network-specific documentation for those
details.
ExampleHedera Mainnet _requires_ that address be specified, and does not permit DNS name (FQDN) to be specified.Solo, however, _requires_ DNS name (FQDN) but also permits address.
If set, the new list SHALL replace the existing list.
service_endpoint: Vec<ServiceEndpoint>
A list of service endpoints for gRPC calls.
If set, this list MUST meet the following requirements.
These endpoints SHALL represent the published endpoints to which clients may submit transactions.
These endpoints SHOULD specify address and port.
These endpoints MAY specify a DNS name.
These endpoints SHOULD NOT specify both address and DNS name.
This list MUST NOT be empty.
This list MUST NOT contain more than `8` entries.
Each network may have additional requirements for these endpoints. A client MUST check network-specific documentation for those details.
If set, the new list SHALL replace the existing list.
gossip_ca_certificate: Option<Vec<u8>>
A certificate used to sign gossip events.
This value MUST be a certificate of a type permitted for gossip
signatures.
This value MUST be the DER encoding of the certificate presented.
If set, the new value SHALL replace the existing bytes value.
grpc_certificate_hash: Option<Vec<u8>>
A hash of the node gRPC TLS certificate.
This value MAY be used to verify the certificate presented by the node
during TLS negotiation for gRPC.
This value MUST be a SHA-384 hash.
The TLS certificate to be hashed MUST first be in PEM format and MUST be
encoded with UTF-8 NFKD encoding to a stream of bytes provided to
the hash algorithm.
If set, the new value SHALL replace the existing hash value.
admin_key: Option<Key>
An administrative key controlled by the node operator.
This field is OPTIONAL.
If set, this key MUST sign this transaction.
If set, this key MUST sign each subsequent transaction to
update this node.
If set, this field MUST contain a valid `Key` value.
If set, this field MUST NOT be set to an empty `KeyList`.
decline_reward: Option<bool>
A boolean indicating that this node has chosen to decline node rewards distributed at the end of staking period.
This node SHALL NOT receive reward if this value is set, and `true`.
grpc_proxy_endpoint: Option<ServiceEndpoint>
A web proxy for gRPC from non-gRPC clients.
This endpoint SHALL be a Fully Qualified Domain Name (FQDN) using the HTTPS
protocol, and SHALL support gRPC-Web for use by browser-based clients.
This endpoint MUST be signed by a trusted certificate authority.
This endpoint MUST use a valid port and SHALL be reachable over TLS.
This field MAY be omitted if the node does not support gRPC-Web access.
This field MUST be updated if the gRPC-Web endpoint changes.
This field SHALL enable frontend clients to avoid hard-coded proxy endpoints.
This field MAY be set to `ServiceEndpoint.DEFAULT` to remove a previously-valid
web proxy.
Trait Implementations§
Source§impl Clone for NodeUpdateTransactionBody
impl Clone for NodeUpdateTransactionBody
Source§fn clone(&self) -> NodeUpdateTransactionBody
fn clone(&self) -> NodeUpdateTransactionBody
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Debug for NodeUpdateTransactionBody
impl Debug for NodeUpdateTransactionBody
Source§impl Default for NodeUpdateTransactionBody
impl Default for NodeUpdateTransactionBody
Source§impl Message for NodeUpdateTransactionBody
impl Message for NodeUpdateTransactionBody
Source§fn encoded_len(&self) -> usize
fn encoded_len(&self) -> usize
Source§fn encode(&self, buf: &mut impl BufMut) -> Result<(), EncodeError>where
Self: Sized,
fn encode(&self, buf: &mut impl BufMut) -> Result<(), EncodeError>where
Self: Sized,
Source§fn encode_to_vec(&self) -> Vec<u8> ⓘwhere
Self: Sized,
fn encode_to_vec(&self) -> Vec<u8> ⓘwhere
Self: Sized,
Source§fn encode_length_delimited(
&self,
buf: &mut impl BufMut,
) -> Result<(), EncodeError>where
Self: Sized,
fn encode_length_delimited(
&self,
buf: &mut impl BufMut,
) -> Result<(), EncodeError>where
Self: Sized,
Source§fn encode_length_delimited_to_vec(&self) -> Vec<u8> ⓘwhere
Self: Sized,
fn encode_length_delimited_to_vec(&self) -> Vec<u8> ⓘwhere
Self: Sized,
Source§fn decode(buf: impl Buf) -> Result<Self, DecodeError>where
Self: Default,
fn decode(buf: impl Buf) -> Result<Self, DecodeError>where
Self: Default,
Source§fn decode_length_delimited(buf: impl Buf) -> Result<Self, DecodeError>where
Self: Default,
fn decode_length_delimited(buf: impl Buf) -> Result<Self, DecodeError>where
Self: Default,
Source§fn merge(&mut self, buf: impl Buf) -> Result<(), DecodeError>where
Self: Sized,
fn merge(&mut self, buf: impl Buf) -> Result<(), DecodeError>where
Self: Sized,
self
. Read moreSource§fn merge_length_delimited(&mut self, buf: impl Buf) -> Result<(), DecodeError>where
Self: Sized,
fn merge_length_delimited(&mut self, buf: impl Buf) -> Result<(), DecodeError>where
Self: Sized,
self
.impl StructuralPartialEq for NodeUpdateTransactionBody
Auto Trait Implementations§
impl Freeze for NodeUpdateTransactionBody
impl RefUnwindSafe for NodeUpdateTransactionBody
impl Send for NodeUpdateTransactionBody
impl Sync for NodeUpdateTransactionBody
impl Unpin for NodeUpdateTransactionBody
impl UnwindSafe for NodeUpdateTransactionBody
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,
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> 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