-
Notifications
You must be signed in to change notification settings - Fork 144
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
0.0.101 NodeAddressBook contains duplicate entries for each distinct IP #750
Comments
The above changes are expected to be backward compatible, until the deprecated fields are actually removed from the protobuf messages.
Tests:
|
|
issues created in protobufs repo hashgraph/hedera-protobufs-java#60 and |
|
None of the fields were marked |
|
My (likely incorrect recollection of the deprecated fields was the following...Since the 2 Address Book files would contain the 2 messages listed below. If we remove the fields to be marked with [deprecated=true] from the message and therefore the AB file 0.0.101 then we will break clients that parse the file today. @steven-sheehy would you please confirm. Thanks |
I don't think that is true, but would be good if you guys can verify with a test. Someone parsing 0.0.101 after these changes are live on mainnet can change nothing and continue to use their previous protos (e.g. |
Address Book messages have been updated to reflect @steven-sheehy & @lbaird proposals. Engineering @Neeharika-Sompalli @anighanta will test enhance YAHCLI tool with options to read and write existing and new versions of NodeAddressBook and NodeAddressBookAbbreviated YAHCLI Operations on Files 0.0.101 or 0.0.102 Nodes on (version 0.13.0)
Client is still on (version 0.12.0)
Client moved on to (version 0.13.0)Test case 1
Test case 2 Client moved on to (version 0.13.0)
AddressBook formats test cases validated: |
As per review comments in hashgraph/hedera-protobufs#22 , changes for |
@steven-sheehy @noshmody @lbaird @Neeharika-Sompalli @noshmody suggested to use the new |
Right, we had said on the call both files should be generated by |
We have aligned to the following changes after discussion with @lbaird and @steven-sheehy the two file names will be:
The nested objects will be:
|
@donaldthibeau @steven-sheehy as Platform also contains Sample Error while
|
@noshmody can you please provide the final naming convention and update the issue. |
@SimiHunjan These are the new message names and structures. Version 0.13.0 message NodeEndpoint {
string ipAddress = 1; // The IP address of the node
string port = 2; // The port of the node
}
message NodeAddressForClients { // All the information required to connect to the network
int64 nodeId = 5; // A non-sequential identifier for the node. This value is the key between the full and abbreviated address books
AccountID nodeAccountId = 6; // The account to be paid for queries and transactions sent to this node
bytes nodeCertHash = 7; // A hash of the X509 cert used for gRPC traffic to this node
repeated NodeEndpoint = 8; // A node's IP address and port
}
message AddressBookForClients {
repeated NodeAddressForClients nodeAddressForClients = 1; // Contains minimal node details for the network
} message NodeAddress { // All the address book information
bytes ipAddress = 1 [deprecated=true]; // The IP address of the Node with separator & octets
int32 portno = 2 [deprecated=true]; // The port number of the grpc server for the node
bytes memo = 3 [deprecated=true]; // The memo field of the node (usage to store account ID is deprecated)
string RSA_PubKey = 4; // The RSA public key of the node
int64 nodeId = 5; // A non-sequential identifier for the node. This value is the key between the full and abbreviated address books
AccountID nodeAccountId = 6; // The account to be paid for queries and transactions sent to this node
bytes nodeCertHash = 7; // A hash of the X509 cert used for gRPC traffic to this node
repeated NodeEndpoint = 8; // A node's IP address and port
string description = 9; // A description of the node. Max 100 bytes.
int64 stake = 10; // The amount of tinybars staked to this node
}
message AddressBook {
repeated NodeAddress nodeAddress = 1; // Contains all details of the nodes for the network
} |
RationaleAfter further discussions, the above design has been noted to causes some pain points:
ProposalKeep the same message structure for both /*
Contains the IP address and the port representing a service endpoint of a Node in a network. Used to reach the Hedera API and submit transactions to the network.
*/
message ServiceEndpoint {
bytes ipAddressV4 = 1; // The 32-bit IP address of the node encoded in left to right order (e.g. 127.0.0.1 has 127 as its first byte)
int32 port = 2; // The port of the node
}
/*
The data about a Node – including IP Address, and the crypto account associated with the Node.
All fields are populated in the 0.0.102 address book file while only fields that start with # are populated in the 0.0.101 address book file.
*/
message NodeAddress {
bytes ipAddress = 1 [deprecated=true]; // The IP address of the Node with separator & octets encoded in UTF-8. Usage is deprecated, ServiceEndpoint is preferred to retrieve a node's list of IP addresses and ports.
int32 portno = 2 [deprecated=true]; // The port number of the grpc server for the node. Usage is deprecated, ServiceEndpoint is preferred to retrieve a node's list of IP addresses and ports.
bytes memo = 3 [deprecated=true]; // Usage is deprecated, nodeAccountId is preferred to retrieve a node's account ID.
string RSA_PubKey = 4; // The x509 RSA public key of the node encoded in hex format.
int64 nodeId = 5; // # A non-sequential identifier for the node.
AccountID nodeAccountId = 6; // # The account to be paid for queries and transactions sent to this node.
bytes nodeCertHash = 7; // # A hash of the X509 cert used for gRPC traffic to this node.
repeated ServiceEndpoint serviceEndpoint = 8; // # A node's service IP addresses and ports.
string description = 9; // A description of the node. Max 100 bytes.
int64 stake = 10; // The amount of tinybars staked to this node.
}
/*
A list of nodes and their metadata that contains all details of the nodes for the network
*/
message NodeAddressBook {
repeated NodeAddress nodeAddress = 1; // Metadata of nodes on the network
} Compatibility Matrix
|
Summary
As a Hedera Services client, I need the address book to contain one entry per node so it's easier to consume and doesn't duplicate information. Currently, for the 0.0.101 address book that contains IP address information it duplicates each
NodeAddress
for each distinct IP that that node has. This is confusing since the node count shows as 39 in mainnet (viaNodeAddressBook.getNodeAddressCount()
) despite there only being 13ish nodes. It's also wasteful to duplicate information as every client who wants to communicate with the network will be pulling this file to get up to date IP information.The proto currently looks like this: Version 0.12.0
Possible resolution
ipAddress
to berepeated
, but that's probably not backwards compatible.repeated bytes ipAddresses = 8;
field and mark the other field as deprecated.ipAddress
with a comma separate concatenation of addresses.File 0.0.101 will be NodeAddressBookAbbreviated
File 0.0.102 will be NodeAddressBook
Version 0.13.0
The text was updated successfully, but these errors were encountered: