Skip to content

Commit d8a0505

Browse files
rootulpclaude
andauthored
refactor!: remove go-fraud dependency and related dead code (#4934)
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 8c1196e commit d8a0505

33 files changed

Lines changed: 16 additions & 2398 deletions

api/client/client_test.go

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,6 @@ import (
3333
daMock "github.com/celestiaorg/celestia-node/nodebuilder/da/mocks"
3434
"github.com/celestiaorg/celestia-node/nodebuilder/das"
3535
dasMock "github.com/celestiaorg/celestia-node/nodebuilder/das/mocks"
36-
"github.com/celestiaorg/celestia-node/nodebuilder/fraud"
37-
fraudMock "github.com/celestiaorg/celestia-node/nodebuilder/fraud/mocks"
3836
headerapi "github.com/celestiaorg/celestia-node/nodebuilder/header"
3937
headerMock "github.com/celestiaorg/celestia-node/nodebuilder/header/mocks"
4038
"github.com/celestiaorg/celestia-node/nodebuilder/node"
@@ -279,7 +277,6 @@ func TestSubmission_QueuedSubmission(t *testing.T) {
279277
type mockAPI struct {
280278
State *stateMock.MockModule
281279
Share *shareMock.MockModule
282-
Fraud *fraudMock.MockModule
283280
Header *headerMock.MockModule
284281
Das *dasMock.MockModule
285282
P2P *p2pMock.MockModule
@@ -296,7 +293,6 @@ func setupMockRPCServer(t *testing.T, ctx context.Context) (*nodebuilder.Node, *
296293
mockAPI := &mockAPI{
297294
stateMock.NewMockModule(ctrl),
298295
shareMock.NewMockModule(ctrl),
299-
fraudMock.NewMockModule(ctrl),
300296
headerMock.NewMockModule(ctrl),
301297
dasMock.NewMockModule(ctrl),
302298
p2pMock.NewMockModule(ctrl),
@@ -310,7 +306,6 @@ func setupMockRPCServer(t *testing.T, ctx context.Context) (*nodebuilder.Node, *
310306
// given the behavior of fx.Invoke, this invoke will be called last as it is added at the root
311307
// level module. For further information, check the documentation on fx.Invoke.
312308
invokeRPC := fx.Invoke(func(srv *rpc.Server) {
313-
srv.RegisterService("fraud", mockAPI.Fraud, &fraud.API{})
314309
srv.RegisterService("das", mockAPI.Das, &das.API{})
315310
srv.RegisterService("header", mockAPI.Header, &headerapi.API{})
316311
srv.RegisterService("state", mockAPI.State, &statemod.API{})

api/client/read_client.go

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import (
1010
"github.com/celestiaorg/celestia-node/libs/utils"
1111
blobapi "github.com/celestiaorg/celestia-node/nodebuilder/blob"
1212
blobstreamapi "github.com/celestiaorg/celestia-node/nodebuilder/blobstream"
13-
fraudapi "github.com/celestiaorg/celestia-node/nodebuilder/fraud"
1413
headerapi "github.com/celestiaorg/celestia-node/nodebuilder/header"
1514
shareapi "github.com/celestiaorg/celestia-node/nodebuilder/share"
1615
)
@@ -31,7 +30,6 @@ type ReadClient struct {
3130
Blob blobapi.Module
3231
Header headerapi.Module
3332
Share shareapi.Module
34-
Fraud fraudapi.Module
3533
Blobstream blobstreamapi.Module
3634

3735
closer func() error
@@ -87,13 +85,6 @@ func NewReadClient(ctx context.Context, cfg ReadConfig) (*ReadClient, error) {
8785
return nil, fmt.Errorf("failed to initialize header client: %w", err)
8886
}
8987

90-
fraudAPI := fraudapi.API{}
91-
fraudCloser, err := jsonrpc.NewClient(
92-
ctx, cfg.BridgeDAAddr, "fraud", &fraudAPI.Internal, cfg.HTTPHeader)
93-
if err != nil {
94-
return nil, fmt.Errorf("failed to initialize fraud client: %w", err)
95-
}
96-
9788
// Initialize blob read client
9889
blobAPI := blobapi.API{}
9990
blobCloser, err := jsonrpc.NewClient(
@@ -107,7 +98,6 @@ func NewReadClient(ctx context.Context, cfg ReadConfig) (*ReadClient, error) {
10798
shareCloser()
10899
blobstreamCloser()
109100
headerCloser()
110-
fraudCloser()
111101
blobCloser()
112102
return nil
113103
}

api/docgen/examples.go

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import (
2222
"golang.org/x/text/cases"
2323
"golang.org/x/text/language"
2424

25-
"github.com/celestiaorg/go-fraud"
2625
libhead "github.com/celestiaorg/go-header"
2726
libshare "github.com/celestiaorg/go-square/v4/share"
2827
"github.com/celestiaorg/rsmt2d"
@@ -32,7 +31,6 @@ import (
3231
"github.com/celestiaorg/celestia-node/header"
3332
"github.com/celestiaorg/celestia-node/nodebuilder/node"
3433
"github.com/celestiaorg/celestia-node/share"
35-
"github.com/celestiaorg/celestia-node/share/eds/byzantine"
3634
"github.com/celestiaorg/celestia-node/state"
3735
)
3836

@@ -78,18 +76,6 @@ func init() {
7876
add(time.Second)
7977
add(node.Bridge)
8078
add(auth.Permission("admin"))
81-
add(byzantine.BadEncoding)
82-
83-
// TODO: this case requires more debugging, simple to leave it as it was.
84-
exampleValues[reflect.TypeOf((*fraud.Proof[*header.ExtendedHeader])(nil)).Elem()] = byzantine.CreateBadEncodingProof(
85-
[]byte("bad encoding proof"),
86-
42,
87-
&byzantine.ErrByzantine{
88-
Index: 0,
89-
Shares: []*byzantine.ShareWithProof{},
90-
Axis: rsmt2d.Axis(0),
91-
},
92-
)
9379

9480
add(errors.New("error"))
9581
add(state.Balance{Amount: math.NewInt(42), Denom: "utia"})

api/rpc/client/client.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import (
1212
"github.com/celestiaorg/celestia-node/nodebuilder/blobstream"
1313
"github.com/celestiaorg/celestia-node/nodebuilder/da"
1414
"github.com/celestiaorg/celestia-node/nodebuilder/das"
15-
"github.com/celestiaorg/celestia-node/nodebuilder/fraud"
1615
"github.com/celestiaorg/celestia-node/nodebuilder/header"
1716
"github.com/celestiaorg/celestia-node/nodebuilder/node"
1817
"github.com/celestiaorg/celestia-node/nodebuilder/p2p"
@@ -27,7 +26,6 @@ var (
2726
)
2827

2928
type Client struct {
30-
Fraud fraud.API
3129
Header header.API
3230
State state.API
3331
Share share.API
@@ -93,7 +91,6 @@ func moduleMap(client *Client) map[string]any {
9391
"share": &client.Share.Internal,
9492
"state": &client.State.Internal,
9593
"header": &client.Header.Internal,
96-
"fraud": &client.Fraud.Internal,
9794
"das": &client.DAS.Internal,
9895
"p2p": &client.P2P.Internal,
9996
"node": &client.Node.Internal,

api/rpc_test.go

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,6 @@ import (
2828
daMock "github.com/celestiaorg/celestia-node/nodebuilder/da/mocks"
2929
"github.com/celestiaorg/celestia-node/nodebuilder/das"
3030
dasMock "github.com/celestiaorg/celestia-node/nodebuilder/das/mocks"
31-
"github.com/celestiaorg/celestia-node/nodebuilder/fraud"
32-
fraudMock "github.com/celestiaorg/celestia-node/nodebuilder/fraud/mocks"
3331
"github.com/celestiaorg/celestia-node/nodebuilder/header"
3432
headerMock "github.com/celestiaorg/celestia-node/nodebuilder/header/mocks"
3533
"github.com/celestiaorg/celestia-node/nodebuilder/node"
@@ -128,7 +126,6 @@ func TestRPCCallsTokenExpired(t *testing.T) {
128126
// api contains all modules that are made available as the node's
129127
// public API surface
130128
type api struct {
131-
Fraud fraud.Module
132129
Header header.Module
133130
State statemod.Module
134131
Share share.Module
@@ -344,7 +341,6 @@ func setupNodeWithAuthedRPC(t *testing.T,
344341
mockAPI := &mockAPI{
345342
stateMock.NewMockModule(ctrl),
346343
shareMock.NewMockModule(ctrl),
347-
fraudMock.NewMockModule(ctrl),
348344
headerMock.NewMockModule(ctrl),
349345
dasMock.NewMockModule(ctrl),
350346
p2pMock.NewMockModule(ctrl),
@@ -357,7 +353,6 @@ func setupNodeWithAuthedRPC(t *testing.T,
357353
// given the behavior of fx.Invoke, this invoke will be called last as it is added at the root
358354
// level module. For further information, check the documentation on fx.Invoke.
359355
invokeRPC := fx.Invoke(func(srv *rpc.Server) {
360-
srv.RegisterService("fraud", mockAPI.Fraud, &fraud.API{})
361356
srv.RegisterService("das", mockAPI.Das, &das.API{})
362357
srv.RegisterService("header", mockAPI.Header, &header.API{})
363358
srv.RegisterService("state", mockAPI.State, &statemod.API{})
@@ -384,7 +379,6 @@ func setupNodeWithAuthedRPC(t *testing.T,
384379
type mockAPI struct {
385380
State *stateMock.MockModule
386381
Share *shareMock.MockModule
387-
Fraud *fraudMock.MockModule
388382
Header *headerMock.MockModule
389383
Das *dasMock.MockModule
390384
P2P *p2pMock.MockModule

cmd/cel-shed/p2p.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ import (
1616
"go.uber.org/fx"
1717

1818
"github.com/celestiaorg/celestia-node/nodebuilder"
19-
"github.com/celestiaorg/celestia-node/nodebuilder/fraud"
2019
"github.com/celestiaorg/celestia-node/nodebuilder/node"
2120
"github.com/celestiaorg/celestia-node/nodebuilder/p2p"
2221
)
@@ -118,7 +117,6 @@ var p2pConnectBootstrappersCmd = &cobra.Command{
118117
app := fx.New(
119118
fx.NopLogger,
120119
modp2p,
121-
fx.Provide(fraud.Unmarshaler),
122120
fx.Provide(cmd.Context),
123121
fx.Provide(store.Keystore),
124122
fx.Provide(store.Datastore),

das/daser.go

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,10 @@ import (
99
"github.com/ipfs/go-datastore"
1010
logging "github.com/ipfs/go-log/v2"
1111

12-
"github.com/celestiaorg/go-fraud"
1312
libhead "github.com/celestiaorg/go-header"
1413

1514
"github.com/celestiaorg/celestia-node/header"
1615
"github.com/celestiaorg/celestia-node/share"
17-
"github.com/celestiaorg/celestia-node/share/eds/byzantine"
1816
"github.com/celestiaorg/celestia-node/share/shwap/p2p/shrex/shrexsub"
1917
)
2018

@@ -25,7 +23,6 @@ type DASer struct {
2523
params Parameters
2624

2725
da share.Availability
28-
bcast fraud.Broadcaster[*header.ExtendedHeader]
2926
hsub libhead.Subscriber[*header.ExtendedHeader] // listens for new headers in the network
3027
getter libhead.Store[*header.ExtendedHeader] // retrieves past headers
3128

@@ -48,14 +45,12 @@ func NewDASer(
4845
hsub libhead.Subscriber[*header.ExtendedHeader],
4946
getter libhead.Store[*header.ExtendedHeader],
5047
dstore datastore.Datastore,
51-
bcast fraud.Broadcaster[*header.ExtendedHeader],
5248
shrexBroadcast shrexsub.BroadcastFn,
5349
options ...Option,
5450
) (*DASer, error) {
5551
d := &DASer{
5652
params: DefaultParameters(),
5753
da: da,
58-
bcast: bcast,
5954
hsub: hsub,
6055
getter: getter,
6156
store: newCheckpointStore(dstore),
@@ -197,19 +192,7 @@ func (d *DASer) Stop(ctx context.Context) error {
197192
}
198193

199194
func (d *DASer) sample(ctx context.Context, h *header.ExtendedHeader) error {
200-
err := d.da.SharesAvailable(ctx, h)
201-
if err != nil {
202-
var byzantineErr *byzantine.ErrByzantine
203-
if errors.As(err, &byzantineErr) {
204-
log.Warn("Propagating proof...")
205-
sendErr := d.bcast.Broadcast(ctx, byzantine.CreateBadEncodingProof(h.Hash(), h.Height(), byzantineErr))
206-
if sendErr != nil {
207-
log.Errorw("fraud proof propagating failed", "err", sendErr)
208-
}
209-
}
210-
return err
211-
}
212-
return nil
195+
return d.da.SharesAvailable(ctx, h)
213196
}
214197

215198
// SamplingStats returns the current statistics over the DA sampling process.

das/daser_test.go

Lines changed: 7 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import (
1212
"github.com/stretchr/testify/assert"
1313
"github.com/stretchr/testify/require"
1414

15-
"github.com/celestiaorg/go-fraud/fraudtest"
1615
libhead "github.com/celestiaorg/go-header"
1716

1817
"github.com/celestiaorg/celestia-node/header"
@@ -31,12 +30,12 @@ func TestDASerLifecycle(t *testing.T) {
3130
avail := mocks.NewMockAvailability(ctrl)
3231
avail.EXPECT().SharesAvailable(gomock.Any(), gomock.Any()).AnyTimes().Return(nil)
3332
// 15 headers from the past and 15 future headers
34-
mockGet, sub, mockService := createDASerSubcomponents(t, 15, 15)
33+
mockGet, sub := createDASerSubcomponents(t, 15, 15)
3534

3635
ctx, cancel := context.WithTimeout(context.Background(), timeout)
3736
t.Cleanup(cancel)
3837

39-
daser, err := NewDASer(avail, sub, mockGet, ds, mockService, newBroadcastMock(1))
38+
daser, err := NewDASer(avail, sub, mockGet, ds, newBroadcastMock(1))
4039
require.NoError(t, err)
4140

4241
err = daser.Start(ctx)
@@ -62,12 +61,12 @@ func TestDASer_Restart(t *testing.T) {
6261
avail := mocks.NewMockAvailability(ctrl)
6362
avail.EXPECT().SharesAvailable(gomock.Any(), gomock.Any()).AnyTimes().Return(nil)
6463
// 15 headers from the past and 15 future headers
65-
mockGet, sub, mockService := createDASerSubcomponents(t, 15, 15)
64+
mockGet, sub := createDASerSubcomponents(t, 15, 15)
6665

6766
ctx, cancel := context.WithTimeout(context.Background(), timeout)
6867
t.Cleanup(cancel)
6968

70-
daser, err := NewDASer(avail, sub, mockGet, ds, mockService, newBroadcastMock(1))
69+
daser, err := NewDASer(avail, sub, mockGet, ds, newBroadcastMock(1))
7170
require.NoError(t, err)
7271

7372
err = daser.Start(ctx)
@@ -88,7 +87,7 @@ func TestDASer_Restart(t *testing.T) {
8887
restartCtx, restartCancel := context.WithTimeout(context.Background(), timeout)
8988
t.Cleanup(restartCancel)
9089

91-
daser, err = NewDASer(avail, sub, mockGet, ds, mockService, newBroadcastMock(1))
90+
daser, err = NewDASer(avail, sub, mockGet, ds, newBroadcastMock(1))
9291
require.NoError(t, err)
9392

9493
err = daser.Start(restartCtx)
@@ -105,77 +104,6 @@ func TestDASer_Restart(t *testing.T) {
105104
assert.EqualValues(t, 60, checkpoint.SampleFrom-1)
106105
}
107106

108-
// TODO(@walldiss): BEFP test will not work until BEFP-shwap integration
109-
// func TestDASer_stopsAfter_BEFP(t *testing.T) {
110-
// ctx, cancel := context.WithTimeout(context.Background(), time.Second*20)
111-
// t.Cleanup(cancel)
112-
//
113-
// ds := ds_sync.MutexWrap(datastore.NewMapDatastore())
114-
// // create mock network
115-
// net, err := mocknet.FullMeshLinked(1)
116-
// require.NoError(t, err)
117-
// // create pubsub for host
118-
// ps, err := pubsub.NewGossipSub(ctx, net.Hosts()[0],
119-
// pubsub.WithMessageSignaturePolicy(pubsub.StrictNoSign))
120-
// require.NoError(t, err)
121-
//
122-
// ctrl := gomock.NewController(t)
123-
// avail := mocks.NewMockAvailability(ctrl)
124-
// avail.EXPECT().SharesAvailable(gomock.Any(), gomock.Any()).AnyTimes().Return(nil)
125-
// // 15 headers from the past and 15 future headers
126-
// mockGet, sub, _ := createDASerSubcomponents(t, 15, 15)
127-
//
128-
// // create fraud service and break one header
129-
// getter := func(ctx context.Context, height uint64) (*header.ExtendedHeader, error) {
130-
// return mockGet.GetByHeight(ctx, height)
131-
// }
132-
// headGetter := func(ctx context.Context) (*header.ExtendedHeader, error) {
133-
// return mockGet.Head(ctx)
134-
// }
135-
// unmarshaler := fraud.MultiUnmarshaler[*header.ExtendedHeader]{
136-
// Unmarshalers: map[fraud.ProofType]func([]byte) (fraud.Proof[*header.ExtendedHeader], error){
137-
// byzantine.BadEncoding: func(data []byte) (fraud.Proof[*header.ExtendedHeader], error) {
138-
// befp := &byzantine.BadEncodingProof{}
139-
// return befp, befp.UnmarshalBinary(data)
140-
// },
141-
// },
142-
// }
143-
//
144-
// fserv := fraudserv.NewProofService[*header.ExtendedHeader](ps,
145-
// net.Hosts()[0],
146-
// getter,
147-
// headGetter,
148-
// unmarshaler,
149-
// ds,
150-
// false,
151-
// "private",
152-
// )
153-
// require.NoError(t, fserv.Start(ctx))
154-
// mockGet.headers[1] = headerfraud.CreateFraudExtHeader(t, mockGet.headers[1])
155-
// newCtx := context.Background()
156-
//
157-
// // create and start DASer
158-
// daser, err := NewDASer(avail, sub, mockGet, ds, fserv, newBroadcastMock(1))
159-
// require.NoError(t, err)
160-
//
161-
// resultCh := make(chan error)
162-
// go fraud.OnProof[*header.ExtendedHeader](newCtx, fserv, byzantine.BadEncoding,
163-
// func(fraud.Proof[*header.ExtendedHeader]) {
164-
// resultCh <- daser.Stop(newCtx)
165-
// })
166-
//
167-
// require.NoError(t, daser.Start(newCtx))
168-
// // wait for fraud proof will be handled
169-
// select {
170-
// case <-ctx.Done():
171-
// t.Fatal(ctx.Err())
172-
// case res := <-resultCh:
173-
// require.NoError(t, res)
174-
// }
175-
// // wait for manager to finish catchup
176-
// require.False(t, daser.running.Load())
177-
//}
178-
179107
func TestDASerSampleTimeout(t *testing.T) {
180108
ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
181109
t.Cleanup(cancel)
@@ -202,10 +130,9 @@ func TestDASerSampleTimeout(t *testing.T) {
202130

203131
ds := ds_sync.MutexWrap(datastore.NewMapDatastore())
204132
sub := new(headertest.Subscriber)
205-
fserv := &fraudtest.DummyService[*header.ExtendedHeader]{}
206133

207134
// create and start DASer
208-
daser, err := NewDASer(avail, sub, getter, ds, fserv, newBroadcastMock(1),
135+
daser, err := NewDASer(avail, sub, getter, ds, newBroadcastMock(1),
209136
WithSampleTimeout(1))
210137
require.NoError(t, err)
211138

@@ -230,11 +157,9 @@ func createDASerSubcomponents(
230157
) (
231158
libhead.Store[*header.ExtendedHeader],
232159
libhead.Subscriber[*header.ExtendedHeader],
233-
*fraudtest.DummyService[*header.ExtendedHeader],
234160
) {
235161
mockGet, sub := createMockGetterAndSub(t, numGetter, numSub)
236-
fraud := &fraudtest.DummyService[*header.ExtendedHeader]{}
237-
return mockGet, sub, fraud
162+
return mockGet, sub
238163
}
239164

240165
func createMockGetterAndSub(

0 commit comments

Comments
 (0)