From 5329f189381f0746e1c568edc117619531731372 Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:20:18 -0500 Subject: [PATCH 01/28] Revert "update go-libp2p to v0.18.0-rc5" This reverts commit a57594729412710c32077d574424482b6190c1b1. --- go.mod | 4 ++-- go.sum | 11 +++++------ 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/go.mod b/go.mod index 51623166c6f..bd3ab2f4ac7 100644 --- a/go.mod +++ b/go.mod @@ -110,7 +110,7 @@ require ( github.com/kelseyhightower/envconfig v1.4.0 github.com/libp2p/go-buffer-pool v0.0.2 github.com/libp2p/go-eventbus v0.2.1 - github.com/libp2p/go-libp2p v0.18.0-rc5 + github.com/libp2p/go-libp2p v0.18.0-rc4 github.com/libp2p/go-libp2p-connmgr v0.3.1 // indirect github.com/libp2p/go-libp2p-core v0.14.0 github.com/libp2p/go-libp2p-discovery v0.6.0 @@ -122,7 +122,7 @@ require ( github.com/libp2p/go-libp2p-record v0.1.3 github.com/libp2p/go-libp2p-resource-manager v0.1.3 github.com/libp2p/go-libp2p-routing-helpers v0.2.3 - github.com/libp2p/go-libp2p-swarm v0.10.2 + github.com/libp2p/go-libp2p-swarm v0.10.1 github.com/libp2p/go-libp2p-tls v0.3.1 github.com/libp2p/go-libp2p-yamux v0.8.2 github.com/libp2p/go-maddr-filter v0.1.0 diff --git a/go.sum b/go.sum index 08eb1c9ee0b..6b725b5df74 100644 --- a/go.sum +++ b/go.sum @@ -995,8 +995,8 @@ github.com/libp2p/go-libp2p v0.14.4/go.mod h1:EIRU0Of4J5S8rkockZM7eJp2S0UrCyi55m github.com/libp2p/go-libp2p v0.16.0/go.mod h1:ump42BsirwAWxKzsCiFnTtN1Yc+DuPu76fyMX364/O4= github.com/libp2p/go-libp2p v0.17.0/go.mod h1:Fkin50rsGdv5mm5BshBUtPRZknt9esfmYXBOYcwOTgw= github.com/libp2p/go-libp2p v0.18.0-rc1/go.mod h1:RgYlH7IIWHXREimC92bw5Lg1V2R5XmSzuLHb5fTnr+8= -github.com/libp2p/go-libp2p v0.18.0-rc5 h1:88wWDHb9nNo0vBNCupLde3OTnFAkugOCNkrDfl3ivK4= -github.com/libp2p/go-libp2p v0.18.0-rc5/go.mod h1:aZPS5l84bDvCvP4jkyEUT/J6YOpUq33Fgqrs3K59mpI= +github.com/libp2p/go-libp2p v0.18.0-rc4 h1:OUsSbeu7q+Ck/bV9wHDxFzb08ORqBupHhpCmRBhWrJ8= +github.com/libp2p/go-libp2p v0.18.0-rc4/go.mod h1:wzmsk1ioOq9FGQys2BN5BIw4nugP6+R+CyW3JbPEbbs= github.com/libp2p/go-libp2p-asn-util v0.0.0-20200825225859-85005c6cf052/go.mod h1:nRMRTab+kZuk0LnKZpxhOVH/ndsdr2Nr//Zltc/vwgo= github.com/libp2p/go-libp2p-asn-util v0.1.0 h1:rABPCO77SjdbJ/eJ/ynIo8vWICy1VEnL5JAxJbQLo1E= github.com/libp2p/go-libp2p-asn-util v0.1.0/go.mod h1:wu+AnM9Ii2KgO5jMmS1rz9dvzTdj8BXqsPR9HR0XB7I= @@ -1181,8 +1181,8 @@ github.com/libp2p/go-libp2p-swarm v0.5.3/go.mod h1:NBn7eNW2lu568L7Ns9wdFrOhgRlkR github.com/libp2p/go-libp2p-swarm v0.8.0/go.mod h1:sOMp6dPuqco0r0GHTzfVheVBh6UEL0L1lXUZ5ot2Fvc= github.com/libp2p/go-libp2p-swarm v0.9.0/go.mod h1:2f8d8uxTJmpeqHF/1ujjdXZp+98nNIbujVOMEZxCbZ8= github.com/libp2p/go-libp2p-swarm v0.10.0/go.mod h1:71ceMcV6Rg/0rIQ97rsZWMzto1l9LnNquef+efcRbmA= -github.com/libp2p/go-libp2p-swarm v0.10.2 h1:UaXf+CTq6Ns1N2V1EgqJ9Q3xaRsiN7ImVlDMpirMAWw= -github.com/libp2p/go-libp2p-swarm v0.10.2/go.mod h1:Pdkq0QU5a+qu+oyqIV3bknMsnzk9lnNyKvB9acJ5aZs= +github.com/libp2p/go-libp2p-swarm v0.10.1 h1:lXW3pgGt+BVmkzcFX61erX7l6Lt+WAamNhwa2Kf3eJM= +github.com/libp2p/go-libp2p-swarm v0.10.1/go.mod h1:Pdkq0QU5a+qu+oyqIV3bknMsnzk9lnNyKvB9acJ5aZs= github.com/libp2p/go-libp2p-testing v0.0.1/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= github.com/libp2p/go-libp2p-testing v0.0.2/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= github.com/libp2p/go-libp2p-testing v0.0.3/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= @@ -1298,9 +1298,8 @@ github.com/libp2p/go-tcp-transport v0.2.3/go.mod h1:9dvr03yqrPyYGIEN6Dy5UvdJZjyP github.com/libp2p/go-tcp-transport v0.2.4/go.mod h1:9dvr03yqrPyYGIEN6Dy5UvdJZjyPFvl1S/igQ5QD1SU= github.com/libp2p/go-tcp-transport v0.2.7/go.mod h1:lue9p1b3VmZj1MhhEGB/etmvF/nBQ0X9CW2DutBT3MM= github.com/libp2p/go-tcp-transport v0.4.0/go.mod h1:0y52Rwrn4076xdJYu/51/qJIdxz+EWDAOG2S45sV3VI= +github.com/libp2p/go-tcp-transport v0.5.0 h1:3ZPW8HAuyRAuFzyabE0hSrCXKKSWzROnZZX7DtcIatY= github.com/libp2p/go-tcp-transport v0.5.0/go.mod h1:UPPL0DIjQqiWRwVAb+CEQlaAG0rp/mCqJfIhFcLHc4Y= -github.com/libp2p/go-tcp-transport v0.5.1 h1:edOOs688VLZAozWC7Kj5/6HHXKNwi9M6wgRmmLa8M6Q= -github.com/libp2p/go-tcp-transport v0.5.1/go.mod h1:UPPL0DIjQqiWRwVAb+CEQlaAG0rp/mCqJfIhFcLHc4Y= github.com/libp2p/go-testutil v0.0.1/go.mod h1:iAcJc/DKJQanJ5ws2V+u5ywdL2n12X1WbbEG+Jjy69I= github.com/libp2p/go-testutil v0.1.0/go.mod h1:81b2n5HypcVyrCg/MJx4Wgfp/VHojytjVe/gLzZ2Ehc= github.com/libp2p/go-ws-transport v0.0.5/go.mod h1:Qbl4BxPfXXhhd/o0wcrgoaItHqA9tnZjoFZnxykuaXU= From 7207740af42e3743ca885a939a0b3bbdc198bef7 Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:21:10 -0500 Subject: [PATCH 02/28] Revert "update libp2p to v0.18.0-rc4" This reverts commit 80e9f762610cc70807b33bf77b99dbb4f58b173b. --- go.mod | 6 +++--- go.sum | 10 ++++------ 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/go.mod b/go.mod index bd3ab2f4ac7..43a5a3850d4 100644 --- a/go.mod +++ b/go.mod @@ -110,7 +110,7 @@ require ( github.com/kelseyhightower/envconfig v1.4.0 github.com/libp2p/go-buffer-pool v0.0.2 github.com/libp2p/go-eventbus v0.2.1 - github.com/libp2p/go-libp2p v0.18.0-rc4 + github.com/libp2p/go-libp2p v0.18.0-rc3 github.com/libp2p/go-libp2p-connmgr v0.3.1 // indirect github.com/libp2p/go-libp2p-core v0.14.0 github.com/libp2p/go-libp2p-discovery v0.6.0 @@ -118,13 +118,13 @@ require ( github.com/libp2p/go-libp2p-noise v0.3.0 github.com/libp2p/go-libp2p-peerstore v0.6.0 github.com/libp2p/go-libp2p-pubsub v0.6.1 - github.com/libp2p/go-libp2p-quic-transport v0.16.1 + github.com/libp2p/go-libp2p-quic-transport v0.16.0 github.com/libp2p/go-libp2p-record v0.1.3 github.com/libp2p/go-libp2p-resource-manager v0.1.3 github.com/libp2p/go-libp2p-routing-helpers v0.2.3 github.com/libp2p/go-libp2p-swarm v0.10.1 github.com/libp2p/go-libp2p-tls v0.3.1 - github.com/libp2p/go-libp2p-yamux v0.8.2 + github.com/libp2p/go-libp2p-yamux v0.8.1 github.com/libp2p/go-maddr-filter v0.1.0 github.com/mattn/go-isatty v0.0.14 github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 diff --git a/go.sum b/go.sum index 6b725b5df74..5162d7084f8 100644 --- a/go.sum +++ b/go.sum @@ -995,8 +995,8 @@ github.com/libp2p/go-libp2p v0.14.4/go.mod h1:EIRU0Of4J5S8rkockZM7eJp2S0UrCyi55m github.com/libp2p/go-libp2p v0.16.0/go.mod h1:ump42BsirwAWxKzsCiFnTtN1Yc+DuPu76fyMX364/O4= github.com/libp2p/go-libp2p v0.17.0/go.mod h1:Fkin50rsGdv5mm5BshBUtPRZknt9esfmYXBOYcwOTgw= github.com/libp2p/go-libp2p v0.18.0-rc1/go.mod h1:RgYlH7IIWHXREimC92bw5Lg1V2R5XmSzuLHb5fTnr+8= -github.com/libp2p/go-libp2p v0.18.0-rc4 h1:OUsSbeu7q+Ck/bV9wHDxFzb08ORqBupHhpCmRBhWrJ8= -github.com/libp2p/go-libp2p v0.18.0-rc4/go.mod h1:wzmsk1ioOq9FGQys2BN5BIw4nugP6+R+CyW3JbPEbbs= +github.com/libp2p/go-libp2p v0.18.0-rc3 h1:tI+dAFDgOCeHRF6FgvXpqbrVz+ZFabX/pXO2BUdHu4o= +github.com/libp2p/go-libp2p v0.18.0-rc3/go.mod h1:WYL+Xw1iuwi6rdfzw5VIEpD+HqzYucHZ6fcUuumbI3M= github.com/libp2p/go-libp2p-asn-util v0.0.0-20200825225859-85005c6cf052/go.mod h1:nRMRTab+kZuk0LnKZpxhOVH/ndsdr2Nr//Zltc/vwgo= github.com/libp2p/go-libp2p-asn-util v0.1.0 h1:rABPCO77SjdbJ/eJ/ynIo8vWICy1VEnL5JAxJbQLo1E= github.com/libp2p/go-libp2p-asn-util v0.1.0/go.mod h1:wu+AnM9Ii2KgO5jMmS1rz9dvzTdj8BXqsPR9HR0XB7I= @@ -1148,9 +1148,8 @@ github.com/libp2p/go-libp2p-quic-transport v0.11.2/go.mod h1:wlanzKtIh6pHrq+0U3p github.com/libp2p/go-libp2p-quic-transport v0.13.0/go.mod h1:39/ZWJ1TW/jx1iFkKzzUg00W6tDJh73FC0xYudjr7Hc= github.com/libp2p/go-libp2p-quic-transport v0.15.0/go.mod h1:wv4uGwjcqe8Mhjj7N/Ic0aKjA+/10UnMlSzLO0yRpYQ= github.com/libp2p/go-libp2p-quic-transport v0.15.2/go.mod h1:wv4uGwjcqe8Mhjj7N/Ic0aKjA+/10UnMlSzLO0yRpYQ= +github.com/libp2p/go-libp2p-quic-transport v0.16.0 h1:aVg9/jr+R2esov5sH7wkXrmYmqJiUjtLMLYX3L9KYdY= github.com/libp2p/go-libp2p-quic-transport v0.16.0/go.mod h1:1BXjVMzr+w7EkPfiHkKnwsWjPjtfaNT0q8RS3tGDvEQ= -github.com/libp2p/go-libp2p-quic-transport v0.16.1 h1:N/XqYXHurphPLDfXYhll8NyqzdZYQqAF4GIr7+SmLV8= -github.com/libp2p/go-libp2p-quic-transport v0.16.1/go.mod h1:1BXjVMzr+w7EkPfiHkKnwsWjPjtfaNT0q8RS3tGDvEQ= github.com/libp2p/go-libp2p-record v0.0.1/go.mod h1:grzqg263Rug/sRex85QrDOLntdFAymLDLm7lxMgU79Q= github.com/libp2p/go-libp2p-record v0.1.0/go.mod h1:ujNc8iuE5dlKWVy6wuL6dd58t0n7xI4hAIl8pE6wu5Q= github.com/libp2p/go-libp2p-record v0.1.1/go.mod h1:VRgKajOyMVgP/F0L5g3kH7SVskp17vFi2xheb5uMJtg= @@ -1230,9 +1229,8 @@ github.com/libp2p/go-libp2p-yamux v0.5.4/go.mod h1:tfrXbyaTqqSU654GTvK3ocnSZL3Bu github.com/libp2p/go-libp2p-yamux v0.6.0/go.mod h1:MRhd6mAYnFRnSISp4M8i0ClV/j+mWHo2mYLifWGw33k= github.com/libp2p/go-libp2p-yamux v0.7.0/go.mod h1:fMyA0CsPfHkIuBU0wjRGrCjTBFiXTXxG0k5M4ETv+08= github.com/libp2p/go-libp2p-yamux v0.8.0/go.mod h1:yTkPgN2ib8FHyU1ZcVD7aelzyAqXXwEPbyx+aSKm9h8= +github.com/libp2p/go-libp2p-yamux v0.8.1 h1:pi7zUeZ4Z9TpbUMntvSvoP3dFD4SEw/VPybxBcOZGzg= github.com/libp2p/go-libp2p-yamux v0.8.1/go.mod h1:rUozF8Jah2dL9LLGyBaBeTQeARdwhefMCTQVQt6QobE= -github.com/libp2p/go-libp2p-yamux v0.8.2 h1:6GKWntresp0TFxMP/oSoH96nV8XKJRdynXsdp43dn0Y= -github.com/libp2p/go-libp2p-yamux v0.8.2/go.mod h1:rUozF8Jah2dL9LLGyBaBeTQeARdwhefMCTQVQt6QobE= github.com/libp2p/go-maddr-filter v0.0.1/go.mod h1:6eT12kSQMA9x2pvFQa+xesMKUBlj9VImZbj3B9FBH/Q= github.com/libp2p/go-maddr-filter v0.0.4/go.mod h1:6eT12kSQMA9x2pvFQa+xesMKUBlj9VImZbj3B9FBH/Q= github.com/libp2p/go-maddr-filter v0.0.5/go.mod h1:Jk+36PMfIqCJhAnaASRH83bdAvfDRp/w6ENFaC9bG+M= From 94678bacea480310987556bab7d5038dad963507 Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:21:31 -0500 Subject: [PATCH 03/28] Revert "update go-libp2p to v0.18.0-rc3" This reverts commit e78c4ab9b302a9fd4c00449d3143145b7ff3f234. --- go.mod | 4 ++-- go.sum | 11 +++++------ 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/go.mod b/go.mod index 43a5a3850d4..9e243483339 100644 --- a/go.mod +++ b/go.mod @@ -110,7 +110,7 @@ require ( github.com/kelseyhightower/envconfig v1.4.0 github.com/libp2p/go-buffer-pool v0.0.2 github.com/libp2p/go-eventbus v0.2.1 - github.com/libp2p/go-libp2p v0.18.0-rc3 + github.com/libp2p/go-libp2p v0.18.0-rc2 github.com/libp2p/go-libp2p-connmgr v0.3.1 // indirect github.com/libp2p/go-libp2p-core v0.14.0 github.com/libp2p/go-libp2p-discovery v0.6.0 @@ -120,7 +120,7 @@ require ( github.com/libp2p/go-libp2p-pubsub v0.6.1 github.com/libp2p/go-libp2p-quic-transport v0.16.0 github.com/libp2p/go-libp2p-record v0.1.3 - github.com/libp2p/go-libp2p-resource-manager v0.1.3 + github.com/libp2p/go-libp2p-resource-manager v0.1.2 github.com/libp2p/go-libp2p-routing-helpers v0.2.3 github.com/libp2p/go-libp2p-swarm v0.10.1 github.com/libp2p/go-libp2p-tls v0.3.1 diff --git a/go.sum b/go.sum index 5162d7084f8..48c9ce0903f 100644 --- a/go.sum +++ b/go.sum @@ -995,8 +995,8 @@ github.com/libp2p/go-libp2p v0.14.4/go.mod h1:EIRU0Of4J5S8rkockZM7eJp2S0UrCyi55m github.com/libp2p/go-libp2p v0.16.0/go.mod h1:ump42BsirwAWxKzsCiFnTtN1Yc+DuPu76fyMX364/O4= github.com/libp2p/go-libp2p v0.17.0/go.mod h1:Fkin50rsGdv5mm5BshBUtPRZknt9esfmYXBOYcwOTgw= github.com/libp2p/go-libp2p v0.18.0-rc1/go.mod h1:RgYlH7IIWHXREimC92bw5Lg1V2R5XmSzuLHb5fTnr+8= -github.com/libp2p/go-libp2p v0.18.0-rc3 h1:tI+dAFDgOCeHRF6FgvXpqbrVz+ZFabX/pXO2BUdHu4o= -github.com/libp2p/go-libp2p v0.18.0-rc3/go.mod h1:WYL+Xw1iuwi6rdfzw5VIEpD+HqzYucHZ6fcUuumbI3M= +github.com/libp2p/go-libp2p v0.18.0-rc2 h1:ZLzGMdp1cVwxmA0vFpPVUDPQYUdHHGX7I58nXwpNr7Y= +github.com/libp2p/go-libp2p v0.18.0-rc2/go.mod h1:gGNCvn0T19AzyNPDWej2vsAlZFZVnS+IxqckjnsOyM0= github.com/libp2p/go-libp2p-asn-util v0.0.0-20200825225859-85005c6cf052/go.mod h1:nRMRTab+kZuk0LnKZpxhOVH/ndsdr2Nr//Zltc/vwgo= github.com/libp2p/go-libp2p-asn-util v0.1.0 h1:rABPCO77SjdbJ/eJ/ynIo8vWICy1VEnL5JAxJbQLo1E= github.com/libp2p/go-libp2p-asn-util v0.1.0/go.mod h1:wu+AnM9Ii2KgO5jMmS1rz9dvzTdj8BXqsPR9HR0XB7I= @@ -1157,8 +1157,8 @@ github.com/libp2p/go-libp2p-record v0.1.2/go.mod h1:pal0eNcT5nqZaTV7UGhqeGqxFgGd github.com/libp2p/go-libp2p-record v0.1.3 h1:R27hoScIhQf/A8XJZ8lYpnqh9LatJ5YbHs28kCIfql0= github.com/libp2p/go-libp2p-record v0.1.3/go.mod h1:yNUff/adKIfPnYQXgp6FQmNu3gLJ6EMg7+/vv2+9pY4= github.com/libp2p/go-libp2p-resource-manager v0.1.0/go.mod h1:wJPNjeE4XQlxeidwqVY5G6DLOKqFK33u2n8blpl0I6Y= -github.com/libp2p/go-libp2p-resource-manager v0.1.3 h1:Umf0tW6WNXSb6Uoma0YT56azB5iikL/aeGAP7s7+f5o= -github.com/libp2p/go-libp2p-resource-manager v0.1.3/go.mod h1:wJPNjeE4XQlxeidwqVY5G6DLOKqFK33u2n8blpl0I6Y= +github.com/libp2p/go-libp2p-resource-manager v0.1.2 h1:t66B/6EF6ivWEUgvO34NKOT3oPtkb+JTBJHdsIMx+mg= +github.com/libp2p/go-libp2p-resource-manager v0.1.2/go.mod h1:wJPNjeE4XQlxeidwqVY5G6DLOKqFK33u2n8blpl0I6Y= github.com/libp2p/go-libp2p-routing v0.0.1/go.mod h1:N51q3yTr4Zdr7V8Jt2JIktVU+3xBBylx1MZeVA6t1Ys= github.com/libp2p/go-libp2p-routing v0.1.0/go.mod h1:zfLhI1RI8RLEzmEaaPwzonRvXeeSHddONWkcTcB54nE= github.com/libp2p/go-libp2p-routing-helpers v0.2.3 h1:xY61alxJ6PurSi+MXbywZpelvuU4U4p/gPTxjqCqTzY= @@ -1211,9 +1211,8 @@ github.com/libp2p/go-libp2p-transport-upgrader v0.4.3/go.mod h1:bpkldbOWXMrXhpZb github.com/libp2p/go-libp2p-transport-upgrader v0.4.6/go.mod h1:JE0WQuQdy+uLZ5zOaI3Nw9dWGYJIA7mywEtP2lMvnyk= github.com/libp2p/go-libp2p-transport-upgrader v0.5.0/go.mod h1:Rc+XODlB3yce7dvFV4q/RmyJGsFcCZRkeZMu/Zdg0mo= github.com/libp2p/go-libp2p-transport-upgrader v0.6.0/go.mod h1:1e07y1ZSZdHo9HPbuU8IztM1Cj+DR5twgycb4pnRzRo= +github.com/libp2p/go-libp2p-transport-upgrader v0.7.0 h1:ADnLrL7fC4Vy7HPjk9oGof7nDeTqGXuof85Ar6kin9Q= github.com/libp2p/go-libp2p-transport-upgrader v0.7.0/go.mod h1:GIR2aTRp1J5yjVlkUoFqMkdobfob6RnAwYg/RZPhrzg= -github.com/libp2p/go-libp2p-transport-upgrader v0.7.1 h1:MSMe+tUfxpC9GArTz7a4G5zQKQgGh00Vio87d3j3xIg= -github.com/libp2p/go-libp2p-transport-upgrader v0.7.1/go.mod h1:GIR2aTRp1J5yjVlkUoFqMkdobfob6RnAwYg/RZPhrzg= github.com/libp2p/go-libp2p-xor v0.0.0-20210714161855-5c005aca55db/go.mod h1:LSTM5yRnjGZbWNTA/hRwq2gGFrvRIbQJscoIL/u6InY= github.com/libp2p/go-libp2p-yamux v0.1.2/go.mod h1:xUoV/RmYkg6BW/qGxA9XJyg+HzXFYkeXbnhjmnYzKp8= github.com/libp2p/go-libp2p-yamux v0.1.3/go.mod h1:VGSQVrqkh6y4nm0189qqxMtvyBft44MOYYPpYKXiVt4= From 2aab4d4f05e426aa75c60d08198af46967fd4350 Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:22:06 -0500 Subject: [PATCH 04/28] Revert "update go-libp2p to v0.18.0-rc2" This reverts commit 6e5f5214636599e20f57b9f120f8de091b14b0cc. --- go.mod | 6 +++--- go.sum | 9 +++------ 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/go.mod b/go.mod index 9e243483339..ce96e08b14d 100644 --- a/go.mod +++ b/go.mod @@ -110,7 +110,7 @@ require ( github.com/kelseyhightower/envconfig v1.4.0 github.com/libp2p/go-buffer-pool v0.0.2 github.com/libp2p/go-eventbus v0.2.1 - github.com/libp2p/go-libp2p v0.18.0-rc2 + github.com/libp2p/go-libp2p v0.18.0-rc1 github.com/libp2p/go-libp2p-connmgr v0.3.1 // indirect github.com/libp2p/go-libp2p-core v0.14.0 github.com/libp2p/go-libp2p-discovery v0.6.0 @@ -122,9 +122,9 @@ require ( github.com/libp2p/go-libp2p-record v0.1.3 github.com/libp2p/go-libp2p-resource-manager v0.1.2 github.com/libp2p/go-libp2p-routing-helpers v0.2.3 - github.com/libp2p/go-libp2p-swarm v0.10.1 + github.com/libp2p/go-libp2p-swarm v0.10.0 github.com/libp2p/go-libp2p-tls v0.3.1 - github.com/libp2p/go-libp2p-yamux v0.8.1 + github.com/libp2p/go-libp2p-yamux v0.8.0 github.com/libp2p/go-maddr-filter v0.1.0 github.com/mattn/go-isatty v0.0.14 github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 diff --git a/go.sum b/go.sum index 48c9ce0903f..e6a94176274 100644 --- a/go.sum +++ b/go.sum @@ -994,9 +994,8 @@ github.com/libp2p/go-libp2p v0.14.3/go.mod h1:d12V4PdKbpL0T1/gsUNN8DfgMuRPDX8bS2 github.com/libp2p/go-libp2p v0.14.4/go.mod h1:EIRU0Of4J5S8rkockZM7eJp2S0UrCyi55m2kJVru3rM= github.com/libp2p/go-libp2p v0.16.0/go.mod h1:ump42BsirwAWxKzsCiFnTtN1Yc+DuPu76fyMX364/O4= github.com/libp2p/go-libp2p v0.17.0/go.mod h1:Fkin50rsGdv5mm5BshBUtPRZknt9esfmYXBOYcwOTgw= +github.com/libp2p/go-libp2p v0.18.0-rc1 h1:CFHROLGmMwe/p8tR3sHahg/1NSaZa2EGbu7nDmdC+RY= github.com/libp2p/go-libp2p v0.18.0-rc1/go.mod h1:RgYlH7IIWHXREimC92bw5Lg1V2R5XmSzuLHb5fTnr+8= -github.com/libp2p/go-libp2p v0.18.0-rc2 h1:ZLzGMdp1cVwxmA0vFpPVUDPQYUdHHGX7I58nXwpNr7Y= -github.com/libp2p/go-libp2p v0.18.0-rc2/go.mod h1:gGNCvn0T19AzyNPDWej2vsAlZFZVnS+IxqckjnsOyM0= github.com/libp2p/go-libp2p-asn-util v0.0.0-20200825225859-85005c6cf052/go.mod h1:nRMRTab+kZuk0LnKZpxhOVH/ndsdr2Nr//Zltc/vwgo= github.com/libp2p/go-libp2p-asn-util v0.1.0 h1:rABPCO77SjdbJ/eJ/ynIo8vWICy1VEnL5JAxJbQLo1E= github.com/libp2p/go-libp2p-asn-util v0.1.0/go.mod h1:wu+AnM9Ii2KgO5jMmS1rz9dvzTdj8BXqsPR9HR0XB7I= @@ -1179,9 +1178,8 @@ github.com/libp2p/go-libp2p-swarm v0.5.0/go.mod h1:sU9i6BoHE0Ve5SKz3y9WfKrh8dUat github.com/libp2p/go-libp2p-swarm v0.5.3/go.mod h1:NBn7eNW2lu568L7Ns9wdFrOhgRlkRnIDg0FLKbuu3i8= github.com/libp2p/go-libp2p-swarm v0.8.0/go.mod h1:sOMp6dPuqco0r0GHTzfVheVBh6UEL0L1lXUZ5ot2Fvc= github.com/libp2p/go-libp2p-swarm v0.9.0/go.mod h1:2f8d8uxTJmpeqHF/1ujjdXZp+98nNIbujVOMEZxCbZ8= +github.com/libp2p/go-libp2p-swarm v0.10.0 h1:1yr7UCwxCN92cw9g9Q+fnJSlk7lOB1RetoEewxhGVL0= github.com/libp2p/go-libp2p-swarm v0.10.0/go.mod h1:71ceMcV6Rg/0rIQ97rsZWMzto1l9LnNquef+efcRbmA= -github.com/libp2p/go-libp2p-swarm v0.10.1 h1:lXW3pgGt+BVmkzcFX61erX7l6Lt+WAamNhwa2Kf3eJM= -github.com/libp2p/go-libp2p-swarm v0.10.1/go.mod h1:Pdkq0QU5a+qu+oyqIV3bknMsnzk9lnNyKvB9acJ5aZs= github.com/libp2p/go-libp2p-testing v0.0.1/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= github.com/libp2p/go-libp2p-testing v0.0.2/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= github.com/libp2p/go-libp2p-testing v0.0.3/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= @@ -1227,9 +1225,8 @@ github.com/libp2p/go-libp2p-yamux v0.5.0/go.mod h1:AyR8k5EzyM2QN9Bbdg6X1SkVVuqLw github.com/libp2p/go-libp2p-yamux v0.5.4/go.mod h1:tfrXbyaTqqSU654GTvK3ocnSZL3BuHoeTSqhcel1wsE= github.com/libp2p/go-libp2p-yamux v0.6.0/go.mod h1:MRhd6mAYnFRnSISp4M8i0ClV/j+mWHo2mYLifWGw33k= github.com/libp2p/go-libp2p-yamux v0.7.0/go.mod h1:fMyA0CsPfHkIuBU0wjRGrCjTBFiXTXxG0k5M4ETv+08= +github.com/libp2p/go-libp2p-yamux v0.8.0 h1:APQYlttIj+Rr5sfa6siojwsi0ZwcIh/exHIUl9hZr6o= github.com/libp2p/go-libp2p-yamux v0.8.0/go.mod h1:yTkPgN2ib8FHyU1ZcVD7aelzyAqXXwEPbyx+aSKm9h8= -github.com/libp2p/go-libp2p-yamux v0.8.1 h1:pi7zUeZ4Z9TpbUMntvSvoP3dFD4SEw/VPybxBcOZGzg= -github.com/libp2p/go-libp2p-yamux v0.8.1/go.mod h1:rUozF8Jah2dL9LLGyBaBeTQeARdwhefMCTQVQt6QobE= github.com/libp2p/go-maddr-filter v0.0.1/go.mod h1:6eT12kSQMA9x2pvFQa+xesMKUBlj9VImZbj3B9FBH/Q= github.com/libp2p/go-maddr-filter v0.0.4/go.mod h1:6eT12kSQMA9x2pvFQa+xesMKUBlj9VImZbj3B9FBH/Q= github.com/libp2p/go-maddr-filter v0.0.5/go.mod h1:Jk+36PMfIqCJhAnaASRH83bdAvfDRp/w6ENFaC9bG+M= From 6dc696b7459cbcacc1cf3d36c1120f0ab7a47242 Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:29:25 -0500 Subject: [PATCH 05/28] Revert "feat: update to go-fil-markets v1.19.0" This reverts commit 8a47a71772a412597c34af114ebc36e34a52f72d. --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index ce96e08b14d..b66011246e5 100644 --- a/go.mod +++ b/go.mod @@ -38,7 +38,7 @@ require ( github.com/filecoin-project/go-data-transfer v1.14.0 github.com/filecoin-project/go-fil-commcid v0.1.0 github.com/filecoin-project/go-fil-commp-hashhash v0.1.0 - github.com/filecoin-project/go-fil-markets v1.19.0 + github.com/filecoin-project/go-fil-markets v1.19.0-rc1 github.com/filecoin-project/go-jsonrpc v0.1.5 github.com/filecoin-project/go-padreader v0.0.1 github.com/filecoin-project/go-paramfetch v0.0.4 diff --git a/go.sum b/go.sum index e6a94176274..050cd48009f 100644 --- a/go.sum +++ b/go.sum @@ -327,8 +327,8 @@ github.com/filecoin-project/go-fil-commcid v0.1.0 h1:3R4ds1A9r6cr8mvZBfMYxTS88Oq github.com/filecoin-project/go-fil-commcid v0.1.0/go.mod h1:Eaox7Hvus1JgPrL5+M3+h7aSPHc0cVqpSxA+TxIEpZQ= github.com/filecoin-project/go-fil-commp-hashhash v0.1.0 h1:imrrpZWEHRnNqqv0tN7LXep5bFEVOVmQWHJvl2mgsGo= github.com/filecoin-project/go-fil-commp-hashhash v0.1.0/go.mod h1:73S8WSEWh9vr0fDJVnKADhfIv/d6dCbAGaAGWbdJEI8= -github.com/filecoin-project/go-fil-markets v1.19.0 h1:kap2q2wTM6tfkVO5gMA5DD9GUeTvkDhMfhjCtEwMDM8= -github.com/filecoin-project/go-fil-markets v1.19.0/go.mod h1:qsb3apmo4RSJYCEq40QxVdU7UZospN6nFJLOBHuaIbc= +github.com/filecoin-project/go-fil-markets v1.19.0-rc1 h1:T8Ql+Yj9bm0nzn9o43WBrRGxtWj2aYRq2UY7hDaep0I= +github.com/filecoin-project/go-fil-markets v1.19.0-rc1/go.mod h1:qsb3apmo4RSJYCEq40QxVdU7UZospN6nFJLOBHuaIbc= github.com/filecoin-project/go-hamt-ipld v0.1.5 h1:uoXrKbCQZ49OHpsTCkrThPNelC4W3LPEk0OrS/ytIBM= github.com/filecoin-project/go-hamt-ipld v0.1.5/go.mod h1:6Is+ONR5Cd5R6XZoCse1CWaXZc0Hdb/JeX+EQCQzX24= github.com/filecoin-project/go-hamt-ipld/v2 v2.0.0 h1:b3UDemBYN2HNfk3KOXNuxgTTxlWi3xVvbQP0IT38fvM= From 17ac5835081bf840a1264eaac843cea3e8112556 Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:29:26 -0500 Subject: [PATCH 06/28] Revert "close the rcmgr on shutdown" This reverts commit 73ec10a49ea6f80b338ada16c16a089f40f645d6. --- node/modules/lp2p/rcmgr.go | 6 ------ 1 file changed, 6 deletions(-) diff --git a/node/modules/lp2p/rcmgr.go b/node/modules/lp2p/rcmgr.go index 8b286ff5ee6..df52b4a4f39 100644 --- a/node/modules/lp2p/rcmgr.go +++ b/node/modules/lp2p/rcmgr.go @@ -1,7 +1,6 @@ package lp2p import ( - "context" "errors" "fmt" "os" @@ -57,11 +56,6 @@ func ResourceManager(lc fx.Lifecycle, repo repo.LockedRepo) (network.ResourceMan return nil, fmt.Errorf("error creating resource manager: %w", err) } - lc.Append(fx.Hook{ - OnStop: func(_ context.Context) error { - return mgr.Close() - }}) - return mgr, nil } From 48e28898a66dcd66522e3978206b1e54db1b8b24 Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:29:27 -0500 Subject: [PATCH 07/28] Revert "fix lint" This reverts commit 325a4c0e5b16a50fd2d3b89663e065a9116aeacb. --- cli/net.go | 26 +++++++++++++++----------- node/modules/lp2p/rcmgr.go | 2 +- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/cli/net.go b/cli/net.go index 524b0d753e5..18f21f767fc 100644 --- a/cli/net.go +++ b/cli/net.go @@ -643,7 +643,9 @@ var NetStatCmd = &cli.Command{ } enc := json.NewEncoder(os.Stdout) - return enc.Encode(result) + enc.Encode(result) + + return nil }, } @@ -692,19 +694,21 @@ var NetLimitCmd = &cli.Command{ return api.NetSetLimit(ctx, scope, limit) - } + } else { + if len(args) != 1 { + return xerrors.Errorf("must specify exactly one scope") + } + scope := args[0] - if len(args) != 1 { - return xerrors.Errorf("must specify exactly one scope") - } - scope := args[0] + result, err := api.NetLimit(ctx, scope) + if err != nil { + return err + } - result, err := api.NetLimit(ctx, scope) - if err != nil { - return err + enc := json.NewEncoder(os.Stdout) + enc.Encode(result) } - enc := json.NewEncoder(os.Stdout) - return enc.Encode(result) + return nil }, } diff --git a/node/modules/lp2p/rcmgr.go b/node/modules/lp2p/rcmgr.go index df52b4a4f39..a012fc1f427 100644 --- a/node/modules/lp2p/rcmgr.go +++ b/node/modules/lp2p/rcmgr.go @@ -26,7 +26,7 @@ func ResourceManager(lc fx.Lifecycle, repo repo.LockedRepo) (network.ResourceMan limitsIn, err := os.Open(limitsFile) switch { case err == nil: - defer limitsIn.Close() //nolint:errcheck + defer limitsIn.Close() limiter, err = rcmgr.NewDefaultLimiterFromJSON(limitsIn) if err != nil { return nil, fmt.Errorf("error parsing limit file: %w", err) From 7dbf0ced82374a0b57c1650b43eee0fb1ee14f53 Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:39:14 -0500 Subject: [PATCH 08/28] Revert "make gen and friends" This reverts commit b360c9403f12b460081a32ce9c6e06a450f089cb. --- api/mocks/mock_full.go | 44 -------- api/proxy_gen.go | 39 ------- api/v0api/v0mocks/mock_full.go | 44 -------- documentation/en/api-v0-methods-miner.md | 117 -------------------- documentation/en/api-v0-methods.md | 117 -------------------- documentation/en/api-v1-unstable-methods.md | 117 -------------------- documentation/en/cli-lotus-miner.md | 54 --------- documentation/en/cli-lotus.md | 54 --------- 8 files changed, 586 deletions(-) diff --git a/api/mocks/mock_full.go b/api/mocks/mock_full.go index e985a794d0c..3f9d75433c5 100644 --- a/api/mocks/mock_full.go +++ b/api/mocks/mock_full.go @@ -1811,21 +1811,6 @@ func (mr *MockFullNodeMockRecorder) NetFindPeer(arg0, arg1 interface{}) *gomock. return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NetFindPeer", reflect.TypeOf((*MockFullNode)(nil).NetFindPeer), arg0, arg1) } -// NetLimit mocks base method. -func (m *MockFullNode) NetLimit(arg0 context.Context, arg1 string) (api.NetLimit, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "NetLimit", arg0, arg1) - ret0, _ := ret[0].(api.NetLimit) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// NetLimit indicates an expected call of NetLimit. -func (mr *MockFullNodeMockRecorder) NetLimit(arg0, arg1 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NetLimit", reflect.TypeOf((*MockFullNode)(nil).NetLimit), arg0, arg1) -} - // NetPeerInfo mocks base method. func (m *MockFullNode) NetPeerInfo(arg0 context.Context, arg1 peer.ID) (*api.ExtendedPeerInfo, error) { m.ctrl.T.Helper() @@ -1871,35 +1856,6 @@ func (mr *MockFullNodeMockRecorder) NetPubsubScores(arg0 interface{}) *gomock.Ca return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NetPubsubScores", reflect.TypeOf((*MockFullNode)(nil).NetPubsubScores), arg0) } -// NetSetLimit mocks base method. -func (m *MockFullNode) NetSetLimit(arg0 context.Context, arg1 string, arg2 api.NetLimit) error { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "NetSetLimit", arg0, arg1, arg2) - ret0, _ := ret[0].(error) - return ret0 -} - -// NetSetLimit indicates an expected call of NetSetLimit. -func (mr *MockFullNodeMockRecorder) NetSetLimit(arg0, arg1, arg2 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NetSetLimit", reflect.TypeOf((*MockFullNode)(nil).NetSetLimit), arg0, arg1, arg2) -} - -// NetStat mocks base method. -func (m *MockFullNode) NetStat(arg0 context.Context, arg1 string) (api.NetStat, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "NetStat", arg0, arg1) - ret0, _ := ret[0].(api.NetStat) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// NetStat indicates an expected call of NetStat. -func (mr *MockFullNodeMockRecorder) NetStat(arg0, arg1 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NetStat", reflect.TypeOf((*MockFullNode)(nil).NetStat), arg0, arg1) -} - // NodeStatus mocks base method. func (m *MockFullNode) NodeStatus(arg0 context.Context, arg1 bool) (api.NodeStatus, error) { m.ctrl.T.Helper() diff --git a/api/proxy_gen.go b/api/proxy_gen.go index 25a1730afea..f2bc95a90b2 100644 --- a/api/proxy_gen.go +++ b/api/proxy_gen.go @@ -587,17 +587,11 @@ type NetStruct struct { NetFindPeer func(p0 context.Context, p1 peer.ID) (peer.AddrInfo, error) `perm:"read"` - NetLimit func(p0 context.Context, p1 string) (NetLimit, error) `perm:"read"` - NetPeerInfo func(p0 context.Context, p1 peer.ID) (*ExtendedPeerInfo, error) `perm:"read"` NetPeers func(p0 context.Context) ([]peer.AddrInfo, error) `perm:"read"` NetPubsubScores func(p0 context.Context) ([]PubsubScore, error) `perm:"read"` - - NetSetLimit func(p0 context.Context, p1 string, p2 NetLimit) error `perm:"admin"` - - NetStat func(p0 context.Context, p1 string) (NetStat, error) `perm:"read"` } } @@ -3637,17 +3631,6 @@ func (s *NetStub) NetFindPeer(p0 context.Context, p1 peer.ID) (peer.AddrInfo, er return *new(peer.AddrInfo), ErrNotSupported } -func (s *NetStruct) NetLimit(p0 context.Context, p1 string) (NetLimit, error) { - if s.Internal.NetLimit == nil { - return *new(NetLimit), ErrNotSupported - } - return s.Internal.NetLimit(p0, p1) -} - -func (s *NetStub) NetLimit(p0 context.Context, p1 string) (NetLimit, error) { - return *new(NetLimit), ErrNotSupported -} - func (s *NetStruct) NetPeerInfo(p0 context.Context, p1 peer.ID) (*ExtendedPeerInfo, error) { if s.Internal.NetPeerInfo == nil { return nil, ErrNotSupported @@ -3681,28 +3664,6 @@ func (s *NetStub) NetPubsubScores(p0 context.Context) ([]PubsubScore, error) { return *new([]PubsubScore), ErrNotSupported } -func (s *NetStruct) NetSetLimit(p0 context.Context, p1 string, p2 NetLimit) error { - if s.Internal.NetSetLimit == nil { - return ErrNotSupported - } - return s.Internal.NetSetLimit(p0, p1, p2) -} - -func (s *NetStub) NetSetLimit(p0 context.Context, p1 string, p2 NetLimit) error { - return ErrNotSupported -} - -func (s *NetStruct) NetStat(p0 context.Context, p1 string) (NetStat, error) { - if s.Internal.NetStat == nil { - return *new(NetStat), ErrNotSupported - } - return s.Internal.NetStat(p0, p1) -} - -func (s *NetStub) NetStat(p0 context.Context, p1 string) (NetStat, error) { - return *new(NetStat), ErrNotSupported -} - func (s *SignableStruct) Sign(p0 context.Context, p1 SignFunc) error { if s.Internal.Sign == nil { return ErrNotSupported diff --git a/api/v0api/v0mocks/mock_full.go b/api/v0api/v0mocks/mock_full.go index 26d7959404b..3e9caaee822 100644 --- a/api/v0api/v0mocks/mock_full.go +++ b/api/v0api/v0mocks/mock_full.go @@ -1724,21 +1724,6 @@ func (mr *MockFullNodeMockRecorder) NetFindPeer(arg0, arg1 interface{}) *gomock. return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NetFindPeer", reflect.TypeOf((*MockFullNode)(nil).NetFindPeer), arg0, arg1) } -// NetLimit mocks base method. -func (m *MockFullNode) NetLimit(arg0 context.Context, arg1 string) (api.NetLimit, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "NetLimit", arg0, arg1) - ret0, _ := ret[0].(api.NetLimit) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// NetLimit indicates an expected call of NetLimit. -func (mr *MockFullNodeMockRecorder) NetLimit(arg0, arg1 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NetLimit", reflect.TypeOf((*MockFullNode)(nil).NetLimit), arg0, arg1) -} - // NetPeerInfo mocks base method. func (m *MockFullNode) NetPeerInfo(arg0 context.Context, arg1 peer.ID) (*api.ExtendedPeerInfo, error) { m.ctrl.T.Helper() @@ -1784,35 +1769,6 @@ func (mr *MockFullNodeMockRecorder) NetPubsubScores(arg0 interface{}) *gomock.Ca return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NetPubsubScores", reflect.TypeOf((*MockFullNode)(nil).NetPubsubScores), arg0) } -// NetSetLimit mocks base method. -func (m *MockFullNode) NetSetLimit(arg0 context.Context, arg1 string, arg2 api.NetLimit) error { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "NetSetLimit", arg0, arg1, arg2) - ret0, _ := ret[0].(error) - return ret0 -} - -// NetSetLimit indicates an expected call of NetSetLimit. -func (mr *MockFullNodeMockRecorder) NetSetLimit(arg0, arg1, arg2 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NetSetLimit", reflect.TypeOf((*MockFullNode)(nil).NetSetLimit), arg0, arg1, arg2) -} - -// NetStat mocks base method. -func (m *MockFullNode) NetStat(arg0 context.Context, arg1 string) (api.NetStat, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "NetStat", arg0, arg1) - ret0, _ := ret[0].(api.NetStat) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// NetStat indicates an expected call of NetStat. -func (mr *MockFullNodeMockRecorder) NetStat(arg0, arg1 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NetStat", reflect.TypeOf((*MockFullNode)(nil).NetStat), arg0, arg1) -} - // PaychAllocateLane mocks base method. func (m *MockFullNode) PaychAllocateLane(arg0 context.Context, arg1 address.Address) (uint64, error) { m.ctrl.T.Helper() diff --git a/documentation/en/api-v0-methods-miner.md b/documentation/en/api-v0-methods-miner.md index a84f8984287..1c3bbb5b1ea 100644 --- a/documentation/en/api-v0-methods-miner.md +++ b/documentation/en/api-v0-methods-miner.md @@ -81,12 +81,9 @@ * [NetConnectedness](#NetConnectedness) * [NetDisconnect](#NetDisconnect) * [NetFindPeer](#NetFindPeer) - * [NetLimit](#NetLimit) * [NetPeerInfo](#NetPeerInfo) * [NetPeers](#NetPeers) * [NetPubsubScores](#NetPubsubScores) - * [NetSetLimit](#NetSetLimit) - * [NetStat](#NetStat) * [Pieces](#Pieces) * [PiecesGetCIDInfo](#PiecesGetCIDInfo) * [PiecesGetPieceInfo](#PiecesGetPieceInfo) @@ -1706,32 +1703,6 @@ Response: } ``` -### NetLimit - - -Perms: read - -Inputs: -```json -[ - "string value" -] -``` - -Response: -```json -{ - "Memory": 123, - "Streams": 3, - "StreamsInbound": 1, - "StreamsOutbound": 2, - "Conns": 4, - "ConnsInbound": 3, - "ConnsOutbound": 4, - "FD": 5 -} -``` - ### NetPeerInfo @@ -1817,94 +1788,6 @@ Response: ] ``` -### NetSetLimit - - -Perms: admin - -Inputs: -```json -[ - "string value", - { - "Memory": 123, - "Streams": 3, - "StreamsInbound": 1, - "StreamsOutbound": 2, - "Conns": 4, - "ConnsInbound": 3, - "ConnsOutbound": 4, - "FD": 5 - } -] -``` - -Response: `{}` - -### NetStat - - -Perms: read - -Inputs: -```json -[ - "string value" -] -``` - -Response: -```json -{ - "System": { - "NumStreamsInbound": 123, - "NumStreamsOutbound": 123, - "NumConnsInbound": 123, - "NumConnsOutbound": 123, - "NumFD": 123, - "Memory": 9 - }, - "Transient": { - "NumStreamsInbound": 123, - "NumStreamsOutbound": 123, - "NumConnsInbound": 123, - "NumConnsOutbound": 123, - "NumFD": 123, - "Memory": 9 - }, - "Services": { - "abc": { - "NumStreamsInbound": 1, - "NumStreamsOutbound": 2, - "NumConnsInbound": 3, - "NumConnsOutbound": 4, - "NumFD": 5, - "Memory": 123 - } - }, - "Protocols": { - "abc": { - "NumStreamsInbound": 1, - "NumStreamsOutbound": 2, - "NumConnsInbound": 3, - "NumConnsOutbound": 4, - "NumFD": 5, - "Memory": 123 - } - }, - "Peers": { - "abc": { - "NumStreamsInbound": 1, - "NumStreamsOutbound": 2, - "NumConnsInbound": 3, - "NumConnsOutbound": 4, - "NumFD": 5, - "Memory": 123 - } - } -} -``` - ## Pieces diff --git a/documentation/en/api-v0-methods.md b/documentation/en/api-v0-methods.md index 883d4d27499..88c4d818760 100644 --- a/documentation/en/api-v0-methods.md +++ b/documentation/en/api-v0-methods.md @@ -128,12 +128,9 @@ * [NetConnectedness](#NetConnectedness) * [NetDisconnect](#NetDisconnect) * [NetFindPeer](#NetFindPeer) - * [NetLimit](#NetLimit) * [NetPeerInfo](#NetPeerInfo) * [NetPeers](#NetPeers) * [NetPubsubScores](#NetPubsubScores) - * [NetSetLimit](#NetSetLimit) - * [NetStat](#NetStat) * [Paych](#Paych) * [PaychAllocateLane](#PaychAllocateLane) * [PaychAvailableFunds](#PaychAvailableFunds) @@ -3824,32 +3821,6 @@ Response: } ``` -### NetLimit - - -Perms: read - -Inputs: -```json -[ - "string value" -] -``` - -Response: -```json -{ - "Memory": 123, - "Streams": 3, - "StreamsInbound": 1, - "StreamsOutbound": 2, - "Conns": 4, - "ConnsInbound": 3, - "ConnsOutbound": 4, - "FD": 5 -} -``` - ### NetPeerInfo @@ -3935,94 +3906,6 @@ Response: ] ``` -### NetSetLimit - - -Perms: admin - -Inputs: -```json -[ - "string value", - { - "Memory": 123, - "Streams": 3, - "StreamsInbound": 1, - "StreamsOutbound": 2, - "Conns": 4, - "ConnsInbound": 3, - "ConnsOutbound": 4, - "FD": 5 - } -] -``` - -Response: `{}` - -### NetStat - - -Perms: read - -Inputs: -```json -[ - "string value" -] -``` - -Response: -```json -{ - "System": { - "NumStreamsInbound": 123, - "NumStreamsOutbound": 123, - "NumConnsInbound": 123, - "NumConnsOutbound": 123, - "NumFD": 123, - "Memory": 9 - }, - "Transient": { - "NumStreamsInbound": 123, - "NumStreamsOutbound": 123, - "NumConnsInbound": 123, - "NumConnsOutbound": 123, - "NumFD": 123, - "Memory": 9 - }, - "Services": { - "abc": { - "NumStreamsInbound": 1, - "NumStreamsOutbound": 2, - "NumConnsInbound": 3, - "NumConnsOutbound": 4, - "NumFD": 5, - "Memory": 123 - } - }, - "Protocols": { - "abc": { - "NumStreamsInbound": 1, - "NumStreamsOutbound": 2, - "NumConnsInbound": 3, - "NumConnsOutbound": 4, - "NumFD": 5, - "Memory": 123 - } - }, - "Peers": { - "abc": { - "NumStreamsInbound": 1, - "NumStreamsOutbound": 2, - "NumConnsInbound": 3, - "NumConnsOutbound": 4, - "NumFD": 5, - "Memory": 123 - } - } -} -``` - ## Paych The Paych methods are for interacting with and managing payment channels diff --git a/documentation/en/api-v1-unstable-methods.md b/documentation/en/api-v1-unstable-methods.md index a5fdd999429..7d5f4665e91 100644 --- a/documentation/en/api-v1-unstable-methods.md +++ b/documentation/en/api-v1-unstable-methods.md @@ -134,12 +134,9 @@ * [NetConnectedness](#NetConnectedness) * [NetDisconnect](#NetDisconnect) * [NetFindPeer](#NetFindPeer) - * [NetLimit](#NetLimit) * [NetPeerInfo](#NetPeerInfo) * [NetPeers](#NetPeers) * [NetPubsubScores](#NetPubsubScores) - * [NetSetLimit](#NetSetLimit) - * [NetStat](#NetStat) * [Node](#Node) * [NodeStatus](#NodeStatus) * [Paych](#Paych) @@ -4185,32 +4182,6 @@ Response: } ``` -### NetLimit - - -Perms: read - -Inputs: -```json -[ - "string value" -] -``` - -Response: -```json -{ - "Memory": 123, - "Streams": 3, - "StreamsInbound": 1, - "StreamsOutbound": 2, - "Conns": 4, - "ConnsInbound": 3, - "ConnsOutbound": 4, - "FD": 5 -} -``` - ### NetPeerInfo @@ -4296,94 +4267,6 @@ Response: ] ``` -### NetSetLimit - - -Perms: admin - -Inputs: -```json -[ - "string value", - { - "Memory": 123, - "Streams": 3, - "StreamsInbound": 1, - "StreamsOutbound": 2, - "Conns": 4, - "ConnsInbound": 3, - "ConnsOutbound": 4, - "FD": 5 - } -] -``` - -Response: `{}` - -### NetStat - - -Perms: read - -Inputs: -```json -[ - "string value" -] -``` - -Response: -```json -{ - "System": { - "NumStreamsInbound": 123, - "NumStreamsOutbound": 123, - "NumConnsInbound": 123, - "NumConnsOutbound": 123, - "NumFD": 123, - "Memory": 9 - }, - "Transient": { - "NumStreamsInbound": 123, - "NumStreamsOutbound": 123, - "NumConnsInbound": 123, - "NumConnsOutbound": 123, - "NumFD": 123, - "Memory": 9 - }, - "Services": { - "abc": { - "NumStreamsInbound": 1, - "NumStreamsOutbound": 2, - "NumConnsInbound": 3, - "NumConnsOutbound": 4, - "NumFD": 5, - "Memory": 123 - } - }, - "Protocols": { - "abc": { - "NumStreamsInbound": 1, - "NumStreamsOutbound": 2, - "NumConnsInbound": 3, - "NumConnsOutbound": 4, - "NumFD": 5, - "Memory": 123 - } - }, - "Peers": { - "abc": { - "NumStreamsInbound": 1, - "NumStreamsOutbound": 2, - "NumConnsInbound": 3, - "NumConnsOutbound": 4, - "NumFD": 5, - "Memory": 123 - } - } -} -``` - ## Node These methods are general node management and status commands diff --git a/documentation/en/cli-lotus-miner.md b/documentation/en/cli-lotus-miner.md index bce1f1c47e4..ab0622ab10d 100644 --- a/documentation/en/cli-lotus-miner.md +++ b/documentation/en/cli-lotus-miner.md @@ -1160,8 +1160,6 @@ COMMANDS: reachability Print information about reachability from the internet bandwidth Print bandwidth usage information block Manage network connection gating rules - stat Report resource usage for a scope - limit Get or set resource limits for a scope help, h Shows a list of commands or help for one command OPTIONS: @@ -1430,58 +1428,6 @@ OPTIONS: ``` -### lotus-miner net stat -``` -NAME: - lotus-miner net stat - Report resource usage for a scope - -USAGE: - lotus-miner net stat [command options] scope - -DESCRIPTION: - Report resource usage for a scope. - - The scope can be one of the following: - - system -- reports the system aggregate resource usage. - - transient -- reports the transient resource usage. - - svc: -- reports the resource usage of a specific service. - - proto: -- reports the resource usage of a specific protocol. - - peer: -- reports the resource usage of a specific peer. - - all -- reports the resource usage for all currently active scopes. - - -OPTIONS: - --help, -h show help (default: false) - -``` - -### lotus-miner net limit -``` -NAME: - lotus-miner net limit - Get or set resource limits for a scope - -USAGE: - lotus-miner net limit [command options] scope [limit] - -DESCRIPTION: - Get or set resource limits for a scope. - - The scope can be one of the following: - - system -- reports the system aggregate resource usage. - - transient -- reports the transient resource usage. - - svc: -- reports the resource usage of a specific service. - - proto: -- reports the resource usage of a specific protocol. - - peer: -- reports the resource usage of a specific peer. - - The limit is json-formatted, with the same structure as the limits file. - - -OPTIONS: - --set set the limit for a scope (default: false) - --help, -h show help (default: false) - -``` - ## lotus-miner pieces ``` NAME: diff --git a/documentation/en/cli-lotus.md b/documentation/en/cli-lotus.md index a5fd6deb935..b69ae2cacb5 100644 --- a/documentation/en/cli-lotus.md +++ b/documentation/en/cli-lotus.md @@ -2616,8 +2616,6 @@ COMMANDS: reachability Print information about reachability from the internet bandwidth Print bandwidth usage information block Manage network connection gating rules - stat Report resource usage for a scope - limit Get or set resource limits for a scope help, h Shows a list of commands or help for one command OPTIONS: @@ -2886,58 +2884,6 @@ OPTIONS: ``` -### lotus net stat -``` -NAME: - lotus net stat - Report resource usage for a scope - -USAGE: - lotus net stat [command options] scope - -DESCRIPTION: - Report resource usage for a scope. - - The scope can be one of the following: - - system -- reports the system aggregate resource usage. - - transient -- reports the transient resource usage. - - svc: -- reports the resource usage of a specific service. - - proto: -- reports the resource usage of a specific protocol. - - peer: -- reports the resource usage of a specific peer. - - all -- reports the resource usage for all currently active scopes. - - -OPTIONS: - --help, -h show help (default: false) - -``` - -### lotus net limit -``` -NAME: - lotus net limit - Get or set resource limits for a scope - -USAGE: - lotus net limit [command options] scope [limit] - -DESCRIPTION: - Get or set resource limits for a scope. - - The scope can be one of the following: - - system -- reports the system aggregate resource usage. - - transient -- reports the transient resource usage. - - svc: -- reports the resource usage of a specific service. - - proto: -- reports the resource usage of a specific protocol. - - peer: -- reports the resource usage of a specific peer. - - The limit is json-formatted, with the same structure as the limits file. - - -OPTIONS: - --set set the limit for a scope (default: false) - --help, -h show help (default: false) - -``` - ## lotus sync ``` NAME: From bf0470ad0903e7c780f95a6c0cd4cb5de29652fe Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:39:15 -0500 Subject: [PATCH 09/28] Revert "fix issues with fil-markets/data-transfer updates" This reverts commit ca4ee1e8cfb202c8f76f63d5b1a6f3aff6ec24e6. --- markets/loggers/loggers.go | 1 + 1 file changed, 1 insertion(+) diff --git a/markets/loggers/loggers.go b/markets/loggers/loggers.go index 0d542a45dcd..2d13a64a19d 100644 --- a/markets/loggers/loggers.go +++ b/markets/loggers/loggers.go @@ -40,6 +40,7 @@ func DataTransferLogger(event datatransfer.Event, state datatransfer.ChannelStat "sent", state.Sent(), "received", state.Received(), "queued", state.Queued(), + "received count", state.ReceivedCidsTotal(), "total size", state.TotalSize(), "remote peer", state.OtherPeer(), "event message", event.Message, From a7e02f7207180c42655a60efb0ab1443d0e1a3e6 Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:39:16 -0500 Subject: [PATCH 10/28] Revert "update go-fil-markets@v0.19.0-rc1" This reverts commit 2e5474e864d0f3ffd323f881946faa1b7c0a707d. --- go.mod | 5 +++-- go.sum | 8 ++++---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index b66011246e5..e59744190c4 100644 --- a/go.mod +++ b/go.mod @@ -35,10 +35,10 @@ require ( github.com/filecoin-project/go-cbor-util v0.0.1 github.com/filecoin-project/go-commp-utils v0.1.3 github.com/filecoin-project/go-crypto v0.0.1 - github.com/filecoin-project/go-data-transfer v1.14.0 + github.com/filecoin-project/go-data-transfer v1.13.0 github.com/filecoin-project/go-fil-commcid v0.1.0 github.com/filecoin-project/go-fil-commp-hashhash v0.1.0 - github.com/filecoin-project/go-fil-markets v1.19.0-rc1 + github.com/filecoin-project/go-fil-markets v1.17.0 github.com/filecoin-project/go-jsonrpc v0.1.5 github.com/filecoin-project/go-padreader v0.0.1 github.com/filecoin-project/go-paramfetch v0.0.4 @@ -126,6 +126,7 @@ require ( github.com/libp2p/go-libp2p-tls v0.3.1 github.com/libp2p/go-libp2p-yamux v0.8.0 github.com/libp2p/go-maddr-filter v0.1.0 + github.com/libp2p/go-yamux/v3 v3.0.2 // indirect github.com/mattn/go-isatty v0.0.14 github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 github.com/mitchellh/go-homedir v1.1.0 diff --git a/go.sum b/go.sum index 050cd48009f..7d5b7200f71 100644 --- a/go.sum +++ b/go.sum @@ -316,8 +316,8 @@ github.com/filecoin-project/go-commp-utils v0.1.3/go.mod h1:3ENlD1pZySaUout0p9AN github.com/filecoin-project/go-crypto v0.0.0-20191218222705-effae4ea9f03/go.mod h1:+viYnvGtUTgJRdy6oaeF4MTFKAfatX071MPDPBL11EQ= github.com/filecoin-project/go-crypto v0.0.1 h1:AcvpSGGCgjaY8y1az6AMfKQWreF/pWO2JJGLl6gCq6o= github.com/filecoin-project/go-crypto v0.0.1/go.mod h1:+viYnvGtUTgJRdy6oaeF4MTFKAfatX071MPDPBL11EQ= -github.com/filecoin-project/go-data-transfer v1.14.0 h1:4pnfJk8FYtqcdAg+QRGzaz57seUC/Tz+HJgPuGB7zdg= -github.com/filecoin-project/go-data-transfer v1.14.0/go.mod h1:wNJKhaLLYBJDM3VFvgvYi4iUjPa69pz/1Q5Q4HzX2wE= +github.com/filecoin-project/go-data-transfer v1.13.0 h1:UqjBfacClqAmnzukek1oPxJXDM3l5UI/WX8CRN2/VkM= +github.com/filecoin-project/go-data-transfer v1.13.0/go.mod h1:TcUtAdQl1ofnLV9oH3gPC93Hjce9yuKnq4O4j2M/BU4= github.com/filecoin-project/go-ds-versioning v0.0.0-20211206185234-508abd7c2aff/go.mod h1:C9/l9PnB1+mwPa26BBVpCjG/XQCB0yj/q5CK2J8X1I4= github.com/filecoin-project/go-ds-versioning v0.1.1 h1:JiyBqaQlwC+UM0WhcBtVEeT3XrX59mQhT8U3p7nu86o= github.com/filecoin-project/go-ds-versioning v0.1.1/go.mod h1:C9/l9PnB1+mwPa26BBVpCjG/XQCB0yj/q5CK2J8X1I4= @@ -327,8 +327,8 @@ github.com/filecoin-project/go-fil-commcid v0.1.0 h1:3R4ds1A9r6cr8mvZBfMYxTS88Oq github.com/filecoin-project/go-fil-commcid v0.1.0/go.mod h1:Eaox7Hvus1JgPrL5+M3+h7aSPHc0cVqpSxA+TxIEpZQ= github.com/filecoin-project/go-fil-commp-hashhash v0.1.0 h1:imrrpZWEHRnNqqv0tN7LXep5bFEVOVmQWHJvl2mgsGo= github.com/filecoin-project/go-fil-commp-hashhash v0.1.0/go.mod h1:73S8WSEWh9vr0fDJVnKADhfIv/d6dCbAGaAGWbdJEI8= -github.com/filecoin-project/go-fil-markets v1.19.0-rc1 h1:T8Ql+Yj9bm0nzn9o43WBrRGxtWj2aYRq2UY7hDaep0I= -github.com/filecoin-project/go-fil-markets v1.19.0-rc1/go.mod h1:qsb3apmo4RSJYCEq40QxVdU7UZospN6nFJLOBHuaIbc= +github.com/filecoin-project/go-fil-markets v1.17.0 h1:i9U6hZ+peri6Ygfwoda0YBk4bo1SHkd58EPBRgXCRlQ= +github.com/filecoin-project/go-fil-markets v1.17.0/go.mod h1:tKRMkDovSJiUo8yDt6YQM/gHMfNVYya0YTdayGhRnRY= github.com/filecoin-project/go-hamt-ipld v0.1.5 h1:uoXrKbCQZ49OHpsTCkrThPNelC4W3LPEk0OrS/ytIBM= github.com/filecoin-project/go-hamt-ipld v0.1.5/go.mod h1:6Is+ONR5Cd5R6XZoCse1CWaXZc0Hdb/JeX+EQCQzX24= github.com/filecoin-project/go-hamt-ipld/v2 v2.0.0 h1:b3UDemBYN2HNfk3KOXNuxgTTxlWi3xVvbQP0IT38fvM= From ce040b7d338c39bd551180ae1ec615a5a23de446 Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:39:17 -0500 Subject: [PATCH 11/28] Revert "add description for net stat and limit commands" This reverts commit 19c8ea328808c36d2d7128dd4e45e8d5098914ef. --- cli/net.go | 25 ++----------------------- 1 file changed, 2 insertions(+), 23 deletions(-) diff --git a/cli/net.go b/cli/net.go index 18f21f767fc..104b4b40ebd 100644 --- a/cli/net.go +++ b/cli/net.go @@ -611,18 +611,8 @@ var NetBlockListCmd = &cli.Command{ var NetStatCmd = &cli.Command{ Name: "stat", - Usage: "Report resource usage for a scope", + Usage: "report resource stat for a scope", ArgsUsage: "scope", - Description: `Report resource usage for a scope. - - The scope can be one of the following: - - system -- reports the system aggregate resource usage. - - transient -- reports the transient resource usage. - - svc: -- reports the resource usage of a specific service. - - proto: -- reports the resource usage of a specific protocol. - - peer: -- reports the resource usage of a specific peer. - - all -- reports the resource usage for all currently active scopes. -`, Action: func(cctx *cli.Context) error { api, closer, err := GetAPI(cctx) if err != nil { @@ -651,19 +641,8 @@ var NetStatCmd = &cli.Command{ var NetLimitCmd = &cli.Command{ Name: "limit", - Usage: "Get or set resource limits for a scope", + Usage: "get or set resource limit for a scope", ArgsUsage: "scope [limit]", - Description: `Get or set resource limits for a scope. - - The scope can be one of the following: - - system -- reports the system aggregate resource usage. - - transient -- reports the transient resource usage. - - svc: -- reports the resource usage of a specific service. - - proto: -- reports the resource usage of a specific protocol. - - peer: -- reports the resource usage of a specific peer. - - The limit is json-formatted, with the same structure as the limits file. -`, Flags: []cli.Flag{ &cli.BoolFlag{ Name: "set", From 4968babb32a3e18437354ebdd52bd5dc89c80c63 Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:39:17 -0500 Subject: [PATCH 12/28] Revert "go mod: update go-libp2p-resource-manager@v0.1.2" This reverts commit 6260271b780ad2a7d9cd4d15c5646c843136c54c. --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index e59744190c4..0f3ae1da737 100644 --- a/go.mod +++ b/go.mod @@ -120,7 +120,7 @@ require ( github.com/libp2p/go-libp2p-pubsub v0.6.1 github.com/libp2p/go-libp2p-quic-transport v0.16.0 github.com/libp2p/go-libp2p-record v0.1.3 - github.com/libp2p/go-libp2p-resource-manager v0.1.2 + github.com/libp2p/go-libp2p-resource-manager v0.1.1 github.com/libp2p/go-libp2p-routing-helpers v0.2.3 github.com/libp2p/go-libp2p-swarm v0.10.0 github.com/libp2p/go-libp2p-tls v0.3.1 diff --git a/go.sum b/go.sum index 7d5b7200f71..a3eff47942a 100644 --- a/go.sum +++ b/go.sum @@ -1156,8 +1156,8 @@ github.com/libp2p/go-libp2p-record v0.1.2/go.mod h1:pal0eNcT5nqZaTV7UGhqeGqxFgGd github.com/libp2p/go-libp2p-record v0.1.3 h1:R27hoScIhQf/A8XJZ8lYpnqh9LatJ5YbHs28kCIfql0= github.com/libp2p/go-libp2p-record v0.1.3/go.mod h1:yNUff/adKIfPnYQXgp6FQmNu3gLJ6EMg7+/vv2+9pY4= github.com/libp2p/go-libp2p-resource-manager v0.1.0/go.mod h1:wJPNjeE4XQlxeidwqVY5G6DLOKqFK33u2n8blpl0I6Y= -github.com/libp2p/go-libp2p-resource-manager v0.1.2 h1:t66B/6EF6ivWEUgvO34NKOT3oPtkb+JTBJHdsIMx+mg= -github.com/libp2p/go-libp2p-resource-manager v0.1.2/go.mod h1:wJPNjeE4XQlxeidwqVY5G6DLOKqFK33u2n8blpl0I6Y= +github.com/libp2p/go-libp2p-resource-manager v0.1.1 h1:JZ++ezpl2SVP2bj4Z+EPSmrKFS9vQVpkgC28G3DBJcA= +github.com/libp2p/go-libp2p-resource-manager v0.1.1/go.mod h1:wJPNjeE4XQlxeidwqVY5G6DLOKqFK33u2n8blpl0I6Y= github.com/libp2p/go-libp2p-routing v0.0.1/go.mod h1:N51q3yTr4Zdr7V8Jt2JIktVU+3xBBylx1MZeVA6t1Ys= github.com/libp2p/go-libp2p-routing v0.1.0/go.mod h1:zfLhI1RI8RLEzmEaaPwzonRvXeeSHddONWkcTcB54nE= github.com/libp2p/go-libp2p-routing-helpers v0.2.3 h1:xY61alxJ6PurSi+MXbywZpelvuU4U4p/gPTxjqCqTzY= From 581cb34b11695a8666280ccb3bdb690b2e0a8570 Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:39:18 -0500 Subject: [PATCH 13/28] Revert "go mod: update go-yamux@v3.0.2" This reverts commit 83427c478f5af534e39f92dcc2f378627ce63fef. --- go.mod | 1 - go.sum | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 0f3ae1da737..8fd765eda87 100644 --- a/go.mod +++ b/go.mod @@ -126,7 +126,6 @@ require ( github.com/libp2p/go-libp2p-tls v0.3.1 github.com/libp2p/go-libp2p-yamux v0.8.0 github.com/libp2p/go-maddr-filter v0.1.0 - github.com/libp2p/go-yamux/v3 v3.0.2 // indirect github.com/mattn/go-isatty v0.0.14 github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 github.com/mitchellh/go-homedir v1.1.0 diff --git a/go.sum b/go.sum index a3eff47942a..e29c59dba1e 100644 --- a/go.sum +++ b/go.sum @@ -1317,9 +1317,8 @@ github.com/libp2p/go-yamux v1.4.1 h1:P1Fe9vF4th5JOxxgQvfbOHkrGqIZniTLf+ddhZp8YTI github.com/libp2p/go-yamux v1.4.1/go.mod h1:fr7aVgmdNGJK+N1g+b6DW6VxzbRCjCOejR/hkmpooHE= github.com/libp2p/go-yamux/v2 v2.2.0/go.mod h1:3So6P6TV6r75R9jiBpiIKgU/66lOarCZjqROGxzPpPQ= github.com/libp2p/go-yamux/v2 v2.3.0/go.mod h1:iTU+lOIn/2h0AgKcL49clNTwfEw+WSfDYrXe05EyKIs= +github.com/libp2p/go-yamux/v3 v3.0.1 h1:lIdxHGVZ+y/EHgCrqGNt4Q+Mk9qu26MbOWH/yRw+Ihk= github.com/libp2p/go-yamux/v3 v3.0.1/go.mod h1:s2LsDhHbh+RfCsQoICSYt58U2f8ijtPANFD8BmE74Bo= -github.com/libp2p/go-yamux/v3 v3.0.2 h1:LW0q5+A1Wy0npEsPJP9wmare2NH4ohNluN5EWVwv2mE= -github.com/libp2p/go-yamux/v3 v3.0.2/go.mod h1:s2LsDhHbh+RfCsQoICSYt58U2f8ijtPANFD8BmE74Bo= github.com/libp2p/zeroconf/v2 v2.1.1/go.mod h1:fuJqLnUwZTshS3U/bMRJ3+ow/v9oid1n0DmyYyNO1Xs= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= From e49d499bb5d108e92a38f5a58f740837fa9a2981 Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:39:18 -0500 Subject: [PATCH 14/28] Revert "fix mocknet.New invocation" This reverts commit 0870f48b5caaaa78e505b398ce13962b5ecdbc19. --- chain/sync_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/chain/sync_test.go b/chain/sync_test.go index 35566169f2c..0779551bca5 100644 --- a/chain/sync_test.go +++ b/chain/sync_test.go @@ -104,7 +104,7 @@ func prepSyncTest(t testing.TB, h int) *syncTestUtil { ctx: ctx, cancel: cancel, - mn: mocknet.New(), + mn: mocknet.New(ctx), g: g, us: filcns.DefaultUpgradeSchedule(), } @@ -158,7 +158,7 @@ func prepSyncTestWithV5Height(t testing.TB, h int, v5height abi.ChainEpoch) *syn ctx: ctx, cancel: cancel, - mn: mocknet.New(), + mn: mocknet.New(ctx), g: g, us: sched, } From f281027a1c204cb18c41c917ec385a56d382e707 Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:39:19 -0500 Subject: [PATCH 15/28] Revert "fix mocknet.New invocation" This reverts commit c3fb68545a7fe8ce572f947907100e46d2d52fdb. --- itests/kit/ensemble.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/itests/kit/ensemble.go b/itests/kit/ensemble.go index 0227ee81e70..dfd3d8cd74a 100644 --- a/itests/kit/ensemble.go +++ b/itests/kit/ensemble.go @@ -277,7 +277,7 @@ func (n *Ensemble) Start() *Ensemble { // We haven't been bootstrapped yet, we need to generate genesis and // create the networking backbone. gtempl = n.generateGenesis() - n.mn = mocknet.New() + n.mn = mocknet.New(ctx) } // --------------------- From f9f6f35b93d6565f71e1e5ab08c893746054655b Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:39:19 -0500 Subject: [PATCH 16/28] Revert "go mod: update go-libp2p-pubsub" This reverts commit aa599bfaf99aca0048e76eb8c742385df74eee60. --- go.mod | 2 +- go.sum | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 8fd765eda87..b46b653d561 100644 --- a/go.mod +++ b/go.mod @@ -117,7 +117,7 @@ require ( github.com/libp2p/go-libp2p-kad-dht v0.15.0 github.com/libp2p/go-libp2p-noise v0.3.0 github.com/libp2p/go-libp2p-peerstore v0.6.0 - github.com/libp2p/go-libp2p-pubsub v0.6.1 + github.com/libp2p/go-libp2p-pubsub v0.6.0 github.com/libp2p/go-libp2p-quic-transport v0.16.0 github.com/libp2p/go-libp2p-record v0.1.3 github.com/libp2p/go-libp2p-resource-manager v0.1.1 diff --git a/go.sum b/go.sum index e29c59dba1e..02acbd5e6bf 100644 --- a/go.sum +++ b/go.sum @@ -1138,9 +1138,8 @@ github.com/libp2p/go-libp2p-pnet v0.2.0/go.mod h1:Qqvq6JH/oMZGwqs3N1Fqhv8NVhrdYc github.com/libp2p/go-libp2p-protocol v0.0.1/go.mod h1:Af9n4PiruirSDjHycM1QuiMi/1VZNHYcK8cLgFJLZ4s= github.com/libp2p/go-libp2p-protocol v0.1.0/go.mod h1:KQPHpAabB57XQxGrXCNvbL6UEXfQqUgC/1adR2Xtflk= github.com/libp2p/go-libp2p-pubsub v0.1.1/go.mod h1:ZwlKzRSe1eGvSIdU5bD7+8RZN/Uzw0t1Bp9R1znpR/Q= +github.com/libp2p/go-libp2p-pubsub v0.6.0 h1:98+RXuEWW17U6cAijK1yaTf6mw/B+n5yPA421z+dlo0= github.com/libp2p/go-libp2p-pubsub v0.6.0/go.mod h1:nJv87QM2cU0w45KPR1rZicq+FmFIOD16zmT+ep1nOmg= -github.com/libp2p/go-libp2p-pubsub v0.6.1 h1:wycbV+f4rreCoVY61Do6g/BUk0RIrbNRcYVbn+QkjGk= -github.com/libp2p/go-libp2p-pubsub v0.6.1/go.mod h1:nJv87QM2cU0w45KPR1rZicq+FmFIOD16zmT+ep1nOmg= github.com/libp2p/go-libp2p-quic-transport v0.1.1/go.mod h1:wqG/jzhF3Pu2NrhJEvE+IE0NTHNXslOPn9JQzyCAxzU= github.com/libp2p/go-libp2p-quic-transport v0.10.0/go.mod h1:RfJbZ8IqXIhxBRm5hqUEJqjiiY8xmEuq3HUDS993MkA= github.com/libp2p/go-libp2p-quic-transport v0.11.2/go.mod h1:wlanzKtIh6pHrq+0U3p3DY9PJfGqxMgPaGKaK5LifwQ= From 11fc068cfe09a7e33d4329f4bcea26c3f6ef0a83 Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:39:19 -0500 Subject: [PATCH 17/28] Revert "go mod: go-libp2p-resource-manager@v0.1.1" This reverts commit 62c0f35b5ab2f17b63f90c6a1ed220d3e6e9e7ac. --- go.mod | 2 +- go.sum | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index b46b653d561..432ce74867d 100644 --- a/go.mod +++ b/go.mod @@ -120,7 +120,7 @@ require ( github.com/libp2p/go-libp2p-pubsub v0.6.0 github.com/libp2p/go-libp2p-quic-transport v0.16.0 github.com/libp2p/go-libp2p-record v0.1.3 - github.com/libp2p/go-libp2p-resource-manager v0.1.1 + github.com/libp2p/go-libp2p-resource-manager v0.1.0 github.com/libp2p/go-libp2p-routing-helpers v0.2.3 github.com/libp2p/go-libp2p-swarm v0.10.0 github.com/libp2p/go-libp2p-tls v0.3.1 diff --git a/go.sum b/go.sum index 02acbd5e6bf..c23fb89e3bc 100644 --- a/go.sum +++ b/go.sum @@ -1154,9 +1154,8 @@ github.com/libp2p/go-libp2p-record v0.1.1/go.mod h1:VRgKajOyMVgP/F0L5g3kH7SVskp1 github.com/libp2p/go-libp2p-record v0.1.2/go.mod h1:pal0eNcT5nqZaTV7UGhqeGqxFgGdsU/9W//C8dqjQDk= github.com/libp2p/go-libp2p-record v0.1.3 h1:R27hoScIhQf/A8XJZ8lYpnqh9LatJ5YbHs28kCIfql0= github.com/libp2p/go-libp2p-record v0.1.3/go.mod h1:yNUff/adKIfPnYQXgp6FQmNu3gLJ6EMg7+/vv2+9pY4= +github.com/libp2p/go-libp2p-resource-manager v0.1.0 h1:tYpbhLPVC4egLavupAi9jGKKLeMemyGq5tnfBc8taBs= github.com/libp2p/go-libp2p-resource-manager v0.1.0/go.mod h1:wJPNjeE4XQlxeidwqVY5G6DLOKqFK33u2n8blpl0I6Y= -github.com/libp2p/go-libp2p-resource-manager v0.1.1 h1:JZ++ezpl2SVP2bj4Z+EPSmrKFS9vQVpkgC28G3DBJcA= -github.com/libp2p/go-libp2p-resource-manager v0.1.1/go.mod h1:wJPNjeE4XQlxeidwqVY5G6DLOKqFK33u2n8blpl0I6Y= github.com/libp2p/go-libp2p-routing v0.0.1/go.mod h1:N51q3yTr4Zdr7V8Jt2JIktVU+3xBBylx1MZeVA6t1Ys= github.com/libp2p/go-libp2p-routing v0.1.0/go.mod h1:zfLhI1RI8RLEzmEaaPwzonRvXeeSHddONWkcTcB54nE= github.com/libp2p/go-libp2p-routing-helpers v0.2.3 h1:xY61alxJ6PurSi+MXbywZpelvuU4U4p/gPTxjqCqTzY= From 99e1b9e2aa3979f22654d974f1eb6d43247b851a Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:39:20 -0500 Subject: [PATCH 18/28] Revert "add net stat and limit cli" This reverts commit 0de1566eaff66bbd4574ae9806968dde6c676a5f. --- cli/net.go | 85 ------------------------------------------------------ 1 file changed, 85 deletions(-) diff --git a/cli/net.go b/cli/net.go index 104b4b40ebd..fdd0a13d656 100644 --- a/cli/net.go +++ b/cli/net.go @@ -36,8 +36,6 @@ var NetCmd = &cli.Command{ NetReachability, NetBandwidthCmd, NetBlockCmd, - NetStatCmd, - NetLimitCmd, }, } @@ -608,86 +606,3 @@ var NetBlockListCmd = &cli.Command{ return nil }, } - -var NetStatCmd = &cli.Command{ - Name: "stat", - Usage: "report resource stat for a scope", - ArgsUsage: "scope", - Action: func(cctx *cli.Context) error { - api, closer, err := GetAPI(cctx) - if err != nil { - return err - } - defer closer() - ctx := ReqContext(cctx) - - args := cctx.Args().Slice() - if len(args) != 1 { - return xerrors.Errorf("must specify exactly one scope") - } - scope := args[0] - - result, err := api.NetStat(ctx, scope) - if err != nil { - return err - } - - enc := json.NewEncoder(os.Stdout) - enc.Encode(result) - - return nil - }, -} - -var NetLimitCmd = &cli.Command{ - Name: "limit", - Usage: "get or set resource limit for a scope", - ArgsUsage: "scope [limit]", - Flags: []cli.Flag{ - &cli.BoolFlag{ - Name: "set", - Usage: "set the limit for a scope", - }, - }, - Action: func(cctx *cli.Context) error { - api, closer, err := GetAPI(cctx) - if err != nil { - return err - } - defer closer() - ctx := ReqContext(cctx) - args := cctx.Args().Slice() - - if cctx.Bool("set") { - if len(args) != 2 { - return xerrors.Errorf("must specify exactly a scope and a limit") - } - scope := args[0] - limitStr := args[1] - - var limit atypes.NetLimit - err := json.Unmarshal([]byte(limitStr), &limit) - if err != nil { - return xerrors.Errorf("error decoding limit: %w", err) - } - - return api.NetSetLimit(ctx, scope, limit) - - } else { - if len(args) != 1 { - return xerrors.Errorf("must specify exactly one scope") - } - scope := args[0] - - result, err := api.NetLimit(ctx, scope) - if err != nil { - return err - } - - enc := json.NewEncoder(os.Stdout) - enc.Encode(result) - } - - return nil - }, -} From bac17061d45dc85ea04421ffcc25d215527a555c Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:39:21 -0500 Subject: [PATCH 19/28] Revert "add examples to docgen" This reverts commit 39bf59d37217bd31f6708947717568183dc24882. --- api/docgen/docgen.go | 28 ---------------------------- 1 file changed, 28 deletions(-) diff --git a/api/docgen/docgen.go b/api/docgen/docgen.go index 1190b0dc406..57159993590 100644 --- a/api/docgen/docgen.go +++ b/api/docgen/docgen.go @@ -300,34 +300,6 @@ func init() { Error: "", }) addExample(storiface.ResourceTable) - addExample(network.ScopeStat{ - Memory: 123, - NumStreamsInbound: 1, - NumStreamsOutbound: 2, - NumConnsInbound: 3, - NumConnsOutbound: 4, - NumFD: 5, - }) - addExample(map[string]network.ScopeStat{ - "abc": { - Memory: 123, - NumStreamsInbound: 1, - NumStreamsOutbound: 2, - NumConnsInbound: 3, - NumConnsOutbound: 4, - NumFD: 5, - }}) - addExample(api.NetLimit{ - Memory: 123, - StreamsInbound: 1, - StreamsOutbound: 2, - Streams: 3, - ConnsInbound: 3, - ConnsOutbound: 4, - Conns: 4, - FD: 5, - }) - } func GetAPIType(name, pkg string) (i interface{}, t reflect.Type, permStruct []reflect.Type) { From b8747e3afcf67cfabe822ddf5b6d31c8306b8eeb Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:39:21 -0500 Subject: [PATCH 20/28] Revert "add resource manager Net(Set)Limit api" This reverts commit 554848fe6b2384780b08632c71c304df899a7200. --- api/api_net.go | 4 +- api/types.go | 16 +--- node/impl/net/rcmgr.go | 171 +---------------------------------------- 3 files changed, 3 insertions(+), 188 deletions(-) diff --git a/api/api_net.go b/api/api_net.go index 7dddb09ac0a..0a389e5ed6b 100644 --- a/api/api_net.go +++ b/api/api_net.go @@ -52,9 +52,7 @@ type Net interface { NetBlockList(ctx context.Context) (NetBlockList, error) //perm:read // ResourceManager API - NetStat(ctx context.Context, scope string) (NetStat, error) //perm:read - NetLimit(ctx context.Context, scope string) (NetLimit, error) //perm:read - NetSetLimit(ctx context.Context, scope string, limit NetLimit) error //perm:admin + NetStat(ctx context.Context, scope string) (NetStat, error) //perm:read // ID returns peerID of libp2p node backing this API ID(context.Context) (peer.ID, error) //perm:read diff --git a/api/types.go b/api/types.go index c688edf4b5f..66fb7985060 100644 --- a/api/types.go +++ b/api/types.go @@ -135,21 +135,7 @@ type NetStat struct { Transient *network.ScopeStat `json:",omitempty"` Services map[string]network.ScopeStat `json:",omitempty"` Protocols map[string]network.ScopeStat `json:",omitempty"` - Peers map[string]network.ScopeStat `json:",omitempty"` -} - -type NetLimit struct { - Dynamic bool `json:",omitempty"` - // set if Dynamic is false - Memory int64 `json:",omitempty"` - // set if Dynamic is true - MemoryFraction float64 `json:",omitempty"` - MinMemory int64 `json:",omitempty"` - MaxMemory int64 `json:",omitempty"` - - Streams, StreamsInbound, StreamsOutbound int - Conns, ConnsInbound, ConnsOutbound int - FD int + Peers map[string]network.ScopeStat } type ExtendedPeerInfo struct { diff --git a/node/impl/net/rcmgr.go b/node/impl/net/rcmgr.go index 1b6d57d8e8c..2084d3a3576 100644 --- a/node/impl/net/rcmgr.go +++ b/node/impl/net/rcmgr.go @@ -85,7 +85,7 @@ func (a *NetAPI) NetStat(ctx context.Context, scope string) (result api.NetStat, p := scope[5:] pid, err := peer.IDFromString(p) if err != nil { - return result, xerrors.Errorf("invalid peer ID: %s: %w", p, err) + return result, err } err = a.ResourceManager.ViewPeer(pid, func(s network.PeerScope) error { stat := s.Stat() @@ -100,172 +100,3 @@ func (a *NetAPI) NetStat(ctx context.Context, scope string) (result api.NetStat, return result, xerrors.Errorf("invalid scope %s", scope) } } - -func (a *NetAPI) NetLimit(ctx context.Context, scope string) (result api.NetLimit, err error) { - getLimit := func(s network.ResourceScope) error { - limiter, ok := s.(rcmgr.ResourceScopeLimiter) - if !ok { - return xerrors.Errorf("resource scope doesn't implement ResourceScopeLimiter interface") - } - - limit := limiter.Limit() - switch l := limit.(type) { - case *rcmgr.StaticLimit: - result.Memory = l.Memory - result.Streams = l.BaseLimit.Streams - result.StreamsInbound = l.BaseLimit.StreamsInbound - result.StreamsOutbound = l.BaseLimit.StreamsOutbound - result.Conns = l.BaseLimit.Conns - result.ConnsInbound = l.BaseLimit.ConnsInbound - result.ConnsOutbound = l.BaseLimit.ConnsOutbound - result.FD = l.BaseLimit.FD - - case *rcmgr.DynamicLimit: - result.Dynamic = true - result.MemoryFraction = l.MemoryLimit.MemoryFraction - result.MinMemory = l.MemoryLimit.MinMemory - result.MaxMemory = l.MemoryLimit.MaxMemory - result.Streams = l.BaseLimit.Streams - result.StreamsInbound = l.BaseLimit.StreamsInbound - result.StreamsOutbound = l.BaseLimit.StreamsOutbound - result.Conns = l.BaseLimit.Conns - result.ConnsInbound = l.BaseLimit.ConnsInbound - result.ConnsOutbound = l.BaseLimit.ConnsOutbound - result.FD = l.BaseLimit.FD - - default: - return xerrors.Errorf("unknown limit type %T", limit) - } - - return nil - } - - switch { - case scope == "system": - err = a.ResourceManager.ViewSystem(func(s network.ResourceScope) error { - return getLimit(s) - }) - return result, err - - case scope == "transient": - err = a.ResourceManager.ViewTransient(func(s network.ResourceScope) error { - return getLimit(s) - }) - return result, err - - case strings.HasPrefix(scope, "svc:"): - svc := scope[4:] - err = a.ResourceManager.ViewService(svc, func(s network.ServiceScope) error { - return getLimit(s) - }) - return result, err - - case strings.HasPrefix(scope, "proto:"): - proto := scope[6:] - err = a.ResourceManager.ViewProtocol(protocol.ID(proto), func(s network.ProtocolScope) error { - return getLimit(s) - }) - return result, err - - case strings.HasPrefix(scope, "peer:"): - p := scope[5:] - pid, err := peer.IDFromString(p) - if err != nil { - return result, xerrors.Errorf("invalid peer ID: %s: %w", p, err) - } - err = a.ResourceManager.ViewPeer(pid, func(s network.PeerScope) error { - return getLimit(s) - }) - return result, err - - default: - return result, xerrors.Errorf("invalid scope %s", scope) - } -} - -func (a *NetAPI) NetSetLimit(ctx context.Context, scope string, limit api.NetLimit) error { - setLimit := func(s network.ResourceScope) error { - limiter, ok := s.(rcmgr.ResourceScopeLimiter) - if !ok { - return xerrors.Errorf("resource scope doesn't implement ResourceScopeLimiter interface") - } - - var newLimit rcmgr.Limit - if limit.Dynamic { - newLimit = &rcmgr.DynamicLimit{ - MemoryLimit: rcmgr.MemoryLimit{ - MemoryFraction: limit.MemoryFraction, - MinMemory: limit.MinMemory, - MaxMemory: limit.MaxMemory, - }, - BaseLimit: rcmgr.BaseLimit{ - Streams: limit.Streams, - StreamsInbound: limit.StreamsInbound, - StreamsOutbound: limit.StreamsOutbound, - Conns: limit.Conns, - ConnsInbound: limit.ConnsInbound, - ConnsOutbound: limit.ConnsOutbound, - FD: limit.FD, - }, - } - } else { - newLimit = &rcmgr.StaticLimit{ - Memory: limit.Memory, - BaseLimit: rcmgr.BaseLimit{ - Streams: limit.Streams, - StreamsInbound: limit.StreamsInbound, - StreamsOutbound: limit.StreamsOutbound, - Conns: limit.Conns, - ConnsInbound: limit.ConnsInbound, - ConnsOutbound: limit.ConnsOutbound, - FD: limit.FD, - }, - } - } - - limiter.SetLimit(newLimit) - return nil - } - - switch { - case scope == "system": - err := a.ResourceManager.ViewSystem(func(s network.ResourceScope) error { - return setLimit(s) - }) - return err - - case scope == "transient": - err := a.ResourceManager.ViewTransient(func(s network.ResourceScope) error { - return setLimit(s) - }) - return err - - case strings.HasPrefix(scope, "svc:"): - svc := scope[4:] - err := a.ResourceManager.ViewService(svc, func(s network.ServiceScope) error { - return setLimit(s) - }) - return err - - case strings.HasPrefix(scope, "proto:"): - proto := scope[6:] - err := a.ResourceManager.ViewProtocol(protocol.ID(proto), func(s network.ProtocolScope) error { - return setLimit(s) - }) - return err - - case strings.HasPrefix(scope, "peer:"): - p := scope[5:] - pid, err := peer.IDFromString(p) - if err != nil { - return xerrors.Errorf("invalid peer ID: %s: %w", p, err) - } - err = a.ResourceManager.ViewPeer(pid, func(s network.PeerScope) error { - return setLimit(s) - }) - return err - - default: - return xerrors.Errorf("invalid scope %s", scope) - } -} From e9e28f75e2d42d49d6cb881dceb24d51aa195633 Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:39:22 -0500 Subject: [PATCH 21/28] Revert "add resource manager NetStat api" This reverts commit d05d5bcb70a55411cb4cc5bdeb1b7edcecfca617. --- api/api_net.go | 3 -- api/types.go | 9 ---- node/impl/net/net.go | 13 +++--- node/impl/net/rcmgr.go | 102 ----------------------------------------- 4 files changed, 6 insertions(+), 121 deletions(-) delete mode 100644 node/impl/net/rcmgr.go diff --git a/api/api_net.go b/api/api_net.go index 0a389e5ed6b..4cf9ca336a3 100644 --- a/api/api_net.go +++ b/api/api_net.go @@ -51,9 +51,6 @@ type Net interface { NetBlockRemove(ctx context.Context, acl NetBlockList) error //perm:admin NetBlockList(ctx context.Context) (NetBlockList, error) //perm:read - // ResourceManager API - NetStat(ctx context.Context, scope string) (NetStat, error) //perm:read - // ID returns peerID of libp2p node backing this API ID(context.Context) (peer.ID, error) //perm:read } diff --git a/api/types.go b/api/types.go index 66fb7985060..81345306d61 100644 --- a/api/types.go +++ b/api/types.go @@ -12,7 +12,6 @@ import ( "github.com/ipfs/go-cid" "github.com/ipfs/go-graphsync" - "github.com/libp2p/go-libp2p-core/network" "github.com/libp2p/go-libp2p-core/peer" pubsub "github.com/libp2p/go-libp2p-pubsub" ma "github.com/multiformats/go-multiaddr" @@ -130,14 +129,6 @@ type NetBlockList struct { IPSubnets []string } -type NetStat struct { - System *network.ScopeStat `json:",omitempty"` - Transient *network.ScopeStat `json:",omitempty"` - Services map[string]network.ScopeStat `json:",omitempty"` - Protocols map[string]network.ScopeStat `json:",omitempty"` - Peers map[string]network.ScopeStat -} - type ExtendedPeerInfo struct { ID peer.ID Agent string diff --git a/node/impl/net/net.go b/node/impl/net/net.go index 27e7734a164..a1003ffe5f2 100644 --- a/node/impl/net/net.go +++ b/node/impl/net/net.go @@ -25,13 +25,12 @@ import ( type NetAPI struct { fx.In - RawHost lp2p.RawHost - Host host.Host - Router lp2p.BaseIpfsRouting - ConnGater *conngater.BasicConnectionGater - ResourceManager network.ResourceManager - Reporter metrics.Reporter - Sk *dtypes.ScoreKeeper + RawHost lp2p.RawHost + Host host.Host + Router lp2p.BaseIpfsRouting + ConnGater *conngater.BasicConnectionGater + Reporter metrics.Reporter + Sk *dtypes.ScoreKeeper } func (a *NetAPI) ID(context.Context) (peer.ID, error) { diff --git a/node/impl/net/rcmgr.go b/node/impl/net/rcmgr.go deleted file mode 100644 index 2084d3a3576..00000000000 --- a/node/impl/net/rcmgr.go +++ /dev/null @@ -1,102 +0,0 @@ -package net - -import ( - "context" - "strings" - - "golang.org/x/xerrors" - - "github.com/libp2p/go-libp2p-core/network" - "github.com/libp2p/go-libp2p-core/peer" - "github.com/libp2p/go-libp2p-core/protocol" - rcmgr "github.com/libp2p/go-libp2p-resource-manager" - - "github.com/filecoin-project/lotus/api" -) - -func (a *NetAPI) NetStat(ctx context.Context, scope string) (result api.NetStat, err error) { - switch { - case scope == "all": - rapi, ok := a.ResourceManager.(rcmgr.ResourceManagerState) - if !ok { - return result, xerrors.Errorf("rexource manager does not support ResourceManagerState API") - } - - stat := rapi.Stat() - result.System = &stat.System - result.Transient = &stat.Transient - if len(stat.Services) > 0 { - result.Services = stat.Services - } - if len(stat.Protocols) > 0 { - result.Protocols = make(map[string]network.ScopeStat, len(stat.Protocols)) - for proto, stat := range stat.Protocols { - result.Protocols[string(proto)] = stat - } - } - if len(stat.Peers) > 0 { - result.Peers = make(map[string]network.ScopeStat, len(stat.Peers)) - for p, stat := range stat.Peers { - result.Peers[p.Pretty()] = stat - } - } - - return result, nil - - case scope == "system": - err = a.ResourceManager.ViewSystem(func(s network.ResourceScope) error { - stat := s.Stat() - result.System = &stat - return nil - }) - return result, err - - case scope == "transient": - err = a.ResourceManager.ViewTransient(func(s network.ResourceScope) error { - stat := s.Stat() - result.Transient = &stat - return nil - }) - return result, err - - case strings.HasPrefix(scope, "svc:"): - svc := scope[4:] - err = a.ResourceManager.ViewService(svc, func(s network.ServiceScope) error { - stat := s.Stat() - result.Services = map[string]network.ScopeStat{ - svc: stat, - } - return nil - }) - return result, err - - case strings.HasPrefix(scope, "proto:"): - proto := scope[6:] - err = a.ResourceManager.ViewProtocol(protocol.ID(proto), func(s network.ProtocolScope) error { - stat := s.Stat() - result.Protocols = map[string]network.ScopeStat{ - proto: stat, - } - return nil - }) - return result, err - - case strings.HasPrefix(scope, "peer:"): - p := scope[5:] - pid, err := peer.IDFromString(p) - if err != nil { - return result, err - } - err = a.ResourceManager.ViewPeer(pid, func(s network.PeerScope) error { - stat := s.Stat() - result.Peers = map[string]network.ScopeStat{ - p: stat, - } - return nil - }) - return result, err - - default: - return result, xerrors.Errorf("invalid scope %s", scope) - } -} From b5912d15432dff51c9e6784f3efd0ed100e949d6 Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:39:22 -0500 Subject: [PATCH 22/28] Revert "instantiate resource manager in DI" This reverts commit 8d3f98fe386f96a3824b0ae7da39a0be463772e0. --- node/builder.go | 6 ---- node/modules/lp2p/rcmgr.go | 66 -------------------------------------- 2 files changed, 72 deletions(-) delete mode 100644 node/modules/lp2p/rcmgr.go diff --git a/node/builder.go b/node/builder.go index 6770e8dc8f7..96d217ec348 100644 --- a/node/builder.go +++ b/node/builder.go @@ -15,7 +15,6 @@ import ( logging "github.com/ipfs/go-log/v2" ci "github.com/libp2p/go-libp2p-core/crypto" "github.com/libp2p/go-libp2p-core/host" - "github.com/libp2p/go-libp2p-core/network" "github.com/libp2p/go-libp2p-core/peer" "github.com/libp2p/go-libp2p-core/peerstore" "github.com/libp2p/go-libp2p-core/routing" @@ -69,7 +68,6 @@ var ( BandwidthReporterKey = special{11} // Libp2p option ConnGaterKey = special{12} // libp2p option DAGStoreKey = special{13} // constructor returns multiple values - ResourceManagerKey = special{14} // Libp2p option ) type invoke int @@ -217,10 +215,6 @@ var LibP2P = Options( Override(ConnectionManagerKey, lp2p.ConnectionManager(50, 200, 20*time.Second, nil)), Override(new(*conngater.BasicConnectionGater), lp2p.ConnGater), Override(ConnGaterKey, lp2p.ConnGaterOption), - - // Services (resource management) - Override(new(network.ResourceManager), lp2p.ResourceManager), - Override(ResourceManagerKey, lp2p.ResourceManagerOption), ) func IsType(t repo.RepoType) func(s *Settings) bool { diff --git a/node/modules/lp2p/rcmgr.go b/node/modules/lp2p/rcmgr.go deleted file mode 100644 index a012fc1f427..00000000000 --- a/node/modules/lp2p/rcmgr.go +++ /dev/null @@ -1,66 +0,0 @@ -package lp2p - -import ( - "errors" - "fmt" - "os" - "path/filepath" - - "go.uber.org/fx" - - "github.com/libp2p/go-libp2p" - "github.com/libp2p/go-libp2p-core/network" - rcmgr "github.com/libp2p/go-libp2p-resource-manager" - - "github.com/filecoin-project/lotus/node/repo" -) - -func ResourceManager(lc fx.Lifecycle, repo repo.LockedRepo) (network.ResourceManager, error) { - var limiter *rcmgr.BasicLimiter - var opts []rcmgr.Option - - repoPath := repo.Path() - - // create limiter -- parse $repo/limits.json if exists - limitsFile := filepath.Join(repoPath, "limits.json") - limitsIn, err := os.Open(limitsFile) - switch { - case err == nil: - defer limitsIn.Close() - limiter, err = rcmgr.NewDefaultLimiterFromJSON(limitsIn) - if err != nil { - return nil, fmt.Errorf("error parsing limit file: %w", err) - } - - case errors.Is(err, os.ErrNotExist): - limiter = rcmgr.NewDefaultLimiter() - - default: - return nil, err - } - - // TODO: also set appropriate default limits for lotus protocols - libp2p.SetDefaultServiceLimits(limiter) - - if os.Getenv("LOTUS_DEBUG_RCMGR") != "" { - debugPath := filepath.Join(repoPath, "debug") - if err := os.MkdirAll(debugPath, 0755); err != nil { - return nil, fmt.Errorf("error creating debug directory: %w", err) - } - traceFile := filepath.Join(debugPath, "rcmgr.json.gz") - opts = append(opts, rcmgr.WithTrace(traceFile)) - } - - mgr, err := rcmgr.NewResourceManager(limiter, opts...) - if err != nil { - return nil, fmt.Errorf("error creating resource manager: %w", err) - } - - return mgr, nil -} - -func ResourceManagerOption(mgr network.ResourceManager) Libp2pOpts { - return Libp2pOpts{ - Opts: []libp2p.Option{libp2p.ResourceManager(mgr)}, - } -} From 85886287b43bba6f0aae8eda2079cf5182ef7c97 Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:39:23 -0500 Subject: [PATCH 23/28] Revert "use the libp2p connmgr" This reverts commit 826cdb2186e49d7f5a48d8ba25a9b820b634a42f. --- node/modules/lp2p/libp2p.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/node/modules/lp2p/libp2p.go b/node/modules/lp2p/libp2p.go index 997792d4825..5d8ece732d2 100644 --- a/node/modules/lp2p/libp2p.go +++ b/node/modules/lp2p/libp2p.go @@ -10,10 +10,10 @@ import ( logging "github.com/ipfs/go-log/v2" "github.com/libp2p/go-libp2p" + connmgr "github.com/libp2p/go-libp2p-connmgr" "github.com/libp2p/go-libp2p-core/crypto" "github.com/libp2p/go-libp2p-core/peer" "github.com/libp2p/go-libp2p-core/peerstore" - "github.com/libp2p/go-libp2p/p2p/net/connmgr" "go.uber.org/fx" ) From 04f2d3543bca94a50a9fde4b89b94110eaf23e86 Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:39:23 -0500 Subject: [PATCH 24/28] Revert "go mod: go-libp2p-resource-manager" This reverts commit c394fbdfc3aaf369dc517446a9fd9fac74007b7c. --- go.mod | 1 - 1 file changed, 1 deletion(-) diff --git a/go.mod b/go.mod index 432ce74867d..0c388823bc7 100644 --- a/go.mod +++ b/go.mod @@ -120,7 +120,6 @@ require ( github.com/libp2p/go-libp2p-pubsub v0.6.0 github.com/libp2p/go-libp2p-quic-transport v0.16.0 github.com/libp2p/go-libp2p-record v0.1.3 - github.com/libp2p/go-libp2p-resource-manager v0.1.0 github.com/libp2p/go-libp2p-routing-helpers v0.2.3 github.com/libp2p/go-libp2p-swarm v0.10.0 github.com/libp2p/go-libp2p-tls v0.3.1 From 08bbfed8254ad56123d880d65b34c960da97ae3a Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:39:24 -0500 Subject: [PATCH 25/28] Revert "go mod: go-libp2p@v0.18.0-rc1" This reverts commit 2fb5837a55ed8d9e8319be512b45b874452562ce. --- go.mod | 16 +++++++-------- go.sum | 63 ++++++++++++++++++++-------------------------------------- 2 files changed, 29 insertions(+), 50 deletions(-) diff --git a/go.mod b/go.mod index 0c388823bc7..0a4943f12b4 100644 --- a/go.mod +++ b/go.mod @@ -94,7 +94,7 @@ require ( github.com/ipfs/go-ipld-cbor v0.0.6 github.com/ipfs/go-ipld-format v0.2.0 github.com/ipfs/go-ipld-legacy v0.1.1 // indirect - github.com/ipfs/go-log/v2 v2.5.0 + github.com/ipfs/go-log/v2 v2.4.0 github.com/ipfs/go-merkledag v0.5.1 github.com/ipfs/go-metrics-interface v0.0.1 github.com/ipfs/go-metrics-prometheus v0.0.2 @@ -110,26 +110,26 @@ require ( github.com/kelseyhightower/envconfig v1.4.0 github.com/libp2p/go-buffer-pool v0.0.2 github.com/libp2p/go-eventbus v0.2.1 - github.com/libp2p/go-libp2p v0.18.0-rc1 - github.com/libp2p/go-libp2p-connmgr v0.3.1 // indirect - github.com/libp2p/go-libp2p-core v0.14.0 + github.com/libp2p/go-libp2p v0.17.0 + github.com/libp2p/go-libp2p-connmgr v0.3.1 + github.com/libp2p/go-libp2p-core v0.13.0 github.com/libp2p/go-libp2p-discovery v0.6.0 github.com/libp2p/go-libp2p-kad-dht v0.15.0 github.com/libp2p/go-libp2p-noise v0.3.0 github.com/libp2p/go-libp2p-peerstore v0.6.0 github.com/libp2p/go-libp2p-pubsub v0.6.0 - github.com/libp2p/go-libp2p-quic-transport v0.16.0 + github.com/libp2p/go-libp2p-quic-transport v0.15.2 github.com/libp2p/go-libp2p-record v0.1.3 github.com/libp2p/go-libp2p-routing-helpers v0.2.3 - github.com/libp2p/go-libp2p-swarm v0.10.0 + github.com/libp2p/go-libp2p-swarm v0.9.0 github.com/libp2p/go-libp2p-tls v0.3.1 - github.com/libp2p/go-libp2p-yamux v0.8.0 + github.com/libp2p/go-libp2p-yamux v0.7.0 github.com/libp2p/go-maddr-filter v0.1.0 github.com/mattn/go-isatty v0.0.14 github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 github.com/mitchellh/go-homedir v1.1.0 github.com/multiformats/go-base32 v0.0.4 - github.com/multiformats/go-multiaddr v0.5.0 + github.com/multiformats/go-multiaddr v0.4.1 github.com/multiformats/go-multiaddr-dns v0.3.1 github.com/multiformats/go-multibase v0.0.3 github.com/multiformats/go-multihash v0.1.0 diff --git a/go.sum b/go.sum index c23fb89e3bc..8a04740cc08 100644 --- a/go.sum +++ b/go.sum @@ -807,9 +807,8 @@ github.com/ipfs/go-log/v2 v2.1.2-0.20200626104915-0016c0b4b3e4/go.mod h1:2v2nsGf github.com/ipfs/go-log/v2 v2.1.2/go.mod h1:2v2nsGfZsvvAJz13SyFzf9ObaqwHiHxsPLEHntrv9KM= github.com/ipfs/go-log/v2 v2.1.3/go.mod h1:/8d0SH3Su5Ooc31QlL1WysJhvyOTDCjcCZ9Axpmri6g= github.com/ipfs/go-log/v2 v2.3.0/go.mod h1:QqGoj30OTpnKaG/LKTGTxoP2mmQtjVMEnK72gynbe/g= +github.com/ipfs/go-log/v2 v2.4.0 h1:iR/2o9PGWanVJrBgIH5Ff8mPGOwpqLaPIAFqSnsdlzk= github.com/ipfs/go-log/v2 v2.4.0/go.mod h1:nPZnh7Cj7lwS3LpRU5Mwr2ol1c2gXIEXuF6aywqrtmo= -github.com/ipfs/go-log/v2 v2.5.0 h1:+MhAooFd9XZNvR0i9FriKW6HB0ql7HNXUuflWtc0dd4= -github.com/ipfs/go-log/v2 v2.5.0/go.mod h1:prSpmC1Gpllc9UYWxDiZDreBYw7zp4Iqp1kOLU9U5UI= github.com/ipfs/go-merkledag v0.0.6/go.mod h1:QYPdnlvkOg7GnQRofu9XZimC5ZW5Wi3bKys/4GQQfto= github.com/ipfs/go-merkledag v0.2.3/go.mod h1:SQiXrtSts3KGNmgOzMICy5c0POOpUNQLvB3ClKnBAlk= github.com/ipfs/go-merkledag v0.2.4/go.mod h1:SQiXrtSts3KGNmgOzMICy5c0POOpUNQLvB3ClKnBAlk= @@ -960,6 +959,7 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/libp2p/go-addr-util v0.0.1/go.mod h1:4ac6O7n9rIAKB1dnd+s8IbbMXkt+oBpzX4/+RACcnlQ= github.com/libp2p/go-addr-util v0.0.2/go.mod h1:Ecd6Fb3yIuLzq4bD7VcywcVSBtefcAwnUISBM3WG15E= +github.com/libp2p/go-addr-util v0.1.0 h1:acKsntI33w2bTU7tC9a0SaPimJGfSI0bFKC18ChxeVI= github.com/libp2p/go-addr-util v0.1.0/go.mod h1:6I3ZYuFr2O/9D+SoyM0zEw0EF3YkldtTX406BpdQMqw= github.com/libp2p/go-buffer-pool v0.0.1/go.mod h1:xtyIz9PMobb13WaxR6Zo1Pd1zXJKYg0a8KiIvDp3TzQ= github.com/libp2p/go-buffer-pool v0.0.2 h1:QNK2iAFa8gjAe1SPz6mHSMuCcjs+X1wlHzeOSqcmlfs= @@ -993,9 +993,8 @@ github.com/libp2p/go-libp2p v0.8.1/go.mod h1:QRNH9pwdbEBpx5DTJYg+qxcVaDMAz3Ee/qD github.com/libp2p/go-libp2p v0.14.3/go.mod h1:d12V4PdKbpL0T1/gsUNN8DfgMuRPDX8bS2QxCZlwRH0= github.com/libp2p/go-libp2p v0.14.4/go.mod h1:EIRU0Of4J5S8rkockZM7eJp2S0UrCyi55m2kJVru3rM= github.com/libp2p/go-libp2p v0.16.0/go.mod h1:ump42BsirwAWxKzsCiFnTtN1Yc+DuPu76fyMX364/O4= +github.com/libp2p/go-libp2p v0.17.0 h1:8l4GV401OSd4dFRyHDtIT/mEzdh/aQGoFC8xshYgm5M= github.com/libp2p/go-libp2p v0.17.0/go.mod h1:Fkin50rsGdv5mm5BshBUtPRZknt9esfmYXBOYcwOTgw= -github.com/libp2p/go-libp2p v0.18.0-rc1 h1:CFHROLGmMwe/p8tR3sHahg/1NSaZa2EGbu7nDmdC+RY= -github.com/libp2p/go-libp2p v0.18.0-rc1/go.mod h1:RgYlH7IIWHXREimC92bw5Lg1V2R5XmSzuLHb5fTnr+8= github.com/libp2p/go-libp2p-asn-util v0.0.0-20200825225859-85005c6cf052/go.mod h1:nRMRTab+kZuk0LnKZpxhOVH/ndsdr2Nr//Zltc/vwgo= github.com/libp2p/go-libp2p-asn-util v0.1.0 h1:rABPCO77SjdbJ/eJ/ynIo8vWICy1VEnL5JAxJbQLo1E= github.com/libp2p/go-libp2p-asn-util v0.1.0/go.mod h1:wu+AnM9Ii2KgO5jMmS1rz9dvzTdj8BXqsPR9HR0XB7I= @@ -1007,6 +1006,7 @@ github.com/libp2p/go-libp2p-autonat v0.2.1/go.mod h1:MWtAhV5Ko1l6QBsHQNSuM6b1sRk github.com/libp2p/go-libp2p-autonat v0.2.2/go.mod h1:HsM62HkqZmHR2k1xgX34WuWDzk/nBwNHoeyyT4IWV6A= github.com/libp2p/go-libp2p-autonat v0.4.2/go.mod h1:YxaJlpr81FhdOv3W3BTconZPfhaYivRdf53g+S2wobk= github.com/libp2p/go-libp2p-autonat v0.6.0/go.mod h1:bFC6kY8jwzNNWoqc8iGE57vsfwyJ/lP4O4DOV1e0B2o= +github.com/libp2p/go-libp2p-autonat v0.7.0 h1:rCP5s+A2dlhM1Xd66wurE0k7S7pPmM0D+FlqqSBXxks= github.com/libp2p/go-libp2p-autonat v0.7.0/go.mod h1:uPvPn6J7cN+LCfFwW5tpOYvAz5NvPTc4iBamTV/WDMg= github.com/libp2p/go-libp2p-autonat-svc v0.1.0/go.mod h1:fqi8Obl/z3R4PFVLm8xFtZ6PBL9MlV/xumymRFkKq5A= github.com/libp2p/go-libp2p-blankhost v0.0.1/go.mod h1:Ibpbw/7cPPYwFb7PACIWdvxxv0t0XCCI10t7czjAjTc= @@ -1022,9 +1022,8 @@ github.com/libp2p/go-libp2p-circuit v0.1.1/go.mod h1:Ahq4cY3V9VJcHcn1SBXjr78AbFk github.com/libp2p/go-libp2p-circuit v0.1.3/go.mod h1:Xqh2TjSy8DD5iV2cCOMzdynd6h8OTBGoV1AWbWor3qM= github.com/libp2p/go-libp2p-circuit v0.1.4/go.mod h1:CY67BrEjKNDhdTk8UgBX1Y/H5c3xkAcs3gnksxY7osU= github.com/libp2p/go-libp2p-circuit v0.2.1/go.mod h1:BXPwYDN5A8z4OEY9sOfr2DUQMLQvKt/6oku45YUmjIo= +github.com/libp2p/go-libp2p-circuit v0.4.0 h1:eqQ3sEYkGTtybWgr6JLqJY6QLtPWRErvFjFDfAOO1wc= github.com/libp2p/go-libp2p-circuit v0.4.0/go.mod h1:t/ktoFIUzM6uLQ+o1G6NuBl2ANhBKN9Bc8jRIk31MoA= -github.com/libp2p/go-libp2p-circuit v0.6.0 h1:rw/HlhmUB3OktS/Ygz6+2XABOmHKzZpPUuMNUMosj8w= -github.com/libp2p/go-libp2p-circuit v0.6.0/go.mod h1:kB8hY+zCpMeScyvFrKrGicRdid6vNXbunKE4rXATZ0M= github.com/libp2p/go-libp2p-connmgr v0.1.1/go.mod h1:wZxh8veAmU5qdrfJ0ZBLcU8oJe9L82ciVP/fl1VHjXk= github.com/libp2p/go-libp2p-connmgr v0.2.4/go.mod h1:YV0b/RIm8NGPnnNWM7hG9Q38OeQiQfKhHCCs1++ufn0= github.com/libp2p/go-libp2p-connmgr v0.3.0/go.mod h1:RVoyPjJm0J9Vd1m6qUN2Tn7kJm4rL1Ml20pFsFgPGik= @@ -1063,9 +1062,8 @@ github.com/libp2p/go-libp2p-core v0.9.0/go.mod h1:ESsbz31oC3C1AvMJoGx26RTuCkNhmk github.com/libp2p/go-libp2p-core v0.10.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQRAMf0sX9mf2sbGg= github.com/libp2p/go-libp2p-core v0.11.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQRAMf0sX9mf2sbGg= github.com/libp2p/go-libp2p-core v0.12.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQRAMf0sX9mf2sbGg= +github.com/libp2p/go-libp2p-core v0.13.0 h1:IFG/s8dN6JN2OTrXX9eq2wNU/Zlz2KLdwZUp5FplgXI= github.com/libp2p/go-libp2p-core v0.13.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQRAMf0sX9mf2sbGg= -github.com/libp2p/go-libp2p-core v0.14.0 h1:0kYSgiK/D7Eo28GTuRXo5YHsWwAisVpFCqCVPUd/vJs= -github.com/libp2p/go-libp2p-core v0.14.0/go.mod h1:tLasfcVdTXnixsLB0QYaT1syJOhsbrhG7q6pGrHtBg8= github.com/libp2p/go-libp2p-crypto v0.0.1/go.mod h1:yJkNyDmO341d5wwXxDUGO0LykUVT72ImHNUqh5D/dBE= github.com/libp2p/go-libp2p-crypto v0.0.2/go.mod h1:eETI5OUfBnvARGOHrJz2eWNyTUxEGZnBxMcbUjfIj4I= github.com/libp2p/go-libp2p-crypto v0.1.0/go.mod h1:sPUokVISZiy+nNuTTH/TY+leRSxnFj/2GLjtOTW90hI= @@ -1100,9 +1098,8 @@ github.com/libp2p/go-libp2p-mplex v0.2.1/go.mod h1:SC99Rxs8Vuzrf/6WhmH41kNn13TiY github.com/libp2p/go-libp2p-mplex v0.2.2/go.mod h1:74S9eum0tVQdAfFiKxAyKzNdSuLqw5oadDq7+L/FELo= github.com/libp2p/go-libp2p-mplex v0.2.3/go.mod h1:CK3p2+9qH9x+7ER/gWWDYJ3QW5ZxWDkm+dVvjfuG3ek= github.com/libp2p/go-libp2p-mplex v0.4.0/go.mod h1:yCyWJE2sc6TBTnFpjvLuEJgTSw/u+MamvzILKdX7asw= +github.com/libp2p/go-libp2p-mplex v0.4.1 h1:/pyhkP1nLwjG3OM+VuaNJkQT/Pqq73WzB3aDN3Fx1sc= github.com/libp2p/go-libp2p-mplex v0.4.1/go.mod h1:cmy+3GfqfM1PceHTLL7zQzAAYaryDu6iPSC+CIb094g= -github.com/libp2p/go-libp2p-mplex v0.5.0 h1:vt3k4E4HSND9XH4Z8rUpacPJFSAgLOv6HDvG8W9Ks9E= -github.com/libp2p/go-libp2p-mplex v0.5.0/go.mod h1:eLImPJLkj3iG5t5lq68w3Vm5NAQ5BcKwrrb2VmOYb3M= github.com/libp2p/go-libp2p-nat v0.0.4/go.mod h1:N9Js/zVtAXqaeT99cXgTV9e75KpnWCvVOiGzlcHmBbY= github.com/libp2p/go-libp2p-nat v0.0.5/go.mod h1:1qubaE5bTZMJE+E/uu2URroMbzdubFz1ChgiN79yKPE= github.com/libp2p/go-libp2p-nat v0.0.6/go.mod h1:iV59LVhB3IkFvS6S6sauVTSOrNEANnINbI/fkaLimiw= @@ -1145,17 +1142,14 @@ github.com/libp2p/go-libp2p-quic-transport v0.10.0/go.mod h1:RfJbZ8IqXIhxBRm5hqU github.com/libp2p/go-libp2p-quic-transport v0.11.2/go.mod h1:wlanzKtIh6pHrq+0U3p3DY9PJfGqxMgPaGKaK5LifwQ= github.com/libp2p/go-libp2p-quic-transport v0.13.0/go.mod h1:39/ZWJ1TW/jx1iFkKzzUg00W6tDJh73FC0xYudjr7Hc= github.com/libp2p/go-libp2p-quic-transport v0.15.0/go.mod h1:wv4uGwjcqe8Mhjj7N/Ic0aKjA+/10UnMlSzLO0yRpYQ= +github.com/libp2p/go-libp2p-quic-transport v0.15.2 h1:wHBEceRy+1/8Ec8dAIyr+/P7L2YefIGprPVy5LrMM+k= github.com/libp2p/go-libp2p-quic-transport v0.15.2/go.mod h1:wv4uGwjcqe8Mhjj7N/Ic0aKjA+/10UnMlSzLO0yRpYQ= -github.com/libp2p/go-libp2p-quic-transport v0.16.0 h1:aVg9/jr+R2esov5sH7wkXrmYmqJiUjtLMLYX3L9KYdY= -github.com/libp2p/go-libp2p-quic-transport v0.16.0/go.mod h1:1BXjVMzr+w7EkPfiHkKnwsWjPjtfaNT0q8RS3tGDvEQ= github.com/libp2p/go-libp2p-record v0.0.1/go.mod h1:grzqg263Rug/sRex85QrDOLntdFAymLDLm7lxMgU79Q= github.com/libp2p/go-libp2p-record v0.1.0/go.mod h1:ujNc8iuE5dlKWVy6wuL6dd58t0n7xI4hAIl8pE6wu5Q= github.com/libp2p/go-libp2p-record v0.1.1/go.mod h1:VRgKajOyMVgP/F0L5g3kH7SVskp17vFi2xheb5uMJtg= github.com/libp2p/go-libp2p-record v0.1.2/go.mod h1:pal0eNcT5nqZaTV7UGhqeGqxFgGdsU/9W//C8dqjQDk= github.com/libp2p/go-libp2p-record v0.1.3 h1:R27hoScIhQf/A8XJZ8lYpnqh9LatJ5YbHs28kCIfql0= github.com/libp2p/go-libp2p-record v0.1.3/go.mod h1:yNUff/adKIfPnYQXgp6FQmNu3gLJ6EMg7+/vv2+9pY4= -github.com/libp2p/go-libp2p-resource-manager v0.1.0 h1:tYpbhLPVC4egLavupAi9jGKKLeMemyGq5tnfBc8taBs= -github.com/libp2p/go-libp2p-resource-manager v0.1.0/go.mod h1:wJPNjeE4XQlxeidwqVY5G6DLOKqFK33u2n8blpl0I6Y= github.com/libp2p/go-libp2p-routing v0.0.1/go.mod h1:N51q3yTr4Zdr7V8Jt2JIktVU+3xBBylx1MZeVA6t1Ys= github.com/libp2p/go-libp2p-routing v0.1.0/go.mod h1:zfLhI1RI8RLEzmEaaPwzonRvXeeSHddONWkcTcB54nE= github.com/libp2p/go-libp2p-routing-helpers v0.2.3 h1:xY61alxJ6PurSi+MXbywZpelvuU4U4p/gPTxjqCqTzY= @@ -1175,9 +1169,8 @@ github.com/libp2p/go-libp2p-swarm v0.3.0/go.mod h1:hdv95GWCTmzkgeJpP+GK/9D9puJeg github.com/libp2p/go-libp2p-swarm v0.5.0/go.mod h1:sU9i6BoHE0Ve5SKz3y9WfKrh8dUat6JknzUehFx8xW4= github.com/libp2p/go-libp2p-swarm v0.5.3/go.mod h1:NBn7eNW2lu568L7Ns9wdFrOhgRlkRnIDg0FLKbuu3i8= github.com/libp2p/go-libp2p-swarm v0.8.0/go.mod h1:sOMp6dPuqco0r0GHTzfVheVBh6UEL0L1lXUZ5ot2Fvc= +github.com/libp2p/go-libp2p-swarm v0.9.0 h1:LdWjHDVjPMYt3NCG2EHcQiIP8XzA8BHhHz8ZLAYol2Y= github.com/libp2p/go-libp2p-swarm v0.9.0/go.mod h1:2f8d8uxTJmpeqHF/1ujjdXZp+98nNIbujVOMEZxCbZ8= -github.com/libp2p/go-libp2p-swarm v0.10.0 h1:1yr7UCwxCN92cw9g9Q+fnJSlk7lOB1RetoEewxhGVL0= -github.com/libp2p/go-libp2p-swarm v0.10.0/go.mod h1:71ceMcV6Rg/0rIQ97rsZWMzto1l9LnNquef+efcRbmA= github.com/libp2p/go-libp2p-testing v0.0.1/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= github.com/libp2p/go-libp2p-testing v0.0.2/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= github.com/libp2p/go-libp2p-testing v0.0.3/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= @@ -1189,9 +1182,8 @@ github.com/libp2p/go-libp2p-testing v0.3.0/go.mod h1:efZkql4UZ7OVsEfaxNHZPzIehts github.com/libp2p/go-libp2p-testing v0.4.0/go.mod h1:Q+PFXYoiYFN5CAEG2w3gLPEzotlKsNSbKQ/lImlOWF0= github.com/libp2p/go-libp2p-testing v0.4.2/go.mod h1:Q+PFXYoiYFN5CAEG2w3gLPEzotlKsNSbKQ/lImlOWF0= github.com/libp2p/go-libp2p-testing v0.5.0/go.mod h1:QBk8fqIL1XNcno/l3/hhaIEn4aLRijpYOR+zVjjlh+A= +github.com/libp2p/go-libp2p-testing v0.6.0 h1:tV/wz6mS1VoAYA/5DGTiyzw9TJ+eXMCMvzU5VPLJSgg= github.com/libp2p/go-libp2p-testing v0.6.0/go.mod h1:QBk8fqIL1XNcno/l3/hhaIEn4aLRijpYOR+zVjjlh+A= -github.com/libp2p/go-libp2p-testing v0.7.0 h1:9bfyhNINizxuLrKsenzGaZalXRXIaAEmx1BP/PzF1gM= -github.com/libp2p/go-libp2p-testing v0.7.0/go.mod h1:OLbdn9DbgdMwv00v+tlp1l3oe2Cl+FAjoWIA2pa0X6E= github.com/libp2p/go-libp2p-tls v0.1.3/go.mod h1:wZfuewxOndz5RTnCAxFliGjvYSDA40sKitV4c50uI1M= github.com/libp2p/go-libp2p-tls v0.3.0/go.mod h1:fwF5X6PWGxm6IDRwF3V8AVCCj/hOd5oFlg+wo2FxJDY= github.com/libp2p/go-libp2p-tls v0.3.1 h1:lsE2zYte+rZCEOHF72J1Fg3XK3dGQyKvI6i5ehJfEp0= @@ -1206,9 +1198,8 @@ github.com/libp2p/go-libp2p-transport-upgrader v0.4.2/go.mod h1:NR8ne1VwfreD5VIW github.com/libp2p/go-libp2p-transport-upgrader v0.4.3/go.mod h1:bpkldbOWXMrXhpZbSV1mQxTrefOg2Fi+k1ClDSA4ppw= github.com/libp2p/go-libp2p-transport-upgrader v0.4.6/go.mod h1:JE0WQuQdy+uLZ5zOaI3Nw9dWGYJIA7mywEtP2lMvnyk= github.com/libp2p/go-libp2p-transport-upgrader v0.5.0/go.mod h1:Rc+XODlB3yce7dvFV4q/RmyJGsFcCZRkeZMu/Zdg0mo= +github.com/libp2p/go-libp2p-transport-upgrader v0.6.0 h1:GfMCU+2aGGEm1zW3UcOz6wYSn8tXQalFfVfcww99i5A= github.com/libp2p/go-libp2p-transport-upgrader v0.6.0/go.mod h1:1e07y1ZSZdHo9HPbuU8IztM1Cj+DR5twgycb4pnRzRo= -github.com/libp2p/go-libp2p-transport-upgrader v0.7.0 h1:ADnLrL7fC4Vy7HPjk9oGof7nDeTqGXuof85Ar6kin9Q= -github.com/libp2p/go-libp2p-transport-upgrader v0.7.0/go.mod h1:GIR2aTRp1J5yjVlkUoFqMkdobfob6RnAwYg/RZPhrzg= github.com/libp2p/go-libp2p-xor v0.0.0-20210714161855-5c005aca55db/go.mod h1:LSTM5yRnjGZbWNTA/hRwq2gGFrvRIbQJscoIL/u6InY= github.com/libp2p/go-libp2p-yamux v0.1.2/go.mod h1:xUoV/RmYkg6BW/qGxA9XJyg+HzXFYkeXbnhjmnYzKp8= github.com/libp2p/go-libp2p-yamux v0.1.3/go.mod h1:VGSQVrqkh6y4nm0189qqxMtvyBft44MOYYPpYKXiVt4= @@ -1222,9 +1213,8 @@ github.com/libp2p/go-libp2p-yamux v0.4.0/go.mod h1:+DWDjtFMzoAwYLVkNZftoucn7PelN github.com/libp2p/go-libp2p-yamux v0.5.0/go.mod h1:AyR8k5EzyM2QN9Bbdg6X1SkVVuqLwTGf0L4DFq9g6po= github.com/libp2p/go-libp2p-yamux v0.5.4/go.mod h1:tfrXbyaTqqSU654GTvK3ocnSZL3BuHoeTSqhcel1wsE= github.com/libp2p/go-libp2p-yamux v0.6.0/go.mod h1:MRhd6mAYnFRnSISp4M8i0ClV/j+mWHo2mYLifWGw33k= +github.com/libp2p/go-libp2p-yamux v0.7.0 h1:bVXHbTj/XH4uBBsPrg26BlDABk5WYRlssY73P0SjhPc= github.com/libp2p/go-libp2p-yamux v0.7.0/go.mod h1:fMyA0CsPfHkIuBU0wjRGrCjTBFiXTXxG0k5M4ETv+08= -github.com/libp2p/go-libp2p-yamux v0.8.0 h1:APQYlttIj+Rr5sfa6siojwsi0ZwcIh/exHIUl9hZr6o= -github.com/libp2p/go-libp2p-yamux v0.8.0/go.mod h1:yTkPgN2ib8FHyU1ZcVD7aelzyAqXXwEPbyx+aSKm9h8= github.com/libp2p/go-maddr-filter v0.0.1/go.mod h1:6eT12kSQMA9x2pvFQa+xesMKUBlj9VImZbj3B9FBH/Q= github.com/libp2p/go-maddr-filter v0.0.4/go.mod h1:6eT12kSQMA9x2pvFQa+xesMKUBlj9VImZbj3B9FBH/Q= github.com/libp2p/go-maddr-filter v0.0.5/go.mod h1:Jk+36PMfIqCJhAnaASRH83bdAvfDRp/w6ENFaC9bG+M= @@ -1236,9 +1226,8 @@ github.com/libp2p/go-mplex v0.1.0/go.mod h1:SXgmdki2kwCUlCCbfGLEgHjC4pFqhTp0ZoV6 github.com/libp2p/go-mplex v0.1.1/go.mod h1:Xgz2RDCi3co0LeZfgjm4OgUF15+sVR8SRcu3SFXI1lk= github.com/libp2p/go-mplex v0.1.2/go.mod h1:Xgz2RDCi3co0LeZfgjm4OgUF15+sVR8SRcu3SFXI1lk= github.com/libp2p/go-mplex v0.2.0/go.mod h1:0Oy/A9PQlwBytDRp4wSkFnzHYDKcpLot35JQ6msjvYQ= +github.com/libp2p/go-mplex v0.3.0 h1:U1T+vmCYJaEoDJPV1aq31N56hS+lJgb397GsylNSgrU= github.com/libp2p/go-mplex v0.3.0/go.mod h1:0Oy/A9PQlwBytDRp4wSkFnzHYDKcpLot35JQ6msjvYQ= -github.com/libp2p/go-mplex v0.4.0 h1:Ukkez9/4EOX5rTw4sHefNJp10dksftAA05ZgyjplUbM= -github.com/libp2p/go-mplex v0.4.0/go.mod h1:y26Lx+wNVtMYMaPu300Cbot5LkEZ4tJaNYeHeT9dh6E= github.com/libp2p/go-msgio v0.0.2/go.mod h1:63lBBgOTDKQL6EWazRMCwXsEeEeK9O2Cd+0+6OOuipQ= github.com/libp2p/go-msgio v0.0.3/go.mod h1:63lBBgOTDKQL6EWazRMCwXsEeEeK9O2Cd+0+6OOuipQ= github.com/libp2p/go-msgio v0.0.4/go.mod h1:63lBBgOTDKQL6EWazRMCwXsEeEeK9O2Cd+0+6OOuipQ= @@ -1253,9 +1242,8 @@ github.com/libp2p/go-nat v0.1.0/go.mod h1:X7teVkwRHNInVNWQiO/tAiAVRwSr5zoRz4YSTC github.com/libp2p/go-netroute v0.1.2/go.mod h1:jZLDV+1PE8y5XxBySEBgbuVAXbhtuHSdmLPL2n9MKbk= github.com/libp2p/go-netroute v0.1.3/go.mod h1:jZLDV+1PE8y5XxBySEBgbuVAXbhtuHSdmLPL2n9MKbk= github.com/libp2p/go-netroute v0.1.5/go.mod h1:V1SR3AaECRkEQCoFFzYwVYWvYIEtlxx89+O3qcpCl4A= +github.com/libp2p/go-netroute v0.1.6 h1:ruPJStbYyXVYGQ81uzEDzuvbYRLKRrLvTYd33yomC38= github.com/libp2p/go-netroute v0.1.6/go.mod h1:AqhkMh0VuWmfgtxKPp3Oc1LdU5QSWS7wl0QLhSZqXxQ= -github.com/libp2p/go-netroute v0.2.0 h1:0FpsbsvuSnAhXFnCY0VLFbJOzaK0VnP0r1QT/o4nWRE= -github.com/libp2p/go-netroute v0.2.0/go.mod h1:Vio7LTzZ+6hoT4CMZi5/6CpY3Snzh2vgZhWgxMNwlQI= github.com/libp2p/go-openssl v0.0.2/go.mod h1:v8Zw2ijCSWBQi8Pq5GAixw6DbFfa9u6VIYDXnvOXkc0= github.com/libp2p/go-openssl v0.0.3/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= github.com/libp2p/go-openssl v0.0.4/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= @@ -1274,14 +1262,14 @@ github.com/libp2p/go-reuseport-transport v0.1.0 h1:C3PHeHjmnz8m6f0uydObj02tMEoi7 github.com/libp2p/go-reuseport-transport v0.1.0/go.mod h1:vev0C0uMkzriDY59yFHD9v+ujJvYmDQVLowvAjEOmfw= github.com/libp2p/go-sockaddr v0.0.2/go.mod h1:syPvOmNs24S3dFVGJA1/mrqdeijPxLV2Le3BRLKd68k= github.com/libp2p/go-sockaddr v0.1.0/go.mod h1:syPvOmNs24S3dFVGJA1/mrqdeijPxLV2Le3BRLKd68k= +github.com/libp2p/go-sockaddr v0.1.1 h1:yD80l2ZOdGksnOyHrhxDdTDFrf7Oy+v3FMVArIRgZxQ= github.com/libp2p/go-sockaddr v0.1.1/go.mod h1:syPvOmNs24S3dFVGJA1/mrqdeijPxLV2Le3BRLKd68k= github.com/libp2p/go-stream-muxer v0.0.1/go.mod h1:bAo8x7YkSpadMTbtTaxGVHWUQsR/l5MEaHbKaliuT14= github.com/libp2p/go-stream-muxer v0.1.0/go.mod h1:8JAVsjeRBCWwPoZeH0W1imLOcriqXJyFvB0mR4A04sQ= github.com/libp2p/go-stream-muxer-multistream v0.1.1/go.mod h1:zmGdfkQ1AzOECIAcccoL8L//laqawOsO03zX8Sa+eGw= github.com/libp2p/go-stream-muxer-multistream v0.2.0/go.mod h1:j9eyPol/LLRqT+GPLSxvimPhNph4sfYfMoDPd7HkzIc= +github.com/libp2p/go-stream-muxer-multistream v0.3.0 h1:TqnSHPJEIqDEO7h1wZZ0p3DXdvDSiLHQidKKUGZtiOY= github.com/libp2p/go-stream-muxer-multistream v0.3.0/go.mod h1:yDh8abSIzmZtqtOt64gFJUXEryejzNb0lisTt+fAMJA= -github.com/libp2p/go-stream-muxer-multistream v0.4.0 h1:HsM/9OdtqnIzjVXcxTXjmqKrj3gJ8kacaOJwJS1ipaY= -github.com/libp2p/go-stream-muxer-multistream v0.4.0/go.mod h1:nb+dGViZleRP4XcyHuZSVrJCBl55nRBOMmiSL/dyziw= github.com/libp2p/go-tcp-transport v0.0.4/go.mod h1:+E8HvC8ezEVOxIo3V5vCK9l1y/19K427vCzQ+xHKH/o= github.com/libp2p/go-tcp-transport v0.1.0/go.mod h1:oJ8I5VXryj493DEJ7OsBieu8fcg2nHGctwtInJVpipc= github.com/libp2p/go-tcp-transport v0.1.1/go.mod h1:3HzGvLbx6etZjnFlERyakbaYPdfjg2pWP97dFZworkY= @@ -1289,9 +1277,8 @@ github.com/libp2p/go-tcp-transport v0.2.0/go.mod h1:vX2U0CnWimU4h0SGSEsg++AzvBcr github.com/libp2p/go-tcp-transport v0.2.3/go.mod h1:9dvr03yqrPyYGIEN6Dy5UvdJZjyPFvl1S/igQ5QD1SU= github.com/libp2p/go-tcp-transport v0.2.4/go.mod h1:9dvr03yqrPyYGIEN6Dy5UvdJZjyPFvl1S/igQ5QD1SU= github.com/libp2p/go-tcp-transport v0.2.7/go.mod h1:lue9p1b3VmZj1MhhEGB/etmvF/nBQ0X9CW2DutBT3MM= +github.com/libp2p/go-tcp-transport v0.4.0 h1:VDyg4j6en3OuXf90gfDQh5Sy9KowO9udnd0OU8PP6zg= github.com/libp2p/go-tcp-transport v0.4.0/go.mod h1:0y52Rwrn4076xdJYu/51/qJIdxz+EWDAOG2S45sV3VI= -github.com/libp2p/go-tcp-transport v0.5.0 h1:3ZPW8HAuyRAuFzyabE0hSrCXKKSWzROnZZX7DtcIatY= -github.com/libp2p/go-tcp-transport v0.5.0/go.mod h1:UPPL0DIjQqiWRwVAb+CEQlaAG0rp/mCqJfIhFcLHc4Y= github.com/libp2p/go-testutil v0.0.1/go.mod h1:iAcJc/DKJQanJ5ws2V+u5ywdL2n12X1WbbEG+Jjy69I= github.com/libp2p/go-testutil v0.1.0/go.mod h1:81b2n5HypcVyrCg/MJx4Wgfp/VHojytjVe/gLzZ2Ehc= github.com/libp2p/go-ws-transport v0.0.5/go.mod h1:Qbl4BxPfXXhhd/o0wcrgoaItHqA9tnZjoFZnxykuaXU= @@ -1300,9 +1287,8 @@ github.com/libp2p/go-ws-transport v0.1.2/go.mod h1:dsh2Ld8F+XNmzpkaAijmg5Is+e9l6 github.com/libp2p/go-ws-transport v0.2.0/go.mod h1:9BHJz/4Q5A9ludYWKoGCFC5gUElzlHoKzu0yY9p/klM= github.com/libp2p/go-ws-transport v0.3.0/go.mod h1:bpgTJmRZAvVHrgHybCVyqoBmyLQ1fiZuEaBYusP5zsk= github.com/libp2p/go-ws-transport v0.4.0/go.mod h1:EcIEKqf/7GDjth6ksuS/6p7R49V4CBY6/E7R/iyhYUA= +github.com/libp2p/go-ws-transport v0.5.0 h1:cO6x4P0v6PfxbKnxmf5cY2Ny4OPDGYkUqNvZzp/zdlo= github.com/libp2p/go-ws-transport v0.5.0/go.mod h1:I2juo1dNTbl8BKSBYo98XY85kU2xds1iamArLvl8kNg= -github.com/libp2p/go-ws-transport v0.6.0 h1:326XBL6Q+5CQ2KtjXz32+eGu02W/Kz2+Fm4SpXdr0q4= -github.com/libp2p/go-ws-transport v0.6.0/go.mod h1:dXqtI9e2JV9FtF1NOtWVZSKXh5zXvnuwPXfj8GPBbYU= github.com/libp2p/go-yamux v1.2.1/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZwqQTcow= github.com/libp2p/go-yamux v1.2.2/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZwqQTcow= github.com/libp2p/go-yamux v1.2.3/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZwqQTcow= @@ -1314,9 +1300,8 @@ github.com/libp2p/go-yamux v1.4.0/go.mod h1:fr7aVgmdNGJK+N1g+b6DW6VxzbRCjCOejR/h github.com/libp2p/go-yamux v1.4.1 h1:P1Fe9vF4th5JOxxgQvfbOHkrGqIZniTLf+ddhZp8YTI= github.com/libp2p/go-yamux v1.4.1/go.mod h1:fr7aVgmdNGJK+N1g+b6DW6VxzbRCjCOejR/hkmpooHE= github.com/libp2p/go-yamux/v2 v2.2.0/go.mod h1:3So6P6TV6r75R9jiBpiIKgU/66lOarCZjqROGxzPpPQ= +github.com/libp2p/go-yamux/v2 v2.3.0 h1:luRV68GS1vqqr6EFUjtu1kr51d+IbW0gSowu8emYWAI= github.com/libp2p/go-yamux/v2 v2.3.0/go.mod h1:iTU+lOIn/2h0AgKcL49clNTwfEw+WSfDYrXe05EyKIs= -github.com/libp2p/go-yamux/v3 v3.0.1 h1:lIdxHGVZ+y/EHgCrqGNt4Q+Mk9qu26MbOWH/yRw+Ihk= -github.com/libp2p/go-yamux/v3 v3.0.1/go.mod h1:s2LsDhHbh+RfCsQoICSYt58U2f8ijtPANFD8BmE74Bo= github.com/libp2p/zeroconf/v2 v2.1.1/go.mod h1:fuJqLnUwZTshS3U/bMRJ3+ow/v9oid1n0DmyYyNO1Xs= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= @@ -1324,9 +1309,8 @@ github.com/lucas-clemente/quic-go v0.11.2/go.mod h1:PpMmPfPKO9nKJ/psF49ESTAGQSdf github.com/lucas-clemente/quic-go v0.19.3/go.mod h1:ADXpNbTQjq1hIzCpB+y/k5iz4n4z4IwqoLb94Kh5Hu8= github.com/lucas-clemente/quic-go v0.21.2/go.mod h1:vF5M1XqhBAHgbjKcJOXY3JZz3GP0T3FQhz/uyOUS38Q= github.com/lucas-clemente/quic-go v0.23.0/go.mod h1:paZuzjXCE5mj6sikVLMvqXk8lJV2AsqtJ6bDhjEfxx0= +github.com/lucas-clemente/quic-go v0.24.0 h1:ToR7SIIEdrgOhgVTHvPgdVRJfgVy+N0wQAagH7L4d5g= github.com/lucas-clemente/quic-go v0.24.0/go.mod h1:paZuzjXCE5mj6sikVLMvqXk8lJV2AsqtJ6bDhjEfxx0= -github.com/lucas-clemente/quic-go v0.25.0 h1:K+X9Gvd7JXsOHtU0N2icZ2Nw3rx82uBej3mP4CLgibc= -github.com/lucas-clemente/quic-go v0.25.0/go.mod h1:YtzP8bxRVCBlO77yRanE264+fY/T2U9ZlW1AaHOsMOg= github.com/lucasb-eyer/go-colorful v1.0.3 h1:QIbQXiugsb+q10B+MI+7DI1oQLdmnep86tWFlaaUAac= github.com/lucasb-eyer/go-colorful v1.0.3/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/lufia/iostat v1.1.0/go.mod h1:rEPNA0xXgjHQjuI5Cy05sLlS2oRcSlWHRLrvh/AQ+Pg= @@ -1353,8 +1337,6 @@ github.com/marten-seemann/qtls-go1-16 v0.1.4/go.mod h1:gNpI2Ol+lRS3WwSOtIUUtRwZE github.com/marten-seemann/qtls-go1-17 v0.1.0-rc.1/go.mod h1:fz4HIxByo+LlWcreM4CZOYNuz3taBQ8rN2X6FqvaWo8= github.com/marten-seemann/qtls-go1-17 v0.1.0 h1:P9ggrs5xtwiqXv/FHNwntmuLMNq3KaSIG93AtAZ48xk= github.com/marten-seemann/qtls-go1-17 v0.1.0/go.mod h1:fz4HIxByo+LlWcreM4CZOYNuz3taBQ8rN2X6FqvaWo8= -github.com/marten-seemann/qtls-go1-18 v0.1.0-beta.1 h1:EnzzN9fPUkUck/1CuY1FlzBaIYMoiBsdwTNmNGkwUUM= -github.com/marten-seemann/qtls-go1-18 v0.1.0-beta.1/go.mod h1:PUhIQk19LoFt2174H4+an8TYvWOGjb/hHwphBeaDHwI= github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd h1:br0buuQ854V8u83wA0rVZ8ttrq5CpaPZdvrK0LP2lOk= github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd/go.mod h1:QuCEs1Nt24+FYQEqAAncTDPJIuGs+LxK1MCiFL25pMU= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= @@ -1453,9 +1435,8 @@ github.com/multiformats/go-multiaddr v0.3.0/go.mod h1:dF9kph9wfJ+3VLAaeBqo9Of8x4 github.com/multiformats/go-multiaddr v0.3.1/go.mod h1:uPbspcUPd5AfaP6ql3ujFY+QWzmBD8uLLL4bXW0XfGc= github.com/multiformats/go-multiaddr v0.3.3/go.mod h1:lCKNGP1EQ1eZ35Za2wlqnabm9xQkib3fyB+nZXHLag0= github.com/multiformats/go-multiaddr v0.4.0/go.mod h1:YcpyLH8ZPudLxQlemYBPhSm0/oCXAT8Z4mzFpyoPyRc= +github.com/multiformats/go-multiaddr v0.4.1 h1:Pq37uLx3hsyNlTDir7FZyU8+cFCTqd5y1KiM2IzOutI= github.com/multiformats/go-multiaddr v0.4.1/go.mod h1:3afI9HfVW8csiF8UZqtpYRiDyew8pRX7qLIGHu9FLuM= -github.com/multiformats/go-multiaddr v0.5.0 h1:i/JuOoVg4szYQ4YEzDGtb2h0o8M7CG/Yq6cGlcjWZpM= -github.com/multiformats/go-multiaddr v0.5.0/go.mod h1:3KAxNkUqLTJ20AAwN4XVX4kZar+bR+gh4zgbfr3SNug= github.com/multiformats/go-multiaddr-dns v0.0.1/go.mod h1:9kWcqw/Pj6FwxAwW38n/9403szc57zJPs45fmnznu3Q= github.com/multiformats/go-multiaddr-dns v0.0.2/go.mod h1:9kWcqw/Pj6FwxAwW38n/9403szc57zJPs45fmnznu3Q= github.com/multiformats/go-multiaddr-dns v0.0.3/go.mod h1:9kWcqw/Pj6FwxAwW38n/9403szc57zJPs45fmnznu3Q= @@ -1576,8 +1557,6 @@ github.com/openzipkin/zipkin-go v0.2.5/go.mod h1:KpXfKdgRDnnhsxw4pNIH9Md5lyFqKUa github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 h1:onHthvaw9LFnH4t2DcNVpwGmV9E1BkGknEliJkfwQj0= -github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58/go.mod h1:DXv8WO4yhMYhSNPKjeNKa5WY9YCIEBRbNzFFPJbWO6Y= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= From 898f523162c3c3e438e1be39ffaf5f120d02af4f Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:41:41 -0500 Subject: [PATCH 26/28] Upgrade to go-data-transfer 1.14.1 --- go.mod | 2 +- go.sum | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/go.mod b/go.mod index 0a4943f12b4..f8a1b1d7621 100644 --- a/go.mod +++ b/go.mod @@ -35,7 +35,7 @@ require ( github.com/filecoin-project/go-cbor-util v0.0.1 github.com/filecoin-project/go-commp-utils v0.1.3 github.com/filecoin-project/go-crypto v0.0.1 - github.com/filecoin-project/go-data-transfer v1.13.0 + github.com/filecoin-project/go-data-transfer v1.14.1 github.com/filecoin-project/go-fil-commcid v0.1.0 github.com/filecoin-project/go-fil-commp-hashhash v0.1.0 github.com/filecoin-project/go-fil-markets v1.17.0 diff --git a/go.sum b/go.sum index 8a04740cc08..cb7fb0a34df 100644 --- a/go.sum +++ b/go.sum @@ -316,8 +316,9 @@ github.com/filecoin-project/go-commp-utils v0.1.3/go.mod h1:3ENlD1pZySaUout0p9AN github.com/filecoin-project/go-crypto v0.0.0-20191218222705-effae4ea9f03/go.mod h1:+viYnvGtUTgJRdy6oaeF4MTFKAfatX071MPDPBL11EQ= github.com/filecoin-project/go-crypto v0.0.1 h1:AcvpSGGCgjaY8y1az6AMfKQWreF/pWO2JJGLl6gCq6o= github.com/filecoin-project/go-crypto v0.0.1/go.mod h1:+viYnvGtUTgJRdy6oaeF4MTFKAfatX071MPDPBL11EQ= -github.com/filecoin-project/go-data-transfer v1.13.0 h1:UqjBfacClqAmnzukek1oPxJXDM3l5UI/WX8CRN2/VkM= github.com/filecoin-project/go-data-transfer v1.13.0/go.mod h1:TcUtAdQl1ofnLV9oH3gPC93Hjce9yuKnq4O4j2M/BU4= +github.com/filecoin-project/go-data-transfer v1.14.1 h1:c6V9mXzC1uLAoSCqWQe4lHrN/iwMGPw36xoDDYHlH/M= +github.com/filecoin-project/go-data-transfer v1.14.1/go.mod h1:TcUtAdQl1ofnLV9oH3gPC93Hjce9yuKnq4O4j2M/BU4= github.com/filecoin-project/go-ds-versioning v0.0.0-20211206185234-508abd7c2aff/go.mod h1:C9/l9PnB1+mwPa26BBVpCjG/XQCB0yj/q5CK2J8X1I4= github.com/filecoin-project/go-ds-versioning v0.1.1 h1:JiyBqaQlwC+UM0WhcBtVEeT3XrX59mQhT8U3p7nu86o= github.com/filecoin-project/go-ds-versioning v0.1.1/go.mod h1:C9/l9PnB1+mwPa26BBVpCjG/XQCB0yj/q5CK2J8X1I4= From 1bc1cd33662c6137a357b21f8af6be1877a74eb3 Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:41:53 -0500 Subject: [PATCH 27/28] Upgrade to go-fil-markets 1.19.2 --- go.mod | 3 ++- go.sum | 5 ++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index f8a1b1d7621..08cbb4f99f4 100644 --- a/go.mod +++ b/go.mod @@ -36,9 +36,10 @@ require ( github.com/filecoin-project/go-commp-utils v0.1.3 github.com/filecoin-project/go-crypto v0.0.1 github.com/filecoin-project/go-data-transfer v1.14.1 + github.com/filecoin-project/go-ds-versioning v0.1.1 // indirect github.com/filecoin-project/go-fil-commcid v0.1.0 github.com/filecoin-project/go-fil-commp-hashhash v0.1.0 - github.com/filecoin-project/go-fil-markets v1.17.0 + github.com/filecoin-project/go-fil-markets v1.19.2 github.com/filecoin-project/go-jsonrpc v0.1.5 github.com/filecoin-project/go-padreader v0.0.1 github.com/filecoin-project/go-paramfetch v0.0.4 diff --git a/go.sum b/go.sum index cb7fb0a34df..930ebb0746c 100644 --- a/go.sum +++ b/go.sum @@ -316,7 +316,6 @@ github.com/filecoin-project/go-commp-utils v0.1.3/go.mod h1:3ENlD1pZySaUout0p9AN github.com/filecoin-project/go-crypto v0.0.0-20191218222705-effae4ea9f03/go.mod h1:+viYnvGtUTgJRdy6oaeF4MTFKAfatX071MPDPBL11EQ= github.com/filecoin-project/go-crypto v0.0.1 h1:AcvpSGGCgjaY8y1az6AMfKQWreF/pWO2JJGLl6gCq6o= github.com/filecoin-project/go-crypto v0.0.1/go.mod h1:+viYnvGtUTgJRdy6oaeF4MTFKAfatX071MPDPBL11EQ= -github.com/filecoin-project/go-data-transfer v1.13.0/go.mod h1:TcUtAdQl1ofnLV9oH3gPC93Hjce9yuKnq4O4j2M/BU4= github.com/filecoin-project/go-data-transfer v1.14.1 h1:c6V9mXzC1uLAoSCqWQe4lHrN/iwMGPw36xoDDYHlH/M= github.com/filecoin-project/go-data-transfer v1.14.1/go.mod h1:TcUtAdQl1ofnLV9oH3gPC93Hjce9yuKnq4O4j2M/BU4= github.com/filecoin-project/go-ds-versioning v0.0.0-20211206185234-508abd7c2aff/go.mod h1:C9/l9PnB1+mwPa26BBVpCjG/XQCB0yj/q5CK2J8X1I4= @@ -328,8 +327,8 @@ github.com/filecoin-project/go-fil-commcid v0.1.0 h1:3R4ds1A9r6cr8mvZBfMYxTS88Oq github.com/filecoin-project/go-fil-commcid v0.1.0/go.mod h1:Eaox7Hvus1JgPrL5+M3+h7aSPHc0cVqpSxA+TxIEpZQ= github.com/filecoin-project/go-fil-commp-hashhash v0.1.0 h1:imrrpZWEHRnNqqv0tN7LXep5bFEVOVmQWHJvl2mgsGo= github.com/filecoin-project/go-fil-commp-hashhash v0.1.0/go.mod h1:73S8WSEWh9vr0fDJVnKADhfIv/d6dCbAGaAGWbdJEI8= -github.com/filecoin-project/go-fil-markets v1.17.0 h1:i9U6hZ+peri6Ygfwoda0YBk4bo1SHkd58EPBRgXCRlQ= -github.com/filecoin-project/go-fil-markets v1.17.0/go.mod h1:tKRMkDovSJiUo8yDt6YQM/gHMfNVYya0YTdayGhRnRY= +github.com/filecoin-project/go-fil-markets v1.19.2 h1:E+e0OhGAxluSbMExcEH91FErWwMQlkMlpF/Ijjny6Z0= +github.com/filecoin-project/go-fil-markets v1.19.2/go.mod h1:hYDiJHSKib3wo33rfKM1ujyaY2E0KFdsX6JdzaXTI08= github.com/filecoin-project/go-hamt-ipld v0.1.5 h1:uoXrKbCQZ49OHpsTCkrThPNelC4W3LPEk0OrS/ytIBM= github.com/filecoin-project/go-hamt-ipld v0.1.5/go.mod h1:6Is+ONR5Cd5R6XZoCse1CWaXZc0Hdb/JeX+EQCQzX24= github.com/filecoin-project/go-hamt-ipld/v2 v2.0.0 h1:b3UDemBYN2HNfk3KOXNuxgTTxlWi3xVvbQP0IT38fvM= From ebe1ca7c771657ed68be1574ada0a1695bad4996 Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:48:07 -0500 Subject: [PATCH 28/28] make gen --- build/openrpc/full.json.gz | Bin 26596 -> 26594 bytes build/openrpc/miner.json.gz | Bin 12926 -> 12927 bytes build/openrpc/worker.json.gz | Bin 3960 -> 3962 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/build/openrpc/full.json.gz b/build/openrpc/full.json.gz index 6b5c3135fcbc36def3460027b158c12914a40818..5d87fffe9153a4decdbe8e68e87ac05a1d675f8a 100644 GIT binary patch delta 21159 zcma&NQ+FUu11=gnnb@{%+cqY)ZFDrTZDZn0II-TEaC})L*Sy)Zn`zoX(ucUoaupsF7}V-arD@TnlNtjyG_1%) z()37B#Go_8ddQBLDx#)O_>;&8F9=>mPzB;No+A5N!z43I#B+?Em~K^FwxmW-gc45nbQ0A%TeEnSH=Bd(rxl7vjPg z*oS$aIP#D!PuH<`(TI11M|{6y0#)*dAY~UpAvNG6!)O=a<+(z1J}cBg;yCm|MN;$= z=g!-KTk#I{M~++_LEZ)PWkr`asAM($6UDCp{uU65EhgAY(~RiU4{3rCt>cazER-U{ z0fCIKLgc-(3S1)ivIR!Q4pfAF6}`H zk93%rrpp`w`uuuiZxfMJb4k9M!_Z-HRNTW;JzL;7YGvmsKBK^@UMR!P!9LytYM_te zsW#E>GydMw5~Va*HrtQe3y)Z-sdmDT$gl4pVmS22(>6l7#xy?U-(0dCcuLEMVB0mr zo*yxWKwUWa>+)_ee9*w*sX^?VBG&^Fe3vC6Z-u{7QQ_rS&=kE)DGW$}z<2ly;V$AwvhE=h(v z750yw?5IPq2qo`Q3CaT=FgQNp2_I$*x$;8}zz6kr%9$hlv$~C9`qIWT=#kZQ0QvJ} zmo3!$8)yva--Jz;vOY2FucS`9J~v7QKGwXkBZo<>rCAr!OqeDb+wn|EHQK2W$NDPIAdR zes5y`Zo%Gh3Ont|qP1a+Hqv}*srMZ-QaEv#UKpA}G^ogR?SEl``w1k15E#EjYcc&=0Q zD+0s=CJWNvl;D|#X|ELKi(+X%@jjk*F$4OtQvAM|bjRnu!|-JIo7>C7@R^YvU~k}f zTPeQpSgHIQ9BDgvn`w(M#4~@U@4YoWohpATB;JvU5oxQZ3xq1a7xXW;udmzP)d38C zUVz}6f-?UXf}npl`lE{(lMpkzHS%RQ5hZ1;P8;* z&s{^b27kWWudVEDyP2bhtnE19v%}V_bpYx+ zqOeQYz$^E>^@}8NZl5T4R~T1JmUG3M#ODi4YUSEFvH39|Be@&zMxCv&X2@jn7m~(f zP6KHB5xMQUDl3uw+8lf@obP$t=AygE`m=c5*wP{@=xltkl)@vGLop_~L#u=(jCHH} zrmDVw#ZlAF8=rB0-m@{_TetdtLx?iy_t+2a;ONUP^0xMI&9pi zMq<6b;hKMDIj(Fdz(~(U?C$&bR1fc7>{JpJI%o@72B5flo+@3rQc-xBt2%V1X~P=C93-IiCT=?WC+9^Dv!mEHv@U z=}FmJ?hW+5_GFWJf%^ryxt9s8Vq5Xo)pJYJwsZtjile0v2354@DayG^oI%TuR=4>4 z?{76-dy3iC+(9Yx_Q1*ScA+I3f&JQg5%~TMf~IaF2wf7`m$yoqQD75NCxlgp{8Bsn2?FQ88|yF(b&L} zK!;;iqYj)d7?_7$ax;P@>$X7>lz8mbZV?tqUcxI5D!=tR;b7}r4QB)2;Yl}Ss|+$~ zpb@$eRaI`aN5h-(*qKVQBBCN_R&p*PJ?MJlIN~uVV7EM!dbTLSkB%>f#6%{&QUX@E zJ|0I}$V;*(hSbK`n20XOlg8;Cq1;6BO&G*dDv}&hQ?{C#YyY?@Bk$U0&^SuNayTZ{ z|Af2=E%V)|_SeQxz(2r+J{H;AN-j>;k+s6&<(eVG%8e;V+^1+Ia;fHWf6g%_!2A1o zbGzr0>l|>H4gWsceeVLt{QSxf-%9WJ5q{0sB2?e{@Oh~JaQkr7`hApqC3qimIj6Kn z;VC%0P&4;C*%Db7v?945*%Np^BkfZ?)!^B^_|^K`f$HyNX$y6mxJeyxEyu`&xchhn zNd;L-L9x0lU(iPeq)QF^l@j_la^I`^&~{aO&b&)xPZyd=aq*2>>bZEnk8d31yd344 zfK+m6SaIcId`-q(E4kp19rhS7Xo9(~|F@Q}fDqvT9^-ht0+}9ucn;_^r1InS5E`2B z_q#DjOr5}o9NlNfy{M|WGi+@Q_yk$K(0a7B)ce9k;Fuv&aU&r1x9!oUGjZ;TKKW3O z*_`Y1=Fy1Z1fD(h#zBWHS|=#)1*%4g)#kFB)b~~!+KJgub7Kp}I zNxQz605+=Q=670XW8Fbd-lxG2eG*Q7A649ACYc8InMziQAbYj9fBFu|$s&sONN z>N4;qAla=$0URJT5AYs0)SA0n^W+U3D1R)Hbg~}_athlZXFbTTxf06jjr5@=_)#}k ztNB97L>7I;i7S^ZUe5Kk-C3r9 zM-T0PG4HGWfydij)eTh^7i}M|@2?3&XKdVyP%wr<9SeukCSV2`@$O z6ysAxt_jc7MMGC*!APgRLG^x2R+vlh)jr->(70%DW`5z~h}&c#RwUKZhm~7?;lJOy(|`!gCD! zZM>Vrrl2N4=ik>F zFm|huUy2|I!R+_YN)z*u{HyJE1VpIGz=Vysa;ss+lU?Vl)jadX*9oD3@;{ke!EcN{pC7;=~rd>I<%NT!L& z!uTZHw0|enSO!AcE?X!WvdVbh+!)JwAA<&3p>b!ui_B*jX2|E}l(E_tK`wRp zaH5v+Nu;$Zfs>P)lfk12q#hlKcBzRi>p!y#jn0&=9-(_moCbjER%-diDZC@-8dR@OC`*R z)}6;$ble*6*Q)2Mt0;E5I_7*XgGj!z+VU~8U@}ZQXKj4W&g>F_Yn>dwN^014RDIHf z9{EZ6ln2r>G5Dp-`bWs@FTc%XE-Bl@4Q;;)gnE>>R0ka|*x5OLm zCH&)gpgzD9J}NUHkT=5lW|CYXa7YZ^gP;U^C$jW|Ir5~_Nmj3D=c~7l(3o#_UB+-@ zf`QvMe3fp-e|c(#)ysTYe%i!?+3I05F`3db4 z!qcTxh_;+>T=DmwE#7Iyk)~Cf-Q^E;LC*5Qs^QMk$l=Zy%r$gw68b#(daAm(_()*; zu|5dWe1aPTe%;1e&3{#w)4xH2M&Uwp)hK3wSh(BUC@AT{XHa=eXs2T34_(pIx^XDT z{vS`o4{TVQ6)SjoanpFNh9MmEa=nf^y!$}P&>({e}836P-6`g?V!h?-24VIW;%P`VJb(?zjD&2J=^->d>1lmu0(lPl#k(| z=il6I&n0yCR9O5xM#%>!R)0&CK_di&fC$V};qfwr^K=twI^)_I6 z@c9ELEe#>Wty*f#TYmLB)Q}I{Sx+VfzL4QUBotFWf}Vtup)7mjJuF@DS>XeJ<&|Pj zKSg-HJ4#fQptj8YZPFhrZer~+*r+7+k{fSs>6DC9%U8RuQqnCQ^>AOu^cKs_+CIg} z_@co)cKiH)LD$jDuB_Y0bCWJiK}7sn?3I+)7xuc2Lxa4r1*28Xcw zsh90JlB^?rBoDRw^#aN)w96#u96kzH5+S4GaYOuKh`j@L|B{8UiT_C%Rp-q`+0L7B zmtglII`N2UnZ>=tM6EJVL4x~1wJB;3nnL+S9Hm5@;thpHROE%)=mUuhGwD5sAKSZq zbB;avpZ|S_*1!4q{(gWUxAmb=xIFJbNn*!=LtyWLoip=F-IcWzDo#MXVxZKFt*^5( zI$B16{D2CwVp&$2B!}khH$lj(T*niB+ilI`O+P+e+WLK@{_Z=v#Ts{KutTaX0jO&u5FzE(U6`Oo+Qh$a)`57F^V z!HS3U_EZd|ZEjI;*49~2pRtdiF9DF;#gFsAznP`xvplsWG&wH;jtszp7>pZF+F#-< zdsl*|y<%$EK&L?qep0^TbFBpxdD4ULPa790kFxJAg4hp~O`O}FQIEf|105YYZu?UX zZh}ihXw^ov8CgN{hPpfXQ@*mq4Q0gUL^+Q8&xteQY*&Ao~WqX7&?8Qf|~ z%4~w5h`HD!@F9(ygCOb2ludf%@1O2^SwE~%HM^Z96uC2m@tFgutVtdN)dH^)uthC3&tuH-8S6(NVXu6#t(+8g`y8g6FFOO|AjWM#MARxmV4U~bs1FGew_*-1 z6@>y~WAc5U><@Sy-nhgK?SNj1ehVlj2g?Mx7!=7BvA`)S{1>Ab^rMVfm|nW1URcFG zge_v`fdw3x8xFXe7*(QK*xo^S6OwBX${i)vG(Lg7-F%Q=|FZvl6-fE@oV!@Q8z@%R z>N9&5tF+Y?G3~d}*XH)ShTX)^x%qO8VIUY+Ar?Q^e|qQ3(lW&CVgYX>kfdJ{5uLcu z0e{L;D<`neDE|Gft*Y^RhEnow)VY$Y_)qULjwrYI<920={@|rKvN|wL=<#&JyFMWC z$Er@28m9MW!dPDN<@ne6zet!94HPN^1?qJ+fut@V(d^^eKMBCi-kB&?mnn>N`B{PxbN_9;cOEm32}M!jJZ|4O}2 zyd;2pmO;OAUxJtMZmeS@*IoUhKg{n4h8QbNJI-6IVGCoiN-aNBUDPeY?qL|_-Uz~c-$tkEDqLSv_zhIt|15xWb5&L!W=P*I234M=I z=IB9;ffMk#+Y>;9-D5CuA>-!qcjvcD)7R?~>l&F*c=r!xsry4Mb9E}PbM()GW4q`; z2(mm8p+FS~EbBb_j)GXbvE~!&7Gl09PQ9&7-W-Nahx~EvOGfh1Ul8sHu&md597Ct^ zNjTOmT}ue-Fp0I+m#EnDEhb^80XgKAxZ!EfyJ>*C23KMVnbDty|E@s2<$JY)W%598 zZ9}X^o6gq0ULxd&Mf{q-T5FiDP@`z_Iqu5~f$r`f?-&R5tuaLW^F}7B3 zBHy#j3aJU+ZoZ1-bg;HHesTPvViclpB#!;R0;mb|4DjX4QL^Adrcgz&gliQid7Ep# z;v|7()hP%U^D4RL!FmGGuz7HhV8#g@PJyX7_=8`|pJ)!z3sciL!B56-XBbf} z=D2sP$S0yZa=i1o_Ayj7poFz!4;fPw3jjj`w1SdPyI@1IdYy+2DydxG7oiM}zbIwX z`c|e$frj)Dwj=%&G37ku&vdO_GRh2jv^Tlu6$FE~b<+t?CvWYcLj(zF$w{>FJ}_sH zF)%MT!E`yvp-EFH^_GX&avaIT_qXRXd?_FBpJglg{&4&~QFINk=-YaZboq07r+~sb zJ_2+;a!=`8^XrM|mUZ2@;i&HjT2HD^@lpIkeg*WN+8JH2xc7mU1Et5i!+f@6v2BU& z7=K`;wfp^)m1WcW(c;OYl@jmrtb&CqBLo?zK?g>szau#R&^}04apD_wE+g)L%)x1> z;NQ>jWW~`I57B_DmY#xgb|u0=VIUiA8w#&{qHR5fl{`@2HVninoC?u+zQ%?$<1Mo{ z?BA;htojlN-yqZ zNwFIz*&6*9r$6wBmQwdQF++yLF{|=xHu4@w*w&24R*W_e=}iqj#P%c^Ky?0F;;q_t zSmf`ovps{K8`06e)_Bh*Rt5tJ8kJogGHJAtaJ%j7U)?}5Cle*1u^&K#*|XpJQ_HAX zE4hw89^>q;w|PJ-Yg{#BF=a%fsFoJp_(z}HFG+Gu*q8Q!hU#Ovc`$WWT@V|V*F@zS z3Ta=k(P}n!7vhnioGd>8&~F|`n|{=djk7_Jw+!dy`xj|NRg_Ec7GamJ#lfX~pz?4X zD#fy|&x)YA@QUKF*YwBt2`f9d!5!bSbJZt7gEWe}X2c5L`}fFtLXM~>+$N1%`E0JJ zXPo)5wgJ4;Q~MPr2q;XP#ppzE8sBaMek7E1S#*v>irOPfp8w|)@R%JyU-8pv)U*XX z=TO&f&|KqSJ*3IxNBT}9zb{GDAh`u`f!akMh}RwmcnZjGXFP?v(JQ80yP-fnbj{fQ zuRzczj(1x184|Mam?bcrOtnUQX76j^5?Mb@>8vah%>JWuPf)aR+qQER`yhCz_w0eb z^yZ{}0#7_8K9qEp_V&9|N$N>M<7;WnT3lpkg)|93wiP ziR@C?Jnh17-}yVg$tLh@wuS|9$jT!xARa-ntD-}SOykos0tV+FcqOfJLywjzhLMKV zgVb)7i=n-dX5uPu69t+xG$@S5E4m|1I5vcuU&!b}XXrpA;7xUuo52+Ex}5EvUR6?b zjQ{wRFKpFWI^(=3+xGO6bjck%ke55J_bI(j8XoNllPeZi;nmH8 zi!@!7Q9vdOp1+mU_qAp5)`MUX&@F;uf0bo1 zZ;a-a1F-drRu|F^?WZ6%orMps4@fOANtK9oiI~Ox(CvRFD(#(*$>qdWs~I6-u?j3= zgN~l!`{M0*hW+c!3?F7T#uw@7!JdHL)zCyM9Q1vA324x`wDVNdXfCVrZDqXA$+3XT z^w8UAciCJ!DphwOi1$772x|@sAKvvEHz@dAEk}O-ZiD~r zB4~zXb2S}@17cZ6Q>gv?(?r2~&_*$QH4jlQNuc^(hq219F6PYp(=$);yq##KH5g2^b$Po?y_#Aeg-%@X)Mk)Xn{HzgyO+Ik!XT za*)Me5}RhOax)hA8)DxOT62KqkVr^BGlP2o;aa&;VNxEIOY2d&!jq5-?rlE#P)3u# z3<)==egToDu0P==e9DyvfqvJOd-W%%a*PNWH{)rlAE?fh4F)HHVcri^q(uUo17M8y zApdB?fS}&t+VE`+l*|5%BVx&l6~Ww5VdN!W{S?K86{H*m8sMAJ=H*uc2jF zxobp`o~{q$!>IG5%ey=!$DEO+NykIn!C&|sl*1Sy`QstcBOWde4KctW$~%Li{tXAu z9W#qq#sZHi41+eF@B_)uFpEJ2lij@^G<;b)@(C6Z%!ls6oFehLPouL9;JGVNirBTz zvRC1k5c||5Xjj;Rt>-|iRclRM(|EaKeJ zDoNv2+3=_(<#tZ!;#LlkhL3)wGPBbHjR1K{?CdOdE$4D3!o`5;+G&HPU6&+tdYSuS4Az2^V~HCZsa? zgzV@21Ehmz=O8c{09Qof7LeR|sAME?Dtl+T9)(_^U~-BS7hsl>wW~r1sQ<=& zE6<+rcRw^m7+*r({8BBhm##=RxDVw%0O@H}~K$%k_t?cVx*)?Zp_my9TA; zWZGPtk2Vh^AwuvVyxxUq5Ws_76vwY~UVLPOB*RDUuVgUme$>(#?nsNrr^y9~243>U zpH@M)jT>kIIkZ^J{SH=gOX|yZIMbBwoE42Sxe9OC_Vdf`H0wBdwaBv@f>~{bS^+b2 zvGi9YpOMG)Z!P@DdI(yA+lekr61^@6!?xoGtu zG_u^`1|PxUp6)#z>RsL1sGewJ1aS)`zQ&xYsa(oruQ>gK*d0*CKf^VQC&d;qww~a_ z=9@iC|8FcO(eBxDguHlGP%rmrF!{R#3kfEA9}^06FU>>NXN8duC`SknZY~7VKNu7B zmk})lgyq4`^udMV%>Ls6cU9>bMsdas0+}*ufF?H)e&D1?#R8q{}YFa`t-o8AhaW3fTAnUE5?Kd zC^pEF<}zkGeTfqfv9Rywi2Mq=f9I?oG(q?T1HIXK-d6qm$J@ zxMmTnF4_BT4j5gV#G8}x5%J$aETu|-cDmeb}EN)XfHWZ!@c5{va)XAe~(O{ zGO{wO#2iMDafA_sg>;^)3+vL@iuv~X-%u zMK}t2R4!K-tlL9zSxr-ZuteFl?kd7CII(0Jc(EOfh*;L?22I*<78O*$>e>J-#ivm2 z7PFU?Q+NJN4XDu{neCU7UEqRy$k6hyi+5>7jVC#wKPgFKBlU4dKKQcjd(bdw6JJ(S zS3O9C6V}kS)3cWc`mR~G_O!$GPDU7>C!_3}ISl1n?C7gWXP!L|PukByy28v(tITAt zX%u`&!YX-N)o^o~Tl?D*y4ir=%jHUjgt8jbg#kk4f>(#aQatDFd~>^Zb#)Yy06$JR zp=iAkPr`U^tdocuqt!U1LR&#a-t0$JnELavm7-%pyGa9D2^Vbj!lM+WVOQU?sO4py z@VIj_m=~zdPjykD>inpev%=Pd9kahj+gZh$zBqTXr`c(|M zZimq?z!`o(qgIjiY+K_V@lM0i!FP1o%B_HFG?OUh$-p$Zd_3nXb3q+l1No7#Zo67R zqUR&+^=R-F)mC$3OQ&;jp>Mo-e`%BEo2_%;eDV@}RPI{2TkI9-kT2yMTjeV|d4f$4 zG8Ea%wlNuzT@F+)S%-Z~z(XN!jqUG^1+<7T(sXGE0W1>95tZ1jij8>prAU9wOnGLpq0sY+@#{` z9O06S{bwFF|9-FU*#)cEw$WR2i?0oJnL0Z?(8wfUDH!(L%#U-Hgi1A;l@jd3ct_c+ zpKH0I>xEobZ&G>2o<03e*5+{n%}pNTQ3CVKZp7ss1qH21-sj5$F0&3IRGA6-qB8X8 zP8n^M#vZV2U<1Ts`e-T>Pni@)5g*gS6Uu5HQF(0c97z6}cc@ecRVTH&E;3lhP$c2Y zRWP=bN^r(5Vi*_JzhYx~Z2Y&|CU{y0QD!N|*ihIsd$2l+he{NSfH84sA~Q(l?3yN-goZtrG?FgPvCVgyM$qR9{XY z)$X=PX8`;I8o{K5p!b@DZ^(5L`rYv${(p))v+w`YzB{;G`SMQ{HC}7t72}{wKQ@vz zVCaGB=Iy`hxql>k_|zBoEy)b0K<(F)x|Um0h1g!>^!20kYpXTx>)e~o8orS&iw4B$ z%>CHW)pY(H8m_^#$J_aYel{qdW<7k9Wy6^$2?vaK=lS04cXkbYM7&wm_weB7$TjOt z_4HMcvnbG#YYh0)|%Qv@G;9#fvV%q7u3{_TtmY313RN z=C*6<0k8p^GHNgUkco^C-3;`(tLa@jY%R|y==)lFvf}o_Ld&(|FqB@ySK~R!djrBN z0EdSKyw4X&q2tb8s&>2!AU$HAl+c$MMs;%4y7aoMb6aKt;FReu9EV)#0(m+hUnh(QiIP zKMiQMU+J)Y^F@`FR@#URVU(7jZrYq<(#`si6*>z?a0Nve^X;qujI8w<$LVe4$o|By zEwRa0#JxkjKJJJ9K^yLZHN7OaX^SFiMFz|)O{I#n=)(S`C2Wx0nQMEDWF&_RE&O-( z^@LMFYZ`BbKfr)iE!UoIw<1EaS9izy_@e)7o54VZvr`6)kU=S+XN#In7hIElBar>j z-|5lNtp6`nryw6=RVE!^tt^k`hQVc+}%?k6jAnhHm(KC>9qamFa(5>F?%fiALe zFL&$?dn{jMZ3HxIZ_JSN@Gn=d8Zj3?2=LyUZQArzL?G%P67zn-2!e2${X;{*vpu}) zE+LnrR4!A1{YD1{+OmzMs4^Ef@*^_2!}aONm4F7r&3xbzdV}n3=)xta*Ye?>jz61- zt@tKRsvzp-bNdmTJA7Y-056&ZXuRKKYdM6+-RTBtv#T1F$TlIM*m@!@HG6U&zjqODLU8 zNxPJd8Y?k!o$RPi_?n_#%d3W+G?bPD$vD)XNbF9OyWV{k%8LpS+m&Umx)Kzz< z2%Cnv2cn)=7v7{sPaUfyJD_~Rj^123TsKza) z)_>R2TBMs5j#f6crksVB|9Y>Dv!84*|=i!B3wX1s-~* zDS2Br_k;1h$5eUvTd%ciYO5SJ9FhwpS%A2#D^h`>n7X8Q?kdN8^PBV5 z7Orc{8g_?({~VowS}r*kcwGKWq)9U-=`E~S2j!+&6wHi_w&0(6J^4sZM~oCA6rff&(M7P?oSVlc8h<}Br0Vq1r4v#85| zs+pa0O&48OZHalSMI(i>ha$=K=C?QI?1L>{UZJ6FDCE|srKrew|G=1-bpCv}tPay{ z1Mr%Cp-3)AP#Npxk{ibj+Uzk)*;Fu3raB}MOkJt@A3u<(L)?FvF7xw z3361eIZp!r*@$Eow7~nb{#5bUTZo*Y*lYAQ#@b%{JNj>OF}!qf;}VrLE5Z7lSWee( zzP!wHi#<0>)9?|yub?>A9=V>YA(rl?0eDO6*W)zze6-Rmtb$Q`YaZO-yaVW@%QNvYDE=?pxfI=*7q@ii2>ljqUxLwZ>uD z>w|t^{A=mRO7AEqiN}Dv(MLTFECzZIR; zQhcjn*7hHXX0r>ud^c)DB|W%Rtp=I-(w+bbC@t6d7CsSUdBv(hhtm?f^~Fk=rL-`f zIlI3#dG`dWgE$i$1fS&5%I-)LX27qejIcuv)5Vc_)TT;v`hnCdWB=+KJI_WM&p=g9 zOXj_m0TOck{qPAlO%U7582iRK&U$-^{f=2JI*@eJ#SJd&mR^in_{MRhts17zDmF(v zxE2WSW=TijWuFRXFkTbNkt4TGYeA&$Q1-mw7Yyepd+7}NwNl(U(t2x4CJ?Ln&gW*h zNMb8hKBm$&lp~bEM1O36rdFxa-MW*#nd>_)b&4(=4gQL#`5C>`(#f_1l!0zf+g`-D zS(fmTeTL(n#zP=Ea8Yz67`sCgj&MoGdT1qgid#0v-qdXyjB0lyN?fuf?ha9ziKd4P zqSD1C#<*X)F)vmP_d^2%XC5kh5b(-_38oJ`8Tl8^RG5Bp6xz#SFl(u0`<=i6U(b z4}$Pxp%e%*eVvPH7lhywge2Zp*E^IAasdRa;}cBDfL-sRmMLBvz$!ote%0Sy%4At? za7u8EdcrLsCi~tF>7B7Bh|$wgCO}(HZ0xSUgF*%S8_CQmTMiRmt%QSmaw&qqfE81P zuR13`WYdN!dOd8hQli<%XktHVYm0!R)J)~~F4P`K9C(v1h$%+J;!U=XOGG(Us2*vH z=sRM;6!{iLS*ous5c@AGCd-#D7*Za#01X6#_x%^eIvrfQcS0abQn|z@%oeIJS+A)0 zPx)doy9wlMo?BZeR)6c;DXx5V{Ff_5HK-qLP4OrX;PUNxa-WS^kX}={TlG6|d|S0-0b!3@n9-D4>i(<;hWsw2aNBKr)Y}aVu_Jwd7312Nfd@~d1D@rUZ(Z#i$C)Z*njjnfPG(YdbPvplAg-Ep$Z6E0U z0@n`}Nh1ytp<%yZl^sWXlP|>&W2$qF1;pTP@z&x_rFSd33l7VQ5@=YevEf$v7*;VO zQaDD{a*L}2AU^qB@oIhabDo~b&|OER--Q3yAfP(xRY&9a>*q?Ufw8YKO=TS=ZR$G@ zg#{J0#8?^i6#rD5sOs~Srnqb#?UU!-oQNV6FOC%kN>+aVq44ayZ+36NOe;B2;QcSj z2-qAB9cB0slD9MQQ*Kxl=?&Ymbfp!i|pz32Mt>(cPs zHAL`(>&NyrLH)_|H~&NThCjET=bz7@uF`9!>!SE_uK#)j`3Pa)nP$@RcWWihhRnC8 zmpENJsCI_qw?J+f_9$`U+_cs6RMp)1+}8O|NNnddof3Ir5PHdya1DCU&b z;i{E9z@t!rqr{Fr=q?cNo%`|$HwusQC<9lV@28t#nZ0~oi``kpDzCWIOnnpxnJe7N zf8NNXm5xw$lqLorlFm@OuZvdCMYqj(Xz^k3A1%vJmzrQ7TACJ6(WBaTozS=wzqmFq z;oaZq{^_`s*PidC0cP}#uAB{dJ+KOCpoR1hKxei3o}C%V-GPBwyJ2zlJXKV;jb#pn z2lcSKdZ_;c{t1b6-hj!DBh5!K>C*oH%$`{kgu?JwQXG~~?b|$FN&6Y# z3p@0wokbyiR`ztyV8}5a#X4lbME+$<5%J{hje)`@yp5F**VA^vgg`~Jw#q&*wJ*QT z8qXp=*%n*%BE@b`P~~6A(MT6T_xkDnNiNz|)g`OtN>S&OU3VkyKnSsP7nD!5PCI}( zRDL{K%q49UyqB%EKP!1h52T0*=(7M>*f?9U9&yl(@%HDKP{og{HySUs*e9d5pmQnNqnH;GmG4?<*z(7L3qo+5INY<#Uc z19*rG~bceVqwE2f~2wSelp5CGVOn^?c zQOaxrHRq9~^Wh?oMSOQ!5j_X|-+5&H8=t(;U+#={hJrdRltD_(Y(a&Quye@*L$Oo1 z;mX2CMbVAV3{mcVG#l?GU?AshlaNPJnA0hSV3$j`lI>DcyQtbcIjJA1<4DE5SUxl+ z^)ruY{XIne+{$k@kCDx1Z>b9q%zG@DVURN|luEWgsE^!OW%B(K`@(>R#EZ}>@=u9y zk|>H2xC6S<2aQ>isR=dNx{=wAX*TDWP7vCX^!;*sH@hW?st9ckK}`wQ?fx=J2d5f3 zb%ap;D`XyUyQoSW6L+`S92-rMat_0G|4lPEon`td?f0x#oX>+I{bxxz*KP{mpLDtI zGZ7ytt_eE#LOb+kwRJ$t=}#65qBGQ+Ej5n9Z%CN{l}nBuGvi^zap8Q;kh|>y=yd=OKgh++>4Z{8|%6xnbrGS zoWjCcbwkf?4G$~psS#4J^w3oHZTC(EjR7a0`LjoRiK?Yl>LS(p689-Mb z2`z-=|Mi~YKg!!H)bcz$+D-2B?0mwn^s@re%eG5TJ+0sLv%aMK(a$v0o;sBxw&zdY zlD(E;f8j#V3ZJ;%Olpn)qi#hPz%|F~HO+MLoy|Dz20*E@=npp__ky;d$SPyrvfreo z`C5nx??B6Ilnqn!7(81a`e>uIjYN6kp@y55ZSRa{-j@|qO1x-(oo$n@PcfsQyVMZC?bG;F;+tbAj2ntvsb*~RRXSJzv za@tO80y8aBOAg2W*&L}-j#;P?Ibrr7MNMx}BpuLil5*WYWy%$vu*z+p`upSa zofBq$r{N2S6|wa&_ljqhpLsYp)JxFYbAC=-Rc-L$UHiElr*=1GzWp9))PGA_Z&_w9 z=Wp(I(rMhDFS6~9*7DCD@o#@x)KsH{^Om-q12m4J+tcdR;QW5P<4LVx1%HKZC}00% z1c8@f!aY-)v>mQ7>$Kxb`mVn)(fMC>m?SV}$W^`!#MKF2=geHIqh&wPXZg@f8P37s zXCj>oE2#1})Up-Hjr8x@iKlRvaIDG}fw?dT4fL$pjF&*vo&SQgwu%M!X`l(CJONF>JO#sE$EdO=B_&cq)EVDb4>0H5 z|D|p4T^uQ+qeoQ#oLxm)5+Z=12kA+31K>Ge;@bG9cqg+24_@`N3ZEEcl#P+t1R|cJ z(L8sH^-R4Z+f0la8L36eeOMMCpBMwe>}dv94z zxVtoz%+fen1HWF#VI)Bs==x1 |coh_y>%%D@F6TG=k9%qVV${;L(E1ooES0^Gt( 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 delta 21149 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

rMx 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

u)RVlW=36c}wH?W#*z~H+XG;b6uCjK>#qx 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 diff --git a/build/openrpc/miner.json.gz b/build/openrpc/miner.json.gz index f64a87117de1c34302520d8acff22c5c837d562d..5d05474e602abc3936d1d5f590e5b7810681d8c9 100644 GIT binary patch delta 12303 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 delta 12290 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≀gT7urlaP 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 Ui<`y&2LJ&7|ENzSa0cc80MtdrmjD0& literal 3960 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