Skip to content

Commit 735f85b

Browse files
BarbatosBarbatos
authored andcommitted
chore(p2p): add libp2p v2.2.7 source as p2p module
Copy source code from tronprotocol/libp2p v2.2.7 into a new p2p/ gradle submodule. This commit introduces the original source without modifications, preserving the org.tron.p2p package structure. - Add p2p/build.gradle with protobuf plugin and dependency declarations - Add p2p/lombok.config to override root lombok field name (log vs logger) - Move example code (StartApp) to src/test/java - Proto generated code is not committed (built by protobuf plugin) - Update gradle/verification-metadata.xml for new dependencies
1 parent de5a265 commit 735f85b

123 files changed

Lines changed: 12085 additions & 0 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

gradle/verification-metadata.xml

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -340,6 +340,14 @@
340340
<sha256 value="afded6e6a690fbf3ad4ae65ada397f0a90a5f630b303d1b741b9c97926fdd4de" origin="Generated by Gradle"/>
341341
</artifact>
342342
</component>
343+
<component group="com.google.code.gson" name="gson" version="2.9.0">
344+
<artifact name="gson-2.9.0.jar">
345+
<sha256 value="c96d60551331a196dac54b745aa642cd078ef89b6f267146b705f2c2cbef052d" origin="Generated by Gradle"/>
346+
</artifact>
347+
<artifact name="gson-2.9.0.pom">
348+
<sha256 value="7190d0b07f278e9f4c603f44e543940f81cf1a2559f851c6f298c9bb2be2978c" origin="Generated by Gradle"/>
349+
</artifact>
350+
</component>
343351
<component group="com.google.code.gson" name="gson-parent" version="2.11.0">
344352
<artifact name="gson-parent-2.11.0.pom">
345353
<sha256 value="8acb1f3b72a6f026916ac0735bad9aab0293d527edb7b365327def13a9367b7a" origin="Generated by Gradle"/>
@@ -350,6 +358,11 @@
350358
<sha256 value="b16e026e63427c1972ad0fc68703ec379b1576e411ba49c32fa9a31ab0bbcffb" origin="Generated by Gradle"/>
351359
</artifact>
352360
</component>
361+
<component group="com.google.code.gson" name="gson-parent" version="2.9.0">
362+
<artifact name="gson-parent-2.9.0.pom">
363+
<sha256 value="af781c9a5766ffea311a0df0536576a64decc661aa110c4de5c73ac8bf434424" origin="Generated by Gradle"/>
364+
</artifact>
365+
</component>
353366
<component group="com.google.errorprone" name="error_prone_annotations" version="2.1.3">
354367
<artifact name="error_prone_annotations-2.1.3.jar">
355368
<sha256 value="03d0329547c13da9e17c634d1049ea2ead093925e290567e1a364fd6b1fc7ff8" origin="Generated by Gradle"/>
@@ -394,6 +407,14 @@
394407
<sha256 value="859797e70a1bd9e422fed400d66a6602c8af8f3c667ee1c7b78f1763a25eb8e0" origin="Generated by Gradle"/>
395408
</artifact>
396409
</component>
410+
<component group="com.google.guava" name="failureaccess" version="1.0.1">
411+
<artifact name="failureaccess-1.0.1.jar">
412+
<sha256 value="a171ee4c734dd2da837e4b16be9df4661afab72a41adaf31eb84dfdaf936ca26" origin="Generated by Gradle"/>
413+
</artifact>
414+
<artifact name="failureaccess-1.0.1.pom">
415+
<sha256 value="e96042ce78fecba0da2be964522947c87b40a291b5fd3cd672a434924103c4b9" origin="Generated by Gradle"/>
416+
</artifact>
417+
</component>
397418
<component group="com.google.guava" name="failureaccess" version="1.0.2">
398419
<artifact name="failureaccess-1.0.2.jar">
399420
<sha256 value="8a8f81cf9b359e3f6dfa691a1e776985c061ef2f223c9b2c80753e1b458e8064" origin="Generated by Gradle"/>
@@ -512,6 +533,9 @@
512533
</artifact>
513534
</component>
514535
<component group="com.google.j2objc" name="j2objc-annotations" version="2.8">
536+
<artifact name="j2objc-annotations-2.8.jar">
537+
<sha256 value="f02a95fa1a5e95edb3ed859fd0fb7df709d121a35290eff8b74dce2ab7f4d6ed" origin="Generated by Gradle"/>
538+
</artifact>
515539
<artifact name="j2objc-annotations-2.8.pom">
516540
<sha256 value="37f87798b18385113c918bfa9e1276fe50735ef8fa849b5800c519d54dbf11f8" origin="Generated by Gradle"/>
517541
</artifact>
@@ -1209,6 +1233,22 @@
12091233
<sha256 value="76b7aac6413269d0bddb47b8b8e37bb3145789c9a9a42df80927aeb5aeeffb72" origin="Generated by Gradle"/>
12101234
</artifact>
12111235
</component>
1236+
<component group="javax.xml.stream" name="stax-api" version="1.0-2">
1237+
<artifact name="stax-api-1.0-2.jar">
1238+
<sha256 value="e8c70ebd76f982c9582a82ef82cf6ce14a7d58a4a4dca5cb7b7fc988c80089b7" origin="Generated by Gradle"/>
1239+
</artifact>
1240+
<artifact name="stax-api-1.0-2.pom">
1241+
<sha256 value="2864f19da84fd52763d75a197a71779b2decbccaac3eb4e4760ffc884c5af4a2" origin="Generated by Gradle"/>
1242+
</artifact>
1243+
</component>
1244+
<component group="jaxen" name="jaxen" version="1.1.6">
1245+
<artifact name="jaxen-1.1.6.jar">
1246+
<sha256 value="5ac9c74bbb3964b34a886ba6b1b6c0b0dc3ebeebc1dc4a44942a76634490b3eb" origin="Generated by Gradle"/>
1247+
</artifact>
1248+
<artifact name="jaxen-1.1.6.pom">
1249+
<sha256 value="d0cdf2b81b615d6923f19ffd8727a7225a4d6506966dfcd0237dacb74e04b3aa" origin="Generated by Gradle"/>
1250+
</artifact>
1251+
</component>
12121252
<component group="joda-time" name="joda-time" version="2.3">
12131253
<artifact name="joda-time-2.3.jar">
12141254
<sha256 value="602fd8006641f8b3afd589acbd9c9b356712bdcf0f9323557ec8648cd234983b" origin="Generated by Gradle"/>
@@ -1280,6 +1320,19 @@
12801320
<sha256 value="1af699f8d9ddab67f9a0d202fbd7915eb0362a5a6dfd5ffc54cafa3465c9cb0a" origin="Generated by Gradle"/>
12811321
</artifact>
12821322
</component>
1323+
<component group="net.java.dev.msv" name="msv" version="2013.6.1">
1324+
<artifact name="msv-2013.6.1.pom">
1325+
<sha256 value="c32ddee76b48f49a38c13e31c465f99876967eeeb17ca89014ed61404e414a97" origin="Generated by Gradle"/>
1326+
</artifact>
1327+
</component>
1328+
<component group="net.java.dev.msv" name="xsdlib" version="2013.6.1">
1329+
<artifact name="xsdlib-2013.6.1.jar">
1330+
<sha256 value="62472a211e4b99c9a053cd656e9662852165b1eb232acc42585b7187eaad4575" origin="Generated by Gradle"/>
1331+
</artifact>
1332+
<artifact name="xsdlib-2013.6.1.pom">
1333+
<sha256 value="d6e83c124436049d83238fc532a26c5d8ccd7e4ab10eba6d96043c850ac82f3c" origin="Generated by Gradle"/>
1334+
</artifact>
1335+
</component>
12831336
<component group="net.jcip" name="jcip-annotations" version="1.0">
12841337
<artifact name="jcip-annotations-1.0.jar">
12851338
<sha256 value="be5805392060c71474bf6c9a67a099471274d30b83eef84bfc4e0889a4f1dcc0" origin="Generated by Gradle"/>
@@ -1639,6 +1692,14 @@
16391692
<sha256 value="d8f1a06b149d746e9d98de54e2f7aa9b2eb613fb35ca67d8ae396ceaac661ee4" origin="Generated by Gradle"/>
16401693
</artifact>
16411694
</component>
1695+
<component group="org.bouncycastle" name="bcutil-jdk18on" version="1.79">
1696+
<artifact name="bcutil-jdk18on-1.79.jar">
1697+
<sha256 value="c70b88ada58938cbc2f005d40329054078bcfa1149e6ffc03e9242eb6ab21836" origin="Generated by Gradle"/>
1698+
</artifact>
1699+
<artifact name="bcutil-jdk18on-1.79.pom">
1700+
<sha256 value="e24c1fb4cf1605405a6988e9e4d6e4b2e1f4393fc73a89a9452ae625ee311d02" origin="Generated by Gradle"/>
1701+
</artifact>
1702+
</component>
16421703
<component group="org.checkerframework" name="checker-compat-qual" version="2.0.0">
16431704
<artifact name="checker-compat-qual-2.0.0.jar">
16441705
<sha256 value="a40b2ce6d8551e5b90b1bf637064303f32944d61b52ab2014e38699df573941b" origin="Generated by Gradle"/>
@@ -1652,6 +1713,14 @@
16521713
<sha256 value="dc4cd438a36462d013c2338c8e206d102a322a00f33729e8955ee219859c9ede" origin="Generated by Gradle"/>
16531714
</artifact>
16541715
</component>
1716+
<component group="org.checkerframework" name="checker-qual" version="3.33.0">
1717+
<artifact name="checker-qual-3.33.0.jar">
1718+
<sha256 value="e316255bbfcd9fe50d165314b85abb2b33cb2a66a93c491db648e498a82c2de1" origin="Generated by Gradle"/>
1719+
</artifact>
1720+
<artifact name="checker-qual-3.33.0.module">
1721+
<sha256 value="e8521d75625d41272c767d262a153ac163cc505b66644a2ef705fa8949ffb4e5" origin="Generated by Gradle"/>
1722+
</artifact>
1723+
</component>
16551724
<component group="org.checkerframework" name="checker-qual" version="3.43.0">
16561725
<artifact name="checker-qual-3.43.0.jar">
16571726
<sha256 value="3fbc2e98f05854c3df16df9abaa955b91b15b3ecac33623208ed6424640ef0f6" origin="Generated by Gradle"/>
@@ -2431,6 +2500,14 @@
24312500
<sha256 value="104075399c1a7f88c60dd61590553b249b8c415678b30613730445cf3aa238ed" origin="Generated by Gradle"/>
24322501
</artifact>
24332502
</component>
2503+
<component group="relaxngDatatype" name="relaxngDatatype" version="20020414">
2504+
<artifact name="relaxngDatatype-20020414.jar">
2505+
<sha256 value="2a2563efc911f431250214220570fac8ec3f43c3ec1e47328cee78062f81b218" origin="Generated by Gradle"/>
2506+
</artifact>
2507+
<artifact name="relaxngDatatype-20020414.pom">
2508+
<sha256 value="26b879913526e0883e891498baccb7a37443abee4edf62d2b0010caaefaba5c9" origin="Generated by Gradle"/>
2509+
</artifact>
2510+
</component>
24342511
<component group="software.amazon.awssdk" name="annotations" version="2.18.41">
24352512
<artifact name="annotations-2.18.41.jar">
24362513
<sha256 value="963758dc993b9088b7b5f79356a321ea80810125eaba7f2470dcc89abbbb8e4c" origin="Generated by Gradle"/>

