Skip to content

Commit a0868ab

Browse files
authored
feat: add support for external DNS (#64)
* add support for external DNS * fix unit test compile
1 parent 892e710 commit a0868ab

File tree

9 files changed

+65
-14
lines changed

9 files changed

+65
-14
lines changed

keygen/ecdsa/keygen_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,13 +124,13 @@ func (s *TssECDSAKeygenTestSuite) SetUpTest(c *C) {
124124
buf, err := base64.StdEncoding.DecodeString(testPriKeyArr[i])
125125
c.Assert(err, IsNil)
126126
if i == 0 {
127-
comm, err := p2p.NewCommunication(nil, ports[i], "", whitelistedPeers, zlog.Logger)
127+
comm, err := p2p.NewCommunication(nil, ports[i], "", "", whitelistedPeers, zlog.Logger)
128128
c.Assert(err, IsNil)
129129
c.Assert(comm.Start(buf[:]), IsNil)
130130
s.comms[i] = comm
131131
continue
132132
}
133-
comm, err := p2p.NewCommunication(bootstrapPeers, ports[i], "", whitelistedPeers, zlog.Logger)
133+
comm, err := p2p.NewCommunication(bootstrapPeers, ports[i], "", "", whitelistedPeers, zlog.Logger)
134134
c.Assert(err, IsNil)
135135
c.Assert(comm.Start(buf[:]), IsNil)
136136
s.comms[i] = comm

keygen/eddsa/keygen_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,13 +110,13 @@ func (s *EddsaKeygenTestSuite) SetUpTest(c *C) {
110110
buf, err := base64.StdEncoding.DecodeString(testPriKeyArr[i])
111111
c.Assert(err, IsNil)
112112
if i == 0 {
113-
comm, err := p2p.NewCommunication(nil, ports[i], "", whitelistedPeers, zlog.Logger)
113+
comm, err := p2p.NewCommunication(nil, ports[i], "", "", whitelistedPeers, zlog.Logger)
114114
c.Assert(err, IsNil)
115115
c.Assert(comm.Start(buf), IsNil)
116116
s.comms[i] = comm
117117
continue
118118
}
119-
comm, err := p2p.NewCommunication(bootstrapPeers, ports[i], "", whitelistedPeers, zlog.Logger)
119+
comm, err := p2p.NewCommunication(bootstrapPeers, ports[i], "", "", whitelistedPeers, zlog.Logger)
120120
c.Assert(err, IsNil)
121121
c.Assert(comm.Start(buf), IsNil)
122122
s.comms[i] = comm

keysign/ecdsa/keysign_old_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,13 +143,13 @@ func (s *TssECDSAKeysignOldTestSuite) SetUpTest(c *C) {
143143
buf, err := base64.StdEncoding.DecodeString(testPriKeyArr[i])
144144
c.Assert(err, IsNil)
145145
if i == 0 {
146-
comm, err := p2p.NewCommunication(nil, ports[i], "", whitelistedPeers, zlog.Logger)
146+
comm, err := p2p.NewCommunication(nil, ports[i], "", "", whitelistedPeers, zlog.Logger)
147147
c.Assert(err, IsNil)
148148
c.Assert(comm.Start(buf), IsNil)
149149
s.comms[i] = comm
150150
continue
151151
}
152-
comm, err := p2p.NewCommunication(bootstrapPeers, ports[i], "", whitelistedPeers, zlog.Logger)
152+
comm, err := p2p.NewCommunication(bootstrapPeers, ports[i], "", "", whitelistedPeers, zlog.Logger)
153153
c.Assert(err, IsNil)
154154
c.Assert(comm.Start(buf), IsNil)
155155
s.comms[i] = comm

keysign/ecdsa/keysign_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,13 +150,13 @@ func (s *TssECDSAKeysignTestSuite) SetUpTest(c *C) {
150150
buf, err := base64.StdEncoding.DecodeString(testPriKeyArr[i])
151151
c.Assert(err, IsNil)
152152
if i == 0 {
153-
comm, err := p2p.NewCommunication(nil, ports[i], "", whitelistedPeers, zlog.Logger)
153+
comm, err := p2p.NewCommunication(nil, ports[i], "", "", whitelistedPeers, zlog.Logger)
154154
c.Assert(err, IsNil)
155155
c.Assert(comm.Start(buf), IsNil)
156156
s.comms[i] = comm
157157
continue
158158
}
159-
comm, err := p2p.NewCommunication(bootstrapPeers, ports[i], "", whitelistedPeers, zlog.Logger)
159+
comm, err := p2p.NewCommunication(bootstrapPeers, ports[i], "", "", whitelistedPeers, zlog.Logger)
160160
c.Assert(err, IsNil)
161161
c.Assert(comm.Start(buf), IsNil)
162162
s.comms[i] = comm

keysign/eddsa/keysign_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -148,13 +148,13 @@ func (s *EddsaKeysignTestSuite) SetUpTest(c *C) {
148148
buf, err := base64.StdEncoding.DecodeString(testPriKeyArr[i])
149149
c.Assert(err, IsNil)
150150
if i == 0 {
151-
comm, err := p2p.NewCommunication(nil, ports[i], "", whitelistedPeers, zlog.Logger)
151+
comm, err := p2p.NewCommunication(nil, ports[i], "", "", whitelistedPeers, zlog.Logger)
152152
c.Assert(err, IsNil)
153153
c.Assert(comm.Start(buf), IsNil)
154154
s.comms[i] = comm
155155
continue
156156
}
157-
comm, err := p2p.NewCommunication(bootstrapPeers, ports[i], "", whitelistedPeers, zlog.Logger)
157+
comm, err := p2p.NewCommunication(bootstrapPeers, ports[i], "", "", whitelistedPeers, zlog.Logger)
158158
c.Assert(err, IsNil)
159159
c.Assert(comm.Start(buf), IsNil)
160160
s.comms[i] = comm

p2p/communication.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ func NewCommunication(
5454
bootstrapPeers []maddr.Multiaddr,
5555
port int,
5656
externalIP string,
57+
externalDNS string,
5758
whitelistedPeers []peer.ID,
5859
logger zerolog.Logger,
5960
) (*Communication, error) {
@@ -74,6 +75,13 @@ func NewCommunication(
7475
if err != nil {
7576
return nil, errors.Wrapf(err, "external addr %q", myself)
7677
}
78+
} else if len(externalDNS) != 0 {
79+
// externalDNS is used as a fallback when externalIP is not set
80+
myself := fmt.Sprintf("/dns4/%s/tcp/%d", externalDNS, port)
81+
externalAddr, err = maddr.NewMultiaddr(myself)
82+
if err != nil {
83+
return nil, errors.Wrapf(err, "external addr %q", myself)
84+
}
7785
}
7886

7987
return &Communication{

p2p/communication_test.go

Lines changed: 44 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ type CommunicationTestSuite struct{}
1919
var _ = Suite(&CommunicationTestSuite{})
2020

2121
func (CommunicationTestSuite) TestBasicCommunication(c *C) {
22-
comm, err := NewCommunication(nil, 6668, "", []peer.ID{}, logger("TestBasicCommunication"))
22+
comm, err := NewCommunication(nil, 6668, "", "", []peer.ID{}, logger("TestBasicCommunication"))
2323
c.Assert(err, IsNil)
2424
c.Assert(comm, NotNil)
2525
comm.SetSubscribe(messages.TSSKeyGenMsg, "hello", make(chan *Message))
@@ -63,13 +63,13 @@ func (CommunicationTestSuite) TestEstablishP2pCommunication(c *C) {
6363
c.Assert(err, IsNil)
6464
privKey, err := base64.StdEncoding.DecodeString(bootstrapPrivKey)
6565
c.Assert(err, IsNil)
66-
comm, err := NewCommunication(nil, 2220, fakeExternalIP, whitelistedPeers, log)
66+
comm, err := NewCommunication(nil, 2220, fakeExternalIP, "", whitelistedPeers, log)
6767
c.Assert(err, IsNil)
6868
c.Assert(comm.Start(privKey), IsNil)
6969

7070
defer comm.Stop()
7171
c.Assert(err, IsNil)
72-
comm2, err := NewCommunication([]maddr.Multiaddr{validMultiAddr}, 2221, "", whitelistedPeers, log)
72+
comm2, err := NewCommunication([]maddr.Multiaddr{validMultiAddr}, 2221, "", "", whitelistedPeers, log)
7373
c.Assert(err, IsNil)
7474
err = comm2.Start(sk1raw)
7575
c.Assert(err, IsNil)
@@ -79,7 +79,7 @@ func (CommunicationTestSuite) TestEstablishP2pCommunication(c *C) {
7979
invalidAddr := "/ip4/127.0.0.1/tcp/2220/p2p/" + id2.String()
8080
invalidMultiAddr, err := maddr.NewMultiaddr(invalidAddr)
8181
c.Assert(err, IsNil)
82-
comm3, err := NewCommunication([]maddr.Multiaddr{invalidMultiAddr}, 2222, "", whitelistedPeers, log)
82+
comm3, err := NewCommunication([]maddr.Multiaddr{invalidMultiAddr}, 2222, "", "", whitelistedPeers, log)
8383
c.Assert(err, IsNil)
8484
err = comm3.Start(sk1raw)
8585
c.Assert(err, ErrorMatches, "fail to connect to bootstrap peer: fail to connect to any peer")
@@ -90,6 +90,7 @@ func (CommunicationTestSuite) TestEstablishP2pCommunication(c *C) {
9090
[]maddr.Multiaddr{invalidMultiAddr, validMultiAddr},
9191
2223,
9292
"",
93+
"",
9394
whitelistedPeers,
9495
log,
9596
)
@@ -110,6 +111,7 @@ func (CommunicationTestSuite) TestEstablishP2pCommunication(c *C) {
110111
[]maddr.Multiaddr{invalidMultiAddr, validMultiAddr},
111112
2224,
112113
"",
114+
"",
113115
[]peer.ID{},
114116
log,
115117
)
@@ -119,6 +121,44 @@ func (CommunicationTestSuite) TestEstablishP2pCommunication(c *C) {
119121
defer comm5.Stop()
120122
}
121123

124+
func (CommunicationTestSuite) TestEstablishP2pCommunication_ExternalDNS(c *C) {
125+
log := logger("TestEstablishP2pCommunication_ExternalDNS")
126+
127+
bootstrapPeerID, err := peer.Decode("16Uiu2HAm4TmEzUqy3q3Dv7HvdoSboHk5sFj2FH3npiN5vDbJC6gh")
128+
c.Assert(err, IsNil)
129+
sk1, _, err := crypto.GenerateSecp256k1Key(rand.Reader)
130+
c.Assert(err, IsNil)
131+
sk1raw, _ := sk1.Raw()
132+
id1, err := peer.IDFromPrivateKey(sk1)
133+
c.Assert(err, IsNil)
134+
135+
bootstrapPeer := fmt.Sprintf("/ip4/127.0.0.1/tcp/2220/p2p/%s", bootstrapPeerID.String())
136+
whitelistedPeers := []peer.ID{bootstrapPeerID, id1}
137+
bootstrapPrivKey := "6LABmWB4iXqkqOJ9H0YFEA2CSSx6bA7XAKGyI/TDtas="
138+
fakeExternalDNS := "p2ptest.com"
139+
fakeExternalDNSMultiAddr := "/dns4/p2ptest.com/tcp/2220"
140+
bootstrapMultiAddr, err := maddr.NewMultiaddr(bootstrapPeer)
141+
c.Assert(err, IsNil)
142+
privKey, err := base64.StdEncoding.DecodeString(bootstrapPrivKey)
143+
c.Assert(err, IsNil)
144+
145+
comm, err := NewCommunication(nil, 2220, "", fakeExternalDNS, whitelistedPeers, log)
146+
c.Assert(err, IsNil)
147+
c.Assert(comm.Start(privKey), IsNil)
148+
defer comm.Stop()
149+
150+
comm2, err := NewCommunication([]maddr.Multiaddr{bootstrapMultiAddr}, 2221, "", "", whitelistedPeers, log)
151+
c.Assert(err, IsNil)
152+
err = comm2.Start(sk1raw)
153+
c.Assert(err, IsNil)
154+
defer comm2.Stop()
155+
156+
// check for external dns advertising
157+
c.Assert(checkExist(comm.host.Addrs(), fakeExternalDNSMultiAddr), Equals, true)
158+
ps := comm2.host.Peerstore()
159+
c.Assert(checkExist(ps.Addrs(comm.host.ID()), fakeExternalDNSMultiAddr), Equals, true)
160+
}
161+
122162
func logger(name string) zerolog.Logger {
123163
cw := zerolog.NewConsoleWriter()
124164

tss/tss.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ type PeerInfo struct {
6060
type NetworkConfig struct {
6161
common.TssConfig
6262
ExternalIP string
63+
ExternalDNS string
6364
Port int
6465
BootstrapPeers []maddr.Multiaddr
6566
WhitelistedPeers []peer.ID
@@ -105,6 +106,7 @@ func New(
105106
bootstrapPeers,
106107
net.Port,
107108
net.ExternalIP,
109+
net.ExternalDNS,
108110
net.WhitelistedPeers,
109111
logger,
110112
)

tss/tss_4nodes_zeta_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,7 @@ func (s *FourNodeScaleZetaSuite) getTssServer(c *C, index int, conf common.TssCo
252252
networkConfig := NetworkConfig{
253253
TssConfig: conf,
254254
ExternalIP: "",
255+
ExternalDNS: "",
255256
Port: s.ports[index],
256257
BootstrapPeers: s.bootstrapPeers,
257258
WhitelistedPeers: whitelistedPeers,

0 commit comments

Comments
 (0)