@@ -282,6 +282,11 @@ type batch struct {
282282 // verifySchnorrSig is a function that verifies a schnorr signature.
283283 verifySchnorrSig VerifySchnorrSig
284284
285+ // publishErrorHandler is a function that handles transaction publishing
286+ // error. By default, it logs all errors as warnings, but "insufficient
287+ // fee" as Info.
288+ publishErrorHandler PublishErrorHandler
289+
285290 // purger is a function that can take a sweep which is being purged and
286291 // hand it over to the batcher for further processing.
287292 purger Purger
@@ -308,23 +313,24 @@ type Purger func(sweepReq *SweepRequest) error
308313// struct is only used as a wrapper for the arguments that are required to
309314// create a new batch.
310315type batchKit struct {
311- id int32
312- batchTxid * chainhash.Hash
313- batchPkScript []byte
314- state batchState
315- primaryID lntypes.Hash
316- sweeps map [lntypes.Hash ]sweep
317- rbfCache rbfCache
318- returnChan chan SweepRequest
319- wallet lndclient.WalletKitClient
320- chainNotifier lndclient.ChainNotifierClient
321- signerClient lndclient.SignerClient
322- musig2SignSweep MuSig2SignSweep
323- verifySchnorrSig VerifySchnorrSig
324- purger Purger
325- store BatcherStore
326- log btclog.Logger
327- quit chan struct {}
316+ id int32
317+ batchTxid * chainhash.Hash
318+ batchPkScript []byte
319+ state batchState
320+ primaryID lntypes.Hash
321+ sweeps map [lntypes.Hash ]sweep
322+ rbfCache rbfCache
323+ returnChan chan SweepRequest
324+ wallet lndclient.WalletKitClient
325+ chainNotifier lndclient.ChainNotifierClient
326+ signerClient lndclient.SignerClient
327+ musig2SignSweep MuSig2SignSweep
328+ verifySchnorrSig VerifySchnorrSig
329+ publishErrorHandler PublishErrorHandler
330+ purger Purger
331+ store BatcherStore
332+ log btclog.Logger
333+ quit chan struct {}
328334}
329335
330336// scheduleNextCall schedules the next call to the batch handler's main event
@@ -353,28 +359,29 @@ func NewBatch(cfg batchConfig, bk batchKit) *batch {
353359 return & batch {
354360 // We set the ID to a negative value to flag that this batch has
355361 // never been persisted, so it needs to be assigned a new ID.
356- id : - 1 ,
357- state : Open ,
358- sweeps : make (map [lntypes.Hash ]sweep ),
359- blockEpochChan : make (chan int32 ),
360- spendChan : make (chan * chainntnfs.SpendDetail ),
361- confChan : make (chan * chainntnfs.TxConfirmation , 1 ),
362- reorgChan : make (chan struct {}, 1 ),
363- errChan : make (chan error , 1 ),
364- callEnter : make (chan struct {}),
365- callLeave : make (chan struct {}),
366- stopping : make (chan struct {}),
367- finished : make (chan struct {}),
368- quit : bk .quit ,
369- batchTxid : bk .batchTxid ,
370- wallet : bk .wallet ,
371- chainNotifier : bk .chainNotifier ,
372- signerClient : bk .signerClient ,
373- muSig2SignSweep : bk .musig2SignSweep ,
374- verifySchnorrSig : bk .verifySchnorrSig ,
375- purger : bk .purger ,
376- store : bk .store ,
377- cfg : & cfg ,
362+ id : - 1 ,
363+ state : Open ,
364+ sweeps : make (map [lntypes.Hash ]sweep ),
365+ blockEpochChan : make (chan int32 ),
366+ spendChan : make (chan * chainntnfs.SpendDetail ),
367+ confChan : make (chan * chainntnfs.TxConfirmation , 1 ),
368+ reorgChan : make (chan struct {}, 1 ),
369+ errChan : make (chan error , 1 ),
370+ callEnter : make (chan struct {}),
371+ callLeave : make (chan struct {}),
372+ stopping : make (chan struct {}),
373+ finished : make (chan struct {}),
374+ quit : bk .quit ,
375+ batchTxid : bk .batchTxid ,
376+ wallet : bk .wallet ,
377+ chainNotifier : bk .chainNotifier ,
378+ signerClient : bk .signerClient ,
379+ muSig2SignSweep : bk .musig2SignSweep ,
380+ verifySchnorrSig : bk .verifySchnorrSig ,
381+ publishErrorHandler : bk .publishErrorHandler ,
382+ purger : bk .purger ,
383+ store : bk .store ,
384+ cfg : & cfg ,
378385 }
379386}
380387
@@ -396,32 +403,33 @@ func NewBatchFromDB(cfg batchConfig, bk batchKit) (*batch, error) {
396403 }
397404
398405 return & batch {
399- id : bk .id ,
400- state : bk .state ,
401- primarySweepID : bk .primaryID ,
402- sweeps : bk .sweeps ,
403- blockEpochChan : make (chan int32 ),
404- spendChan : make (chan * chainntnfs.SpendDetail ),
405- confChan : make (chan * chainntnfs.TxConfirmation , 1 ),
406- reorgChan : make (chan struct {}, 1 ),
407- errChan : make (chan error , 1 ),
408- callEnter : make (chan struct {}),
409- callLeave : make (chan struct {}),
410- stopping : make (chan struct {}),
411- finished : make (chan struct {}),
412- quit : bk .quit ,
413- batchTxid : bk .batchTxid ,
414- batchPkScript : bk .batchPkScript ,
415- rbfCache : bk .rbfCache ,
416- wallet : bk .wallet ,
417- chainNotifier : bk .chainNotifier ,
418- signerClient : bk .signerClient ,
419- muSig2SignSweep : bk .musig2SignSweep ,
420- verifySchnorrSig : bk .verifySchnorrSig ,
421- purger : bk .purger ,
422- store : bk .store ,
423- log : bk .log ,
424- cfg : & cfg ,
406+ id : bk .id ,
407+ state : bk .state ,
408+ primarySweepID : bk .primaryID ,
409+ sweeps : bk .sweeps ,
410+ blockEpochChan : make (chan int32 ),
411+ spendChan : make (chan * chainntnfs.SpendDetail ),
412+ confChan : make (chan * chainntnfs.TxConfirmation , 1 ),
413+ reorgChan : make (chan struct {}, 1 ),
414+ errChan : make (chan error , 1 ),
415+ callEnter : make (chan struct {}),
416+ callLeave : make (chan struct {}),
417+ stopping : make (chan struct {}),
418+ finished : make (chan struct {}),
419+ quit : bk .quit ,
420+ batchTxid : bk .batchTxid ,
421+ batchPkScript : bk .batchPkScript ,
422+ rbfCache : bk .rbfCache ,
423+ wallet : bk .wallet ,
424+ chainNotifier : bk .chainNotifier ,
425+ signerClient : bk .signerClient ,
426+ muSig2SignSweep : bk .musig2SignSweep ,
427+ verifySchnorrSig : bk .verifySchnorrSig ,
428+ publishErrorHandler : bk .publishErrorHandler ,
429+ purger : bk .purger ,
430+ store : bk .store ,
431+ log : bk .log ,
432+ cfg : & cfg ,
425433 }, nil
426434}
427435
@@ -795,23 +803,31 @@ func (b *batch) publish(ctx context.Context) error {
795803 return err
796804 }
797805
806+ // logPublishError is a function which logs publish errors.
807+ logPublishError := func (errMsg string , err error ) {
808+ b .publishErrorHandler (err , errMsg , b .log )
809+ }
810+
798811 if b .cfg .mixedBatch {
799812 fee , err , signSuccess = b .publishMixedBatch (ctx )
800813 if err != nil {
801- b . log . Warnf ( "Mixed batch publish error: %v " , err )
814+ logPublishError ( "mixed batch publish error" , err )
802815 }
803816 } else {
804817 fee , err , signSuccess = b .publishBatchCoop (ctx )
805818 if err != nil {
806- b . log . Warnf ("co-op publish error: %v " , err )
819+ logPublishError ("co-op publish error" , err )
807820 }
808821 }
809822
810823 if ! signSuccess {
811824 fee , err = b .publishBatch (ctx )
825+ if err != nil {
826+ logPublishError ("non-coop publish error" , err )
827+ }
812828 }
829+
813830 if err != nil {
814- b .log .Warnf ("publish error: %v" , err )
815831 return nil
816832 }
817833
0 commit comments