Skip to content

Commit 25ef713

Browse files
committed
Merge branch 'spv-upgrade' into HEAD
2 parents 4847ff0 + c211288 commit 25ef713

File tree

5 files changed

+102
-4
lines changed

5 files changed

+102
-4
lines changed

go-p2p.iml

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<module type="WEB_MODULE" version="4">
3+
<component name="Go" enabled="true" />
4+
<component name="NewModuleRootManager" inherit-compiler-output="true">
5+
<exclude-output />
6+
<content url="file://$MODULE_DIR$" />
7+
<orderEntry type="inheritedJdk" />
8+
<orderEntry type="sourceFolder" forTests="false" />
9+
</component>
10+
</module>

interface.go

+3
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,7 @@ type PeerHandlerI interface {
4242
HandleTransaction(msg *wire.MsgTx, peer PeerI) error
4343
HandleBlockAnnouncement(msg *wire.InvVect, peer PeerI) error
4444
HandleBlock(msg wire.Message, peer PeerI) error
45+
HandleHeaders(msg *wire.MsgHeaders, peer PeerI) error
46+
HandleVersion(msg *wire.MsgVersion, peer PeerI) error
47+
HandleAddresses(msg *wire.MsgAddr, peer PeerI) error
4548
}

peer.go

+30-3
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ type Block struct {
5757

5858
type Peer struct {
5959
address string
60+
lastBlock int
6061
network wire.BitcoinNet
6162
mu sync.RWMutex
6263
readConn net.Conn
@@ -96,18 +97,20 @@ type Peer struct {
9697
}
9798

9899
// NewPeer returns a new bitcoin peer for the provided address and configuration.
99-
func NewPeer(logger *slog.Logger, address string, peerHandler PeerHandlerI, network wire.BitcoinNet, options ...PeerOptions) (*Peer, error) {
100+
func NewPeer(logger *slog.Logger, address string, lastBlock int, peerHandler PeerHandlerI, network wire.BitcoinNet, options ...PeerOptions) (*Peer, error) {
100101
writeChan := make(chan wire.Message, 10000)
101102

102103
peerLogger := logger.With(
103104
slog.Group("peer",
104105
slog.String("network", network.String()),
105106
slog.String("address", address),
107+
slog.Int("address", lastBlock),
106108
),
107109
)
108110

109111
p := &Peer{
110112
network: network,
113+
lastBlock: lastBlock,
111114
address: address,
112115
writeChan: writeChan,
113116
pingPongAlive: make(chan struct{}, 1),
@@ -447,6 +450,11 @@ func (p *Peer) startReadHandler(ctx context.Context) {
447450
continue
448451
}
449452

453+
versionMsg := msg.(*wire.MsgVersion)
454+
if err = p.peerHandler.HandleVersion(versionMsg, p); err != nil {
455+
commandLogger.Error("HandlerVersion returned an error.", slog.String(errKey, err.Error()))
456+
}
457+
450458
verackMsg := wire.NewMsgVerAck()
451459
if err = wire.WriteMessage(readConn, verackMsg, wire.ProtocolVersion, p.network); err != nil {
452460
commandLogger.Error("failed to write message", slog.String(errKey, err.Error()))
@@ -508,6 +516,26 @@ func (p *Peer) startReadHandler(ctx context.Context) {
508516
commandLogger.Error("Unable to process tx", slog.String(hashKey, txMsg.TxHash().String()), slog.String(errKey, err.Error()))
509517
}
510518

519+
case wire.CmdHeaders:
520+
msgHeaders, ok := msg.(*wire.MsgHeaders)
521+
if !ok {
522+
continue
523+
}
524+
525+
if err = p.peerHandler.HandleHeaders(msgHeaders, p); err != nil {
526+
commandLogger.Error("Unable to process headers", slog.String(errKey, err.Error()))
527+
}
528+
529+
case wire.CmdAddr:
530+
msgAddress, ok := msg.(*wire.MsgAddr )
531+
if !ok {
532+
continue
533+
}
534+
535+
if err = p.peerHandler.HandleAddresses(msgAddress, p); err != nil {
536+
commandLogger.Error("Unable to process headers", slog.String(errKey, err.Error()))
537+
}
538+
511539
case wire.CmdBlock:
512540
msgBlock, ok := msg.(*wire.MsgBlock)
513541
if ok {
@@ -763,7 +791,6 @@ func (p *Peer) startWriteChannelHandler(ctx context.Context, instance int) {
763791
}
764792

765793
func (p *Peer) versionMessage(address string) *wire.MsgVersion {
766-
lastBlock := int32(0)
767794

768795
tcpAddrMe := &net.TCPAddr{IP: nil, Port: 0}
769796
me := wire.NewNetAddress(tcpAddrMe, wire.SFNodeNetwork)
@@ -786,7 +813,7 @@ func (p *Peer) versionMessage(address string) *wire.MsgVersion {
786813
p.logger.Error("RandomUint64: failed to generate nonce", slog.String(errKey, err.Error()))
787814
}
788815

789-
msg := wire.NewMsgVersion(me, you, nonce, lastBlock)
816+
msg := wire.NewMsgVersion(me, you, nonce, int32(p.lastBlock))
790817

791818
if p.userAgentName != nil && p.userAgentVersion != nil {
792819
err = msg.AddUserAgent(*p.userAgentName, *p.userAgentVersion)

peer_handler_gen_mock.go

+58
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

wire/msgversion.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@ func NewMsgVersion(me *NetAddress, you *NetAddress, nonce uint64,
234234
Nonce: nonce,
235235
UserAgent: DefaultUserAgent,
236236
LastBlock: lastBlock,
237-
DisableRelayTx: false,
237+
DisableRelayTx: true,
238238
}
239239
}
240240

0 commit comments

Comments
 (0)