p2p/build.gradle

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
apply plugin: 'com.google.protobuf'
2+
3+
def protobufVersion = '3.25.8'
4+
def grpcVersion = '1.75.0'
5+
6+
sourceSets {
7+
main {
8+
proto {
9+
srcDir 'src/main/protos'
10+
}
11+
java {
12+
srcDir 'src/main/java'
13+
}
14+
}
15+
}
16+
17+
dependencies {
18+
// protobuf & grpc (implementation scope: not leaked to consumers)
19+
implementation "com.google.protobuf:protobuf-java:${protobufVersion}"
20+
implementation "com.google.protobuf:protobuf-java-util:${protobufVersion}"
21+
implementation "io.grpc:grpc-netty:${grpcVersion}"
22+
implementation "io.grpc:grpc-core:${grpcVersion}"
23+
24+
// p2p-specific dependencies
25+
implementation 'org.xerial.snappy:snappy-java:1.1.10.5'
26+
implementation 'org.bouncycastle:bcpkix-jdk18on:1.79'
27+
implementation 'dnsjava:dnsjava:3.6.2'
28+
implementation 'commons-cli:commons-cli:1.5.0'
29+
implementation('software.amazon.awssdk:route53:2.18.41') {
30+
exclude group: 'io.netty', module: 'netty-codec-http2'
31+
exclude group: 'io.netty', module: 'netty-codec-http'
32+
exclude group: 'io.netty', module: 'netty-common'
33+
exclude group: 'io.netty', module: 'netty-buffer'
34+
exclude group: 'io.netty', module: 'netty-transport'
35+
exclude group: 'io.netty', module: 'netty-codec'
36+
exclude group: 'io.netty', module: 'netty-handler'
37+
exclude group: 'io.netty', module: 'netty-resolver'
38+
exclude group: 'io.netty', module: 'netty-transport-classes-epoll'
39+
exclude group: 'io.netty', module: 'netty-transport-native-unix-common'
40+
exclude group: 'software.amazon.awssdk', module: 'netty-nio-client'
41+
}
42+
implementation('com.aliyun:alidns20150109:3.0.1') {
43+
exclude group: 'org.bouncycastle', module: 'bcprov-jdk15on'
44+
exclude group: 'org.bouncycastle', module: 'bcpkix-jdk15on'
45+
exclude group: 'pull-parser', module: 'pull-parser'
46+
exclude group: 'xpp3', module: 'xpp3'
47+
}
48+
49+
// commons-lang3: libp2p uses BasicThreadFactory.builder() which requires 3.12+.
50+
// Root build.gradle provides 3.4 globally but as 'implementation' (not on compile classpath).
51+
// Declare 3.18.0 (matching original libp2p) to ensure API compatibility.
52+
implementation 'org.apache.commons:commons-lang3:3.18.0'
53+
54+
// provided by root build.gradle for all subprojects:
55+
// slf4j-api, logback, bcprov-jdk18on, lombok, junit, mockito
56+
}
57+
58+
protobuf {
59+
generatedFilesBaseDir = "$projectDir/src"
60+
protoc {
61+
artifact = "com.google.protobuf:protoc:${protobufVersion}"
62+
}
63+
plugins {
64+
grpc {
65+
artifact = "io.grpc:protoc-gen-grpc-java:${rootProject.archInfo.requires.ProtocGenVersion}"
66+
}
67+
}
68+
generateProtoTasks {
69+
all().each { task ->
70+
task.builtins {
71+
java { outputSubDir = "java" }
72+
}
73+
}
74+
all()*.plugins {
75+
grpc {
76+
outputSubDir = "java"
77+
}
78+
}
79+
}
80+
}
81+
82+
clean.doFirst {
83+
delete "src/main/java/org/tron/p2p/protos"
84+
}
85+
86+
processResources.dependsOn(generateProto)
87+
88+
jacocoTestReport {
89+
reports {
90+
xml.enabled = true
91+
html.enabled = true
92+
}
93+
}

