Skip to content
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

fix(gRPC): prevent concurrent map iteration and map write #1279

Merged
merged 2 commits into from
May 13, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .golangci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,6 @@ linters-settings:
excludes:
- G304
- G204
- G103 # TODO: enable me

stylecheck:
# TODO: enable ST1000 (at least one file in a package should have a package comment)
Expand Down
11 changes: 9 additions & 2 deletions sync/peerset/peer_set.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package peerset

import (
"maps"
"sync"
"time"

Expand Down Expand Up @@ -335,11 +336,17 @@ func (ps *PeerSet) ReceivedBytesMessageType(msgType message.Type) int64 {
}

func (ps *PeerSet) SentBytes() map[message.Type]int64 {
return ps.sentBytes
ps.lk.RLock()
defer ps.lk.RUnlock()

return maps.Clone(ps.sentBytes)
}

func (ps *PeerSet) ReceivedBytes() map[message.Type]int64 {
return ps.receivedBytes
ps.lk.RLock()
defer ps.lk.RUnlock()

return maps.Clone(ps.receivedBytes)
}

func (ps *PeerSet) StartedAt() time.Time {
Expand Down
52 changes: 26 additions & 26 deletions www/grpc/gen/dart/network.pb.dart
Original file line number Diff line number Diff line change
Expand Up @@ -61,20 +61,20 @@ class GetNetworkInfoRequest extends $pb.GeneratedMessage {
class GetNetworkInfoResponse extends $pb.GeneratedMessage {
static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'GetNetworkInfoResponse', package: const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'pactus'), createEmptyInstance: create)
..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'networkName')
..a<$core.int>(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'totalSentBytes', $pb.PbFieldType.OU3)
..a<$core.int>(3, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'totalReceivedBytes', $pb.PbFieldType.OU3)
..aInt64(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'totalSentBytes')
..aInt64(3, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'totalReceivedBytes')
..a<$core.int>(4, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'connectedPeersCount', $pb.PbFieldType.OU3)
..pc<PeerInfo>(5, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'connectedPeers', $pb.PbFieldType.PM, subBuilder: PeerInfo.create)
..m<$core.int, $fixnum.Int64>(6, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'sentBytes', entryClassName: 'GetNetworkInfoResponse.SentBytesEntry', keyFieldType: $pb.PbFieldType.OU3, valueFieldType: $pb.PbFieldType.OU6, packageName: const $pb.PackageName('pactus'))
..m<$core.int, $fixnum.Int64>(7, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'receivedBytes', entryClassName: 'GetNetworkInfoResponse.ReceivedBytesEntry', keyFieldType: $pb.PbFieldType.OU3, valueFieldType: $pb.PbFieldType.OU6, packageName: const $pb.PackageName('pactus'))
..m<$core.int, $fixnum.Int64>(6, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'sentBytes', entryClassName: 'GetNetworkInfoResponse.SentBytesEntry', keyFieldType: $pb.PbFieldType.O3, valueFieldType: $pb.PbFieldType.O6, packageName: const $pb.PackageName('pactus'))
..m<$core.int, $fixnum.Int64>(7, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'receivedBytes', entryClassName: 'GetNetworkInfoResponse.ReceivedBytesEntry', keyFieldType: $pb.PbFieldType.O3, valueFieldType: $pb.PbFieldType.O6, packageName: const $pb.PackageName('pactus'))
..hasRequiredFields = false
;

GetNetworkInfoResponse._() : super();
factory GetNetworkInfoResponse({
$core.String? networkName,
$core.int? totalSentBytes,
$core.int? totalReceivedBytes,
$fixnum.Int64? totalSentBytes,
$fixnum.Int64? totalReceivedBytes,
$core.int? connectedPeersCount,
$core.Iterable<PeerInfo>? connectedPeers,
$core.Map<$core.int, $fixnum.Int64>? sentBytes,
Expand Down Expand Up @@ -135,18 +135,18 @@ class GetNetworkInfoResponse extends $pb.GeneratedMessage {
void clearNetworkName() => clearField(1);

@$pb.TagNumber(2)
$core.int get totalSentBytes => $_getIZ(1);
$fixnum.Int64 get totalSentBytes => $_getI64(1);
@$pb.TagNumber(2)
set totalSentBytes($core.int v) { $_setUnsignedInt32(1, v); }
set totalSentBytes($fixnum.Int64 v) { $_setInt64(1, v); }
@$pb.TagNumber(2)
$core.bool hasTotalSentBytes() => $_has(1);
@$pb.TagNumber(2)
void clearTotalSentBytes() => clearField(2);

@$pb.TagNumber(3)
$core.int get totalReceivedBytes => $_getIZ(2);
$fixnum.Int64 get totalReceivedBytes => $_getI64(2);
@$pb.TagNumber(3)
set totalReceivedBytes($core.int v) { $_setUnsignedInt32(2, v); }
set totalReceivedBytes($fixnum.Int64 v) { $_setInt64(2, v); }
@$pb.TagNumber(3)
$core.bool hasTotalReceivedBytes() => $_has(2);
@$pb.TagNumber(3)
Expand Down Expand Up @@ -388,8 +388,8 @@ class PeerInfo extends $pb.GeneratedMessage {
..a<$core.int>(7, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'services', $pb.PbFieldType.OU3)
..a<$core.List<$core.int>>(8, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'lastBlockHash', $pb.PbFieldType.OY)
..a<$core.int>(9, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'height', $pb.PbFieldType.OU3)
..a<$core.int>(10, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'receivedMessages', $pb.PbFieldType.O3)
..a<$core.int>(11, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'invalidMessages', $pb.PbFieldType.O3)
..a<$core.int>(10, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'receivedBundles', $pb.PbFieldType.O3)
..a<$core.int>(11, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'invalidBundles', $pb.PbFieldType.O3)
..aInt64(12, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'lastSent')
..aInt64(13, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'lastReceived')
..m<$core.int, $fixnum.Int64>(14, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'sentBytes', entryClassName: 'PeerInfo.SentBytesEntry', keyFieldType: $pb.PbFieldType.O3, valueFieldType: $pb.PbFieldType.O6, packageName: const $pb.PackageName('pactus'))
Expand All @@ -413,8 +413,8 @@ class PeerInfo extends $pb.GeneratedMessage {
$core.int? services,
$core.List<$core.int>? lastBlockHash,
$core.int? height,
$core.int? receivedMessages,
$core.int? invalidMessages,
$core.int? receivedBundles,
$core.int? invalidBundles,
$fixnum.Int64? lastSent,
$fixnum.Int64? lastReceived,
$core.Map<$core.int, $fixnum.Int64>? sentBytes,
Expand Down Expand Up @@ -453,11 +453,11 @@ class PeerInfo extends $pb.GeneratedMessage {
if (height != null) {
_result.height = height;
}
if (receivedMessages != null) {
_result.receivedMessages = receivedMessages;
if (receivedBundles != null) {
_result.receivedBundles = receivedBundles;
}
if (invalidMessages != null) {
_result.invalidMessages = invalidMessages;
if (invalidBundles != null) {
_result.invalidBundles = invalidBundles;
}
if (lastSent != null) {
_result.lastSent = lastSent;
Expand Down Expand Up @@ -579,22 +579,22 @@ class PeerInfo extends $pb.GeneratedMessage {
void clearHeight() => clearField(9);

@$pb.TagNumber(10)
$core.int get receivedMessages => $_getIZ(9);
$core.int get receivedBundles => $_getIZ(9);
@$pb.TagNumber(10)
set receivedMessages($core.int v) { $_setSignedInt32(9, v); }
set receivedBundles($core.int v) { $_setSignedInt32(9, v); }
@$pb.TagNumber(10)
$core.bool hasReceivedMessages() => $_has(9);
$core.bool hasReceivedBundles() => $_has(9);
@$pb.TagNumber(10)
void clearReceivedMessages() => clearField(10);
void clearReceivedBundles() => clearField(10);

@$pb.TagNumber(11)
$core.int get invalidMessages => $_getIZ(10);
$core.int get invalidBundles => $_getIZ(10);
@$pb.TagNumber(11)
set invalidMessages($core.int v) { $_setSignedInt32(10, v); }
set invalidBundles($core.int v) { $_setSignedInt32(10, v); }
@$pb.TagNumber(11)
$core.bool hasInvalidMessages() => $_has(10);
$core.bool hasInvalidBundles() => $_has(10);
@$pb.TagNumber(11)
void clearInvalidMessages() => clearField(11);
void clearInvalidBundles() => clearField(11);

@$pb.TagNumber(12)
$fixnum.Int64 get lastSent => $_getI64(11);
Expand Down
20 changes: 10 additions & 10 deletions www/grpc/gen/dart/network.pbjson.dart
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ const GetNetworkInfoResponse$json = const {
'1': 'GetNetworkInfoResponse',
'2': const [
const {'1': 'network_name', '3': 1, '4': 1, '5': 9, '10': 'networkName'},
const {'1': 'total_sent_bytes', '3': 2, '4': 1, '5': 13, '10': 'totalSentBytes'},
const {'1': 'total_received_bytes', '3': 3, '4': 1, '5': 13, '10': 'totalReceivedBytes'},
const {'1': 'total_sent_bytes', '3': 2, '4': 1, '5': 3, '10': 'totalSentBytes'},
const {'1': 'total_received_bytes', '3': 3, '4': 1, '5': 3, '10': 'totalReceivedBytes'},
const {'1': 'connected_peers_count', '3': 4, '4': 1, '5': 13, '10': 'connectedPeersCount'},
const {'1': 'connected_peers', '3': 5, '4': 3, '5': 11, '6': '.pactus.PeerInfo', '10': 'connectedPeers'},
const {'1': 'sent_bytes', '3': 6, '4': 3, '5': 11, '6': '.pactus.GetNetworkInfoResponse.SentBytesEntry', '10': 'sentBytes'},
Expand All @@ -37,8 +37,8 @@ const GetNetworkInfoResponse$json = const {
const GetNetworkInfoResponse_SentBytesEntry$json = const {
'1': 'SentBytesEntry',
'2': const [
const {'1': 'key', '3': 1, '4': 1, '5': 13, '10': 'key'},
const {'1': 'value', '3': 2, '4': 1, '5': 4, '10': 'value'},
const {'1': 'key', '3': 1, '4': 1, '5': 5, '10': 'key'},
const {'1': 'value', '3': 2, '4': 1, '5': 3, '10': 'value'},
],
'7': const {'7': true},
};
Expand All @@ -47,14 +47,14 @@ const GetNetworkInfoResponse_SentBytesEntry$json = const {
const GetNetworkInfoResponse_ReceivedBytesEntry$json = const {
'1': 'ReceivedBytesEntry',
'2': const [
const {'1': 'key', '3': 1, '4': 1, '5': 13, '10': 'key'},
const {'1': 'value', '3': 2, '4': 1, '5': 4, '10': 'value'},
const {'1': 'key', '3': 1, '4': 1, '5': 5, '10': 'key'},
const {'1': 'value', '3': 2, '4': 1, '5': 3, '10': 'value'},
],
'7': const {'7': true},
};

/// Descriptor for `GetNetworkInfoResponse`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List getNetworkInfoResponseDescriptor = $convert.base64Decode('ChZHZXROZXR3b3JrSW5mb1Jlc3BvbnNlEiEKDG5ldHdvcmtfbmFtZRgBIAEoCVILbmV0d29ya05hbWUSKAoQdG90YWxfc2VudF9ieXRlcxgCIAEoDVIOdG90YWxTZW50Qnl0ZXMSMAoUdG90YWxfcmVjZWl2ZWRfYnl0ZXMYAyABKA1SEnRvdGFsUmVjZWl2ZWRCeXRlcxIyChVjb25uZWN0ZWRfcGVlcnNfY291bnQYBCABKA1SE2Nvbm5lY3RlZFBlZXJzQ291bnQSOQoPY29ubmVjdGVkX3BlZXJzGAUgAygLMhAucGFjdHVzLlBlZXJJbmZvUg5jb25uZWN0ZWRQZWVycxJMCgpzZW50X2J5dGVzGAYgAygLMi0ucGFjdHVzLkdldE5ldHdvcmtJbmZvUmVzcG9uc2UuU2VudEJ5dGVzRW50cnlSCXNlbnRCeXRlcxJYCg5yZWNlaXZlZF9ieXRlcxgHIAMoCzIxLnBhY3R1cy5HZXROZXR3b3JrSW5mb1Jlc3BvbnNlLlJlY2VpdmVkQnl0ZXNFbnRyeVINcmVjZWl2ZWRCeXRlcxo8Cg5TZW50Qnl0ZXNFbnRyeRIQCgNrZXkYASABKA1SA2tleRIUCgV2YWx1ZRgCIAEoBFIFdmFsdWU6AjgBGkAKElJlY2VpdmVkQnl0ZXNFbnRyeRIQCgNrZXkYASABKA1SA2tleRIUCgV2YWx1ZRgCIAEoBFIFdmFsdWU6AjgB');
final $typed_data.Uint8List getNetworkInfoResponseDescriptor = $convert.base64Decode('ChZHZXROZXR3b3JrSW5mb1Jlc3BvbnNlEiEKDG5ldHdvcmtfbmFtZRgBIAEoCVILbmV0d29ya05hbWUSKAoQdG90YWxfc2VudF9ieXRlcxgCIAEoA1IOdG90YWxTZW50Qnl0ZXMSMAoUdG90YWxfcmVjZWl2ZWRfYnl0ZXMYAyABKANSEnRvdGFsUmVjZWl2ZWRCeXRlcxIyChVjb25uZWN0ZWRfcGVlcnNfY291bnQYBCABKA1SE2Nvbm5lY3RlZFBlZXJzQ291bnQSOQoPY29ubmVjdGVkX3BlZXJzGAUgAygLMhAucGFjdHVzLlBlZXJJbmZvUg5jb25uZWN0ZWRQZWVycxJMCgpzZW50X2J5dGVzGAYgAygLMi0ucGFjdHVzLkdldE5ldHdvcmtJbmZvUmVzcG9uc2UuU2VudEJ5dGVzRW50cnlSCXNlbnRCeXRlcxJYCg5yZWNlaXZlZF9ieXRlcxgHIAMoCzIxLnBhY3R1cy5HZXROZXR3b3JrSW5mb1Jlc3BvbnNlLlJlY2VpdmVkQnl0ZXNFbnRyeVINcmVjZWl2ZWRCeXRlcxo8Cg5TZW50Qnl0ZXNFbnRyeRIQCgNrZXkYASABKAVSA2tleRIUCgV2YWx1ZRgCIAEoA1IFdmFsdWU6AjgBGkAKElJlY2VpdmVkQnl0ZXNFbnRyeRIQCgNrZXkYASABKAVSA2tleRIUCgV2YWx1ZRgCIAEoA1IFdmFsdWU6AjgB');
@$core.Deprecated('Use getNodeInfoRequestDescriptor instead')
const GetNodeInfoRequest$json = const {
'1': 'GetNodeInfoRequest',
Expand Down Expand Up @@ -96,8 +96,8 @@ const PeerInfo$json = const {
const {'1': 'services', '3': 7, '4': 1, '5': 13, '10': 'services'},
const {'1': 'last_block_hash', '3': 8, '4': 1, '5': 12, '10': 'lastBlockHash'},
const {'1': 'height', '3': 9, '4': 1, '5': 13, '10': 'height'},
const {'1': 'received_messages', '3': 10, '4': 1, '5': 5, '10': 'receivedMessages'},
const {'1': 'invalid_messages', '3': 11, '4': 1, '5': 5, '10': 'invalidMessages'},
const {'1': 'received_bundles', '3': 10, '4': 1, '5': 5, '10': 'receivedBundles'},
const {'1': 'invalid_bundles', '3': 11, '4': 1, '5': 5, '10': 'invalidBundles'},
const {'1': 'last_sent', '3': 12, '4': 1, '5': 3, '10': 'lastSent'},
const {'1': 'last_received', '3': 13, '4': 1, '5': 3, '10': 'lastReceived'},
const {'1': 'sent_bytes', '3': 14, '4': 3, '5': 11, '6': '.pactus.PeerInfo.SentBytesEntry', '10': 'sentBytes'},
Expand Down Expand Up @@ -132,7 +132,7 @@ const PeerInfo_ReceivedBytesEntry$json = const {
};

/// Descriptor for `PeerInfo`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List peerInfoDescriptor = $convert.base64Decode('CghQZWVySW5mbxIWCgZzdGF0dXMYASABKAVSBnN0YXR1cxIYCgdtb25pa2VyGAIgASgJUgdtb25pa2VyEhQKBWFnZW50GAMgASgJUgVhZ2VudBIXCgdwZWVyX2lkGAQgASgMUgZwZWVySWQSJQoOY29uc2Vuc3VzX2tleXMYBSADKAlSDWNvbnNlbnN1c0tleXMSKwoRY29uc2Vuc3VzX2FkZHJlc3MYBiADKAlSEGNvbnNlbnN1c0FkZHJlc3MSGgoIc2VydmljZXMYByABKA1SCHNlcnZpY2VzEiYKD2xhc3RfYmxvY2tfaGFzaBgIIAEoDFINbGFzdEJsb2NrSGFzaBIWCgZoZWlnaHQYCSABKA1SBmhlaWdodBIrChFyZWNlaXZlZF9tZXNzYWdlcxgKIAEoBVIQcmVjZWl2ZWRNZXNzYWdlcxIpChBpbnZhbGlkX21lc3NhZ2VzGAsgASgFUg9pbnZhbGlkTWVzc2FnZXMSGwoJbGFzdF9zZW50GAwgASgDUghsYXN0U2VudBIjCg1sYXN0X3JlY2VpdmVkGA0gASgDUgxsYXN0UmVjZWl2ZWQSPgoKc2VudF9ieXRlcxgOIAMoCzIfLnBhY3R1cy5QZWVySW5mby5TZW50Qnl0ZXNFbnRyeVIJc2VudEJ5dGVzEkoKDnJlY2VpdmVkX2J5dGVzGA8gAygLMiMucGFjdHVzLlBlZXJJbmZvLlJlY2VpdmVkQnl0ZXNFbnRyeVINcmVjZWl2ZWRCeXRlcxIYCgdhZGRyZXNzGBAgASgJUgdhZGRyZXNzEhwKCWRpcmVjdGlvbhgRIAEoCVIJZGlyZWN0aW9uEhwKCXByb3RvY29scxgSIAMoCVIJcHJvdG9jb2xzEiUKDnRvdGFsX3Nlc3Npb25zGBMgASgFUg10b3RhbFNlc3Npb25zEi0KEmNvbXBsZXRlZF9zZXNzaW9ucxgUIAEoBVIRY29tcGxldGVkU2Vzc2lvbnMaPAoOU2VudEJ5dGVzRW50cnkSEAoDa2V5GAEgASgFUgNrZXkSFAoFdmFsdWUYAiABKANSBXZhbHVlOgI4ARpAChJSZWNlaXZlZEJ5dGVzRW50cnkSEAoDa2V5GAEgASgFUgNrZXkSFAoFdmFsdWUYAiABKANSBXZhbHVlOgI4AQ==');
final $typed_data.Uint8List peerInfoDescriptor = $convert.base64Decode('CghQZWVySW5mbxIWCgZzdGF0dXMYASABKAVSBnN0YXR1cxIYCgdtb25pa2VyGAIgASgJUgdtb25pa2VyEhQKBWFnZW50GAMgASgJUgVhZ2VudBIXCgdwZWVyX2lkGAQgASgMUgZwZWVySWQSJQoOY29uc2Vuc3VzX2tleXMYBSADKAlSDWNvbnNlbnN1c0tleXMSKwoRY29uc2Vuc3VzX2FkZHJlc3MYBiADKAlSEGNvbnNlbnN1c0FkZHJlc3MSGgoIc2VydmljZXMYByABKA1SCHNlcnZpY2VzEiYKD2xhc3RfYmxvY2tfaGFzaBgIIAEoDFINbGFzdEJsb2NrSGFzaBIWCgZoZWlnaHQYCSABKA1SBmhlaWdodBIpChByZWNlaXZlZF9idW5kbGVzGAogASgFUg9yZWNlaXZlZEJ1bmRsZXMSJwoPaW52YWxpZF9idW5kbGVzGAsgASgFUg5pbnZhbGlkQnVuZGxlcxIbCglsYXN0X3NlbnQYDCABKANSCGxhc3RTZW50EiMKDWxhc3RfcmVjZWl2ZWQYDSABKANSDGxhc3RSZWNlaXZlZBI+CgpzZW50X2J5dGVzGA4gAygLMh8ucGFjdHVzLlBlZXJJbmZvLlNlbnRCeXRlc0VudHJ5UglzZW50Qnl0ZXMSSgoOcmVjZWl2ZWRfYnl0ZXMYDyADKAsyIy5wYWN0dXMuUGVlckluZm8uUmVjZWl2ZWRCeXRlc0VudHJ5Ug1yZWNlaXZlZEJ5dGVzEhgKB2FkZHJlc3MYECABKAlSB2FkZHJlc3MSHAoJZGlyZWN0aW9uGBEgASgJUglkaXJlY3Rpb24SHAoJcHJvdG9jb2xzGBIgAygJUglwcm90b2NvbHMSJQoOdG90YWxfc2Vzc2lvbnMYEyABKAVSDXRvdGFsU2Vzc2lvbnMSLQoSY29tcGxldGVkX3Nlc3Npb25zGBQgASgFUhFjb21wbGV0ZWRTZXNzaW9ucxo8Cg5TZW50Qnl0ZXNFbnRyeRIQCgNrZXkYASABKAVSA2tleRIUCgV2YWx1ZRgCIAEoA1IFdmFsdWU6AjgBGkAKElJlY2VpdmVkQnl0ZXNFbnRyeRIQCgNrZXkYASABKAVSA2tleRIUCgV2YWx1ZRgCIAEoA1IFdmFsdWU6AjgB');
const $core.Map<$core.String, $core.dynamic> NetworkServiceBase$json = const {
'1': 'Network',
'2': const [
Expand Down
24 changes: 12 additions & 12 deletions www/grpc/gen/docs/grpc.md
Original file line number Diff line number Diff line change
Expand Up @@ -2069,13 +2069,13 @@ GetNetworkInfoResponse
</tr><tr>
<td class="fw-bold">total_sent_bytes</td>
<td>
<a href="#uint32">uint32</a>
<a href="#int64">int64</a>
</td>
<td>Total bytes sent across the network. </td>
</tr><tr>
<td class="fw-bold">total_received_bytes</td>
<td>
<a href="#uint32">uint32</a>
<a href="#int64">int64</a>
</td>
<td>Total bytes received across the network. </td>
</tr><tr>
Expand Down Expand Up @@ -2119,13 +2119,13 @@ GetNetworkInfoResponse.ReceivedBytesEntry
<tr>
<td class="fw-bold">key</td>
<td>
<a href="#uint32">uint32</a>
<a href="#int32">int32</a>
</td>
<td> </td>
</tr><tr>
<td class="fw-bold">value</td>
<td>
<a href="#uint64">uint64</a>
<a href="#int64">int64</a>
</td>
<td> </td>
</tr>
Expand All @@ -2145,13 +2145,13 @@ GetNetworkInfoResponse.SentBytesEntry
<tr>
<td class="fw-bold">key</td>
<td>
<a href="#uint32">uint32</a>
<a href="#int32">int32</a>
</td>
<td> </td>
</tr><tr>
<td class="fw-bold">value</td>
<td>
<a href="#uint64">uint64</a>
<a href="#int64">int64</a>
</td>
<td> </td>
</tr>
Expand Down Expand Up @@ -2315,29 +2315,29 @@ PeerInfo
</td>
<td>Height of the peer in the blockchain. </td>
</tr><tr>
<td class="fw-bold">received_messages</td>
<td class="fw-bold">received_bundles</td>
<td>
<a href="#int32">int32</a>
</td>
<td>Count of received messages. </td>
<td>Count of received bundles. </td>
</tr><tr>
<td class="fw-bold">invalid_messages</td>
<td class="fw-bold">invalid_bundles</td>
<td>
<a href="#int32">int32</a>
</td>
<td>Count of invalid messages received. </td>
<td>Count of invalid bundles received. </td>
</tr><tr>
<td class="fw-bold">last_sent</td>
<td>
<a href="#int64">int64</a>
</td>
<td>Timestamp of the last sent message. </td>
<td>Timestamp of the last sent bundle. </td>
</tr><tr>
<td class="fw-bold">last_received</td>
<td>
<a href="#int64">int64</a>
</td>
<td>Timestamp of the last received message. </td>
<td>Timestamp of the last received bundle. </td>
</tr><tr>
<td class="fw-bold">sent_bytes</td>
<td>repeated
Expand Down
Loading
Loading