diff --git a/keygen/ecdsa/keygen_test.go b/keygen/ecdsa/keygen_test.go index 3ddceed..e7dcdad 100644 --- a/keygen/ecdsa/keygen_test.go +++ b/keygen/ecdsa/keygen_test.go @@ -124,13 +124,13 @@ func (s *TssECDSAKeygenTestSuite) SetUpTest(c *C) { buf, err := base64.StdEncoding.DecodeString(testPriKeyArr[i]) c.Assert(err, IsNil) if i == 0 { - comm, err := p2p.NewCommunication(nil, ports[i], "", whitelistedPeers, zlog.Logger) + comm, err := p2p.NewCommunication(nil, ports[i], "", "", whitelistedPeers, zlog.Logger) c.Assert(err, IsNil) c.Assert(comm.Start(buf[:]), IsNil) s.comms[i] = comm continue } - comm, err := p2p.NewCommunication(bootstrapPeers, ports[i], "", whitelistedPeers, zlog.Logger) + comm, err := p2p.NewCommunication(bootstrapPeers, ports[i], "", "", whitelistedPeers, zlog.Logger) c.Assert(err, IsNil) c.Assert(comm.Start(buf[:]), IsNil) s.comms[i] = comm diff --git a/keygen/eddsa/keygen_test.go b/keygen/eddsa/keygen_test.go index 0205bc4..6ed29e0 100644 --- a/keygen/eddsa/keygen_test.go +++ b/keygen/eddsa/keygen_test.go @@ -110,13 +110,13 @@ func (s *EddsaKeygenTestSuite) SetUpTest(c *C) { buf, err := base64.StdEncoding.DecodeString(testPriKeyArr[i]) c.Assert(err, IsNil) if i == 0 { - comm, err := p2p.NewCommunication(nil, ports[i], "", whitelistedPeers, zlog.Logger) + comm, err := p2p.NewCommunication(nil, ports[i], "", "", whitelistedPeers, zlog.Logger) c.Assert(err, IsNil) c.Assert(comm.Start(buf), IsNil) s.comms[i] = comm continue } - comm, err := p2p.NewCommunication(bootstrapPeers, ports[i], "", whitelistedPeers, zlog.Logger) + comm, err := p2p.NewCommunication(bootstrapPeers, ports[i], "", "", whitelistedPeers, zlog.Logger) c.Assert(err, IsNil) c.Assert(comm.Start(buf), IsNil) s.comms[i] = comm diff --git a/keysign/ecdsa/keysign_old_test.go b/keysign/ecdsa/keysign_old_test.go index 73f1313..9596f09 100644 --- a/keysign/ecdsa/keysign_old_test.go +++ b/keysign/ecdsa/keysign_old_test.go @@ -143,13 +143,13 @@ func (s *TssECDSAKeysignOldTestSuite) SetUpTest(c *C) { buf, err := base64.StdEncoding.DecodeString(testPriKeyArr[i]) c.Assert(err, IsNil) if i == 0 { - comm, err := p2p.NewCommunication(nil, ports[i], "", whitelistedPeers, zlog.Logger) + comm, err := p2p.NewCommunication(nil, ports[i], "", "", whitelistedPeers, zlog.Logger) c.Assert(err, IsNil) c.Assert(comm.Start(buf), IsNil) s.comms[i] = comm continue } - comm, err := p2p.NewCommunication(bootstrapPeers, ports[i], "", whitelistedPeers, zlog.Logger) + comm, err := p2p.NewCommunication(bootstrapPeers, ports[i], "", "", whitelistedPeers, zlog.Logger) c.Assert(err, IsNil) c.Assert(comm.Start(buf), IsNil) s.comms[i] = comm diff --git a/keysign/ecdsa/keysign_test.go b/keysign/ecdsa/keysign_test.go index 7c5249a..177b765 100644 --- a/keysign/ecdsa/keysign_test.go +++ b/keysign/ecdsa/keysign_test.go @@ -150,13 +150,13 @@ func (s *TssECDSAKeysignTestSuite) SetUpTest(c *C) { buf, err := base64.StdEncoding.DecodeString(testPriKeyArr[i]) c.Assert(err, IsNil) if i == 0 { - comm, err := p2p.NewCommunication(nil, ports[i], "", whitelistedPeers, zlog.Logger) + comm, err := p2p.NewCommunication(nil, ports[i], "", "", whitelistedPeers, zlog.Logger) c.Assert(err, IsNil) c.Assert(comm.Start(buf), IsNil) s.comms[i] = comm continue } - comm, err := p2p.NewCommunication(bootstrapPeers, ports[i], "", whitelistedPeers, zlog.Logger) + comm, err := p2p.NewCommunication(bootstrapPeers, ports[i], "", "", whitelistedPeers, zlog.Logger) c.Assert(err, IsNil) c.Assert(comm.Start(buf), IsNil) s.comms[i] = comm diff --git a/keysign/eddsa/keysign_test.go b/keysign/eddsa/keysign_test.go index d04e995..07fb2b4 100644 --- a/keysign/eddsa/keysign_test.go +++ b/keysign/eddsa/keysign_test.go @@ -148,13 +148,13 @@ func (s *EddsaKeysignTestSuite) SetUpTest(c *C) { buf, err := base64.StdEncoding.DecodeString(testPriKeyArr[i]) c.Assert(err, IsNil) if i == 0 { - comm, err := p2p.NewCommunication(nil, ports[i], "", whitelistedPeers, zlog.Logger) + comm, err := p2p.NewCommunication(nil, ports[i], "", "", whitelistedPeers, zlog.Logger) c.Assert(err, IsNil) c.Assert(comm.Start(buf), IsNil) s.comms[i] = comm continue } - comm, err := p2p.NewCommunication(bootstrapPeers, ports[i], "", whitelistedPeers, zlog.Logger) + comm, err := p2p.NewCommunication(bootstrapPeers, ports[i], "", "", whitelistedPeers, zlog.Logger) c.Assert(err, IsNil) c.Assert(comm.Start(buf), IsNil) s.comms[i] = comm diff --git a/p2p/communication.go b/p2p/communication.go index 6a466a0..26cfbe8 100644 --- a/p2p/communication.go +++ b/p2p/communication.go @@ -54,6 +54,7 @@ func NewCommunication( bootstrapPeers []maddr.Multiaddr, port int, externalIP string, + externalDNS string, whitelistedPeers []peer.ID, logger zerolog.Logger, ) (*Communication, error) { @@ -74,6 +75,13 @@ func NewCommunication( if err != nil { return nil, errors.Wrapf(err, "external addr %q", myself) } + } else if len(externalDNS) != 0 { + // externalDNS is used as a fallback when externalIP is not set + myself := fmt.Sprintf("/dns4/%s/tcp/%d", externalDNS, port) + externalAddr, err = maddr.NewMultiaddr(myself) + if err != nil { + return nil, errors.Wrapf(err, "external addr %q", myself) + } } return &Communication{ diff --git a/p2p/communication_test.go b/p2p/communication_test.go index bc40095..6ac061f 100644 --- a/p2p/communication_test.go +++ b/p2p/communication_test.go @@ -19,7 +19,7 @@ type CommunicationTestSuite struct{} var _ = Suite(&CommunicationTestSuite{}) func (CommunicationTestSuite) TestBasicCommunication(c *C) { - comm, err := NewCommunication(nil, 6668, "", []peer.ID{}, logger("TestBasicCommunication")) + comm, err := NewCommunication(nil, 6668, "", "", []peer.ID{}, logger("TestBasicCommunication")) c.Assert(err, IsNil) c.Assert(comm, NotNil) comm.SetSubscribe(messages.TSSKeyGenMsg, "hello", make(chan *Message)) @@ -63,13 +63,13 @@ func (CommunicationTestSuite) TestEstablishP2pCommunication(c *C) { c.Assert(err, IsNil) privKey, err := base64.StdEncoding.DecodeString(bootstrapPrivKey) c.Assert(err, IsNil) - comm, err := NewCommunication(nil, 2220, fakeExternalIP, whitelistedPeers, log) + comm, err := NewCommunication(nil, 2220, fakeExternalIP, "", whitelistedPeers, log) c.Assert(err, IsNil) c.Assert(comm.Start(privKey), IsNil) defer comm.Stop() c.Assert(err, IsNil) - comm2, err := NewCommunication([]maddr.Multiaddr{validMultiAddr}, 2221, "", whitelistedPeers, log) + comm2, err := NewCommunication([]maddr.Multiaddr{validMultiAddr}, 2221, "", "", whitelistedPeers, log) c.Assert(err, IsNil) err = comm2.Start(sk1raw) c.Assert(err, IsNil) @@ -79,7 +79,7 @@ func (CommunicationTestSuite) TestEstablishP2pCommunication(c *C) { invalidAddr := "/ip4/127.0.0.1/tcp/2220/p2p/" + id2.String() invalidMultiAddr, err := maddr.NewMultiaddr(invalidAddr) c.Assert(err, IsNil) - comm3, err := NewCommunication([]maddr.Multiaddr{invalidMultiAddr}, 2222, "", whitelistedPeers, log) + comm3, err := NewCommunication([]maddr.Multiaddr{invalidMultiAddr}, 2222, "", "", whitelistedPeers, log) c.Assert(err, IsNil) err = comm3.Start(sk1raw) 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) { []maddr.Multiaddr{invalidMultiAddr, validMultiAddr}, 2223, "", + "", whitelistedPeers, log, ) @@ -110,6 +111,7 @@ func (CommunicationTestSuite) TestEstablishP2pCommunication(c *C) { []maddr.Multiaddr{invalidMultiAddr, validMultiAddr}, 2224, "", + "", []peer.ID{}, log, ) @@ -119,6 +121,44 @@ func (CommunicationTestSuite) TestEstablishP2pCommunication(c *C) { defer comm5.Stop() } +func (CommunicationTestSuite) TestEstablishP2pCommunication_ExternalDNS(c *C) { + log := logger("TestEstablishP2pCommunication_ExternalDNS") + + bootstrapPeerID, err := peer.Decode("16Uiu2HAm4TmEzUqy3q3Dv7HvdoSboHk5sFj2FH3npiN5vDbJC6gh") + c.Assert(err, IsNil) + sk1, _, err := crypto.GenerateSecp256k1Key(rand.Reader) + c.Assert(err, IsNil) + sk1raw, _ := sk1.Raw() + id1, err := peer.IDFromPrivateKey(sk1) + c.Assert(err, IsNil) + + bootstrapPeer := fmt.Sprintf("/ip4/127.0.0.1/tcp/2220/p2p/%s", bootstrapPeerID.String()) + whitelistedPeers := []peer.ID{bootstrapPeerID, id1} + bootstrapPrivKey := "6LABmWB4iXqkqOJ9H0YFEA2CSSx6bA7XAKGyI/TDtas=" + fakeExternalDNS := "p2ptest.com" + fakeExternalDNSMultiAddr := "/dns4/p2ptest.com/tcp/2220" + bootstrapMultiAddr, err := maddr.NewMultiaddr(bootstrapPeer) + c.Assert(err, IsNil) + privKey, err := base64.StdEncoding.DecodeString(bootstrapPrivKey) + c.Assert(err, IsNil) + + comm, err := NewCommunication(nil, 2220, "", fakeExternalDNS, whitelistedPeers, log) + c.Assert(err, IsNil) + c.Assert(comm.Start(privKey), IsNil) + defer comm.Stop() + + comm2, err := NewCommunication([]maddr.Multiaddr{bootstrapMultiAddr}, 2221, "", "", whitelistedPeers, log) + c.Assert(err, IsNil) + err = comm2.Start(sk1raw) + c.Assert(err, IsNil) + defer comm2.Stop() + + // check for external dns advertising + c.Assert(checkExist(comm.host.Addrs(), fakeExternalDNSMultiAddr), Equals, true) + ps := comm2.host.Peerstore() + c.Assert(checkExist(ps.Addrs(comm.host.ID()), fakeExternalDNSMultiAddr), Equals, true) +} + func logger(name string) zerolog.Logger { cw := zerolog.NewConsoleWriter() diff --git a/tss/tss.go b/tss/tss.go index e243a9e..74ec138 100644 --- a/tss/tss.go +++ b/tss/tss.go @@ -60,6 +60,7 @@ type PeerInfo struct { type NetworkConfig struct { common.TssConfig ExternalIP string + ExternalDNS string Port int BootstrapPeers []maddr.Multiaddr WhitelistedPeers []peer.ID @@ -105,6 +106,7 @@ func New( bootstrapPeers, net.Port, net.ExternalIP, + net.ExternalDNS, net.WhitelistedPeers, logger, ) diff --git a/tss/tss_4nodes_zeta_test.go b/tss/tss_4nodes_zeta_test.go index b2ebd24..1ecf049 100644 --- a/tss/tss_4nodes_zeta_test.go +++ b/tss/tss_4nodes_zeta_test.go @@ -252,6 +252,7 @@ func (s *FourNodeScaleZetaSuite) getTssServer(c *C, index int, conf common.TssCo networkConfig := NetworkConfig{ TssConfig: conf, ExternalIP: "", + ExternalDNS: "", Port: s.ports[index], BootstrapPeers: s.bootstrapPeers, WhitelistedPeers: whitelistedPeers,