p2p/lombok.config

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
config.stopBubbling = true
2+
lombok.log.fieldName=log
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package org.tron.p2p;
2+
3+
import java.net.InetAddress;
4+
import java.net.InetSocketAddress;
5+
import java.util.ArrayList;
6+
import java.util.List;
7+
import java.util.concurrent.CopyOnWriteArrayList;
8+
import lombok.Data;
9+
import org.tron.p2p.dns.update.PublishConfig;
10+
import org.tron.p2p.utils.NetUtil;
11+
12+
@Data
13+
public class P2pConfig {
14+
15+
private List<InetSocketAddress> seedNodes = new CopyOnWriteArrayList<>();
16+
private List<InetSocketAddress> activeNodes = new CopyOnWriteArrayList<>();
17+
private List<InetAddress> trustNodes = new CopyOnWriteArrayList<>();
18+
private byte[] nodeID = NetUtil.getNodeId();
19+
private String ip = NetUtil.getExternalIpV4();
20+
private String lanIp = NetUtil.getLanIP();
21+
private String ipv6 = NetUtil.getExternalIpV6();
22+
private int port = 18888;
23+
private int networkId = 1;
24+
private int minConnections = 8;
25+
private int maxConnections = 50;
26+
private int minActiveConnections = 2;
27+
private int maxConnectionsWithSameIp = 2;
28+
private boolean discoverEnable = true;
29+
private boolean disconnectionPolicyEnable = false;
30+
private boolean nodeDetectEnable = false;
31+
32+
//dns read config
33+
private List<String> treeUrls = new ArrayList<>();
34+
35+
//dns publish config
36+
private PublishConfig publishConfig = new PublishConfig();
37+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package org.tron.p2p;
2+
3+
import java.util.Set;
4+
import lombok.Getter;
5+
import org.tron.p2p.connection.Channel;
6+
7+
public abstract class P2pEventHandler {
8+
9+
@Getter
10+
protected Set<Byte> messageTypes;
11+
12+
public void onConnect(Channel channel) {
13+
}
14+
15+
public void onDisconnect(Channel channel) {
16+
}
17+
18+
public void onMessage(Channel channel, byte[] data) {
19+
}
20+
}
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
package org.tron.p2p;
2+
3+
import io.netty.channel.ChannelFuture;
4+
import io.netty.channel.ChannelFutureListener;
5+
import java.net.InetSocketAddress;
6+
import java.util.ArrayList;
7+
import java.util.HashSet;
8+
import java.util.List;
9+
import java.util.Set;
10+
import lombok.extern.slf4j.Slf4j;
11+
import org.tron.p2p.base.Parameter;
12+
import org.tron.p2p.connection.Channel;
13+
import org.tron.p2p.connection.ChannelManager;
14+
import org.tron.p2p.discover.Node;
15+
import org.tron.p2p.discover.NodeManager;
16+
import org.tron.p2p.dns.DnsManager;
17+
import org.tron.p2p.exception.P2pException;
18+
import org.tron.p2p.stats.P2pStats;
19+
import org.tron.p2p.stats.StatsManager;
20+
21+
@Slf4j(topic = "net")
22+
public class P2pService {
23+
24+
private StatsManager statsManager = new StatsManager();
25+
private volatile boolean isShutdown = false;
26+
27+
public void start(P2pConfig p2pConfig) {
28+
Parameter.p2pConfig = p2pConfig;
29+
NodeManager.init();
30+
ChannelManager.init();
31+
DnsManager.init();
32+
log.info("P2p service started");
33+
34+
Runtime.getRuntime().addShutdownHook(new Thread(this::close));
35+
}
36+
37+
public void close() {
38+
if (isShutdown) {
39+
return;
40+
}
41+
isShutdown = true;
42+
DnsManager.close();
43+
NodeManager.close();
44+
ChannelManager.close();
45+
log.info("P2p service closed");
46+
}
47+
48+
public void register(P2pEventHandler p2PEventHandler) throws P2pException {
49+
Parameter.addP2pEventHandle(p2PEventHandler);
50+
}
51+
52+
@Deprecated
53+
public void connect(InetSocketAddress address) {
54+
ChannelManager.connect(address);
55+
}
56+
57+
public ChannelFuture connect(Node node, ChannelFutureListener future) {
58+
return ChannelManager.connect(node, future);
59+
}
60+
61+
public P2pStats getP2pStats() {
62+
return statsManager.getP2pStats();
63+
}
64+
65+
public List<Node> getTableNodes() {
66+
return NodeManager.getTableNodes();
67+
}
68+
69+
public List<Node> getConnectableNodes() {
70+
Set<Node> nodes = new HashSet<>();
71+
nodes.addAll(NodeManager.getConnectableNodes());
72+
nodes.addAll(DnsManager.getDnsNodes());
73+
return new ArrayList<>(nodes);
74+
}
75+
76+
public List<Node> getAllNodes() {
77+
Set<Node> nodes = new HashSet<>();
78+
nodes.addAll(NodeManager.getAllNodes());
79+
nodes.addAll(DnsManager.getDnsNodes());
80+
return new ArrayList<>(nodes);
81+
}
82+
83+
public void updateNodeId(Channel channel, String nodeId) {
84+
ChannelManager.updateNodeId(channel, nodeId);
85+
}
86+
87+
public int getVersion() {
88+
return Parameter.version;
89+
}
90+
}

0 commit comments

Comments
 (0)