@@ -2,10 +2,12 @@ package p2p
2
2
3
3
import (
4
4
"context"
5
+ "errors"
5
6
"fmt"
6
7
7
- "github.com/ipfs/boxo/bitswap"
8
+ "github.com/ipfs/boxo/bitswap/client "
8
9
"github.com/ipfs/boxo/bitswap/network"
10
+ "github.com/ipfs/boxo/bitswap/server"
9
11
"github.com/ipfs/boxo/blockstore"
10
12
"github.com/ipfs/boxo/exchange"
11
13
"github.com/ipfs/go-datastore"
@@ -28,17 +30,38 @@ const (
28
30
29
31
// dataExchange provides a constructor for IPFS block's DataExchange over BitSwap.
30
32
func dataExchange (params bitSwapParams ) exchange.Interface {
31
- prefix := protocol .ID (fmt .Sprintf ("/celestia/%s" , params .Net ))
32
- return bitswap .New (
33
+ prefix := protocolID (params .Net )
34
+ net := network .NewFromIpfsHost (params .Host , & routinghelpers.Null {}, network .Prefix (prefix ))
35
+ srvr := server .New (
33
36
params .Ctx ,
34
- network . NewFromIpfsHost ( params . Host , & routinghelpers. Null {}, network . Prefix ( prefix )) ,
37
+ net ,
35
38
params .Bs ,
36
- bitswap .ProvideEnabled (false ),
37
- // NOTE: These below ar required for our protocol to work reliably.
38
- // See https://github.com/celestiaorg/celestia-node/issues/732
39
- bitswap .SetSendDontHaves (false ),
40
- bitswap .SetSimulateDontHavesOnTimeout (false ),
39
+ server .ProvideEnabled (false ), // we don't provide blocks over DHT
40
+ // NOTE: These below are required for our protocol to work reliably.
41
+ // // See https://github.com/celestiaorg/celestia-node/issues/732
42
+ server .SetSendDontHaves (false ),
41
43
)
44
+
45
+ clnt := client .New (
46
+ params .Ctx ,
47
+ net ,
48
+ params .Bs ,
49
+ client .WithBlockReceivedNotifier (srvr ),
50
+ client .SetSimulateDontHavesOnTimeout (false ),
51
+ client .WithoutDuplicatedBlockStats (),
52
+ )
53
+ net .Start (srvr , clnt ) // starting with hook does not work
54
+
55
+ params .Lifecycle .Append (fx.Hook {
56
+ OnStop : func (ctx context.Context ) (err error ) {
57
+ err = errors .Join (err , clnt .Close ())
58
+ err = errors .Join (err , srvr .Close ())
59
+ net .Stop ()
60
+ return err
61
+ },
62
+ })
63
+
64
+ return clnt
42
65
}
43
66
44
67
func blockstoreFromDatastore (ctx context.Context , ds datastore.Batching ) (blockstore.Blockstore , error ) {
@@ -66,8 +89,13 @@ func blockstoreFromEDSStore(ctx context.Context, store *eds.Store) (blockstore.B
66
89
type bitSwapParams struct {
67
90
fx.In
68
91
69
- Ctx context.Context
70
- Net Network
71
- Host hst.Host
72
- Bs blockstore.Blockstore
92
+ Lifecycle fx.Lifecycle
93
+ Ctx context.Context
94
+ Net Network
95
+ Host hst.Host
96
+ Bs blockstore.Blockstore
97
+ }
98
+
99
+ func protocolID (network Network ) protocol.ID {
100
+ return protocol .ID (fmt .Sprintf ("/celestia/%s" , network ))
73
101
}
0 commit comments