diff --git a/Bootstrap.go b/Bootstrap.go index 3ea90f0..8d62c3b 100644 --- a/Bootstrap.go +++ b/Bootstrap.go @@ -204,7 +204,7 @@ func contactArbitraryPeer(publicKey *btcec.PublicKey, addresses []*net.UDPAddr) } for _, address := range addresses { - sendAllNetworks(publicKey, &PacketRaw{Command: CommandAnnouncement, Payload: packets[0].raw, Sequence: msgArbitrarySequence(publicKey)}, address) + sendAllNetworks(publicKey, &PacketRaw{Command: CommandAnnouncement, Payload: packets[0].raw}, address) } } diff --git a/Connection.go b/Connection.go index f25defb..92a1e45 100644 --- a/Connection.go +++ b/Connection.go @@ -302,13 +302,10 @@ func (peer *PeerInfo) sendConnection(packet *PacketRaw, connection *Connection) return connection.Network.send(connection.Address.IP, connection.Address.Port, raw) } -// sendAllNetworks sends a raw packet via all networks +// sendAllNetworks sends a raw packet via all networks. It assigns a new sequence for each sent packet. func sendAllNetworks(receiverPublicKey *btcec.PublicKey, packet *PacketRaw, remote *net.UDPAddr) (err error) { + var raw []byte packet.Protocol = ProtocolVersion - raw, err := PacketEncrypt(peerPrivateKey, receiverPublicKey, packet) - if err != nil { - return err - } successCount := 0 @@ -322,6 +319,11 @@ func sendAllNetworks(receiverPublicKey *btcec.PublicKey, packet *PacketRaw, remo continue } + packet.Sequence = msgArbitrarySequence(receiverPublicKey) + if raw, err = PacketEncrypt(peerPrivateKey, receiverPublicKey, packet); err != nil { + return err + } + err = network.send(remote.IP, remote.Port, raw) if err == nil { successCount++ @@ -334,6 +336,11 @@ func sendAllNetworks(receiverPublicKey *btcec.PublicKey, packet *PacketRaw, remo continue } + packet.Sequence = msgArbitrarySequence(receiverPublicKey) + if raw, err = PacketEncrypt(peerPrivateKey, receiverPublicKey, packet); err != nil { + return err + } + err = network.send(remote.IP, remote.Port, raw) if err == nil { successCount++