Skip to content

Commit 0601d2b

Browse files
committed
Update HIP-1137 based on implementation fedback
* Modified the NodeUpdateTransactionBody to use a wrapper message for the associated registered nodes. * This enables differentiating an empty list from an _unset_ list. * Clarified that `RegisteredNodeDelete` will fail if that `RegisteredNode` is present in the `associated_registered_nodes` list for any Consensus `Node`. * Added support for a `GeneralServiceEndpoint` endpoint type in `RegisteredServiceEndpoint` so that node operators can declare additional services for their nodes. Signed-off-by: Joseph S. <121976561+jsync-swirlds@users.noreply.github.com>
1 parent c4aa5bf commit 0601d2b

1 file changed

Lines changed: 50 additions & 7 deletions

File tree

HIP/hip-1137.md

Lines changed: 50 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ discussions-to: https://github.com/hiero-ledger/hiero-improvement-proposals/pull
1414
status: Approved
1515
last-call-date-time: 2026-02-11T07:00:00Z
1616
created: 2025-03-07
17-
updated: 2026-02-10
17+
updated: 2026-03-05
1818
---
1919

2020
## Abstract
@@ -233,6 +233,14 @@ message RegisteredServiceEndpoint {
233233
* Hiero consensus network.
234234
*/
235235
RpcRelayEndpoint rpc_relay = 7;
236+
237+
/**
238+
* A general service.<br/>
239+
* A general service endpoint represents any network accessible service
240+
* that is provided by a registered node but that is not a service
241+
* currently defined as part of the Hiero Ledger system.
242+
*/
243+
GeneralServiceEndpoint general_service = 8;
236244
}
237245
238246
/**
@@ -296,6 +304,19 @@ message RegisteredServiceEndpoint {
296304
*/
297305
message RpcRelayEndpoint {
298306
}
307+
308+
/**
309+
* A message indicating this endpoint is a General Service endpoint.
310+
*/
311+
message GeneralServiceEndpoint {
312+
/**
313+
* A short description of the service provided.
314+
* <p>
315+
* This value, if set, MUST NOT exceed 100 bytes when encoded as UTF-8.<br/>
316+
* This field is OPTIONAL.
317+
*/
318+
string description = 1;
319+
}
299320
}
300321
```
301322

@@ -365,6 +386,10 @@ Service. This API function is used by the node operator to delete a node.
365386
This API function MAY also be used by an Hiero network's governance
366387
structure to administratively delete a registered node when necessary.
367388

389+
If a `RegisteredNode` is present in the `associated_registered_nodes` list for
390+
any consensus `Node`, then that `RegisteredNode` cannot be deleted until it
391+
is first removed from the `associated_registered_nodes` list.
392+
368393
```protobuf
369394
message RegisteredNodeDeleteTransactionBody {
370395
/**
@@ -440,7 +465,7 @@ message RegisteredNodeUpdateTransactionBody {
440465
* If set, this list MUST NOT contain more than `50` entries.<br/>
441466
* If set, this list SHALL _replace_ the previous list.
442467
*/
443-
repeated com.hedera.hapi.node.addressbook.RegisteredServiceEndpoint service_endpoint = 4;
468+
repeated RegisteredServiceEndpoint service_endpoint = 4;
444469
445470
/**
446471
* An account identifier.<br/>
@@ -667,15 +692,32 @@ message NodeUpdateTransactionBody {
667692
* HIP-1137) that are operated by the same entity that operates this
668693
* consensus node.
669694
* <p>
670-
* This field is OPTIONAL and MAY be empty.<br/>
671-
* If set, this field SHALL overwrite any existing value.<br/>
695+
* This field is OPTIONAL.<br/>
696+
* If this field is not set, the current list SHALL NOT change.<br/>
697+
* If this field is set, but contains an empty list, any existing
698+
* associated registered nodes SHALL be removed.<br/>
672699
* This field MUST NOT contain more than twenty(20) entries.<br/>
673700
* Every entry in this list MUST be a valid `registered_node_id` for a
674701
* current registered node.
675702
*/
676-
repeated uint64 associated_registered_node = 11;
703+
AssociatedRegisteredNodeList associated_registered_node_list = 11;
677704
}
678705
706+
/**
707+
* A wrapper around a list of associated registered node identifiers.<br/>
708+
* This wrapper exists to enable an update transaction to differentiate
709+
* between a field that is not set and an empty list of values.
710+
* <p>
711+
* An _unset_ field of this type SHALL NOT modify existing values.<br/>
712+
* A _set_ field of this type with an empty list SHALL remove any
713+
* existing values.
714+
*/
715+
message AssociatedRegisteredNodeList {
716+
/**
717+
* A list of registered node identifiers.
718+
*/
719+
repeated uint64 associated_registered_node = 1;
720+
}
679721
```
680722

681723
### Mirror node update
@@ -728,8 +770,6 @@ current proposal.
728770
1. The modification of registered nodes and consensus nodes have
729771
vastly different risk profiles, and mandate very different signatory
730772
requirements.
731-
732-
## Open Issues
733773
1. Should we use a full Entity ID (0.0.1234 form) for registered node ID
734774
values, or is it reasonable to keep just a single integer (e.g. 28 or 18273)
735775
as the registered node ID.
@@ -745,6 +785,9 @@ current proposal.
745785
be integrated with community sentiment remains an open question.
746786
* This concept should be the subject of a future HIP.
747787

788+
## Open Issues
789+
None
790+
748791
## Copyright/license
749792
<!-- SPDX-License-Identifier: Apache-2.0 -->
750793
This document is licensed under the Apache License, Version 2.0 --

0 commit comments

Comments
 (0)