@@ -59,6 +59,8 @@ type TxManager[CID chains.ID, HEAD chains.Head[BHASH], ADDR chains.Hashable, THA
5959 CountTransactionsByState (ctx context.Context , state txmgrtypes.TxState ) (count uint32 , err error )
6060 GetTransactionStatus (ctx context.Context , transactionID string ) (state commontypes.TransactionStatus , err error )
6161 GetTransactionFee (ctx context.Context , transactionID string ) (fee * evmtypes.TransactionFee , err error )
62+ GetTransactionReceipt (ctx context.Context , transactionID string ) (receipt * txmgrtypes.ChainReceipt [THASH , BHASH ], err error )
63+ CalculateFee (feeParts FeeParts ) * big.Int
6264}
6365
6466type TxmV2Wrapper [CID chains.ID , HEAD chains.Head [BHASH ], ADDR chains.Hashable , THASH chains.Hashable , BHASH chains.Hashable , SEQ chains.Sequence , FEE fees.Fee ] interface {
@@ -733,33 +735,55 @@ func (b *Txm[CID, HEAD, ADDR, THASH, BHASH, R, SEQ, FEE]) GetTransactionStatus(c
733735}
734736
735737func (b * Txm [CID , HEAD , ADDR , THASH , BHASH , R , SEQ , FEE ]) GetTransactionFee (ctx context.Context , transactionID string ) (fee * evmtypes.TransactionFee , err error ) {
736- receipt , err := b .txStore .FindReceiptWithIdempotencyKey (ctx , transactionID , b .chainID )
738+ receipt , err := b .GetTransactionReceipt (ctx , transactionID )
739+
737740 if err != nil {
738- return fee , fmt . Errorf ( "failed to find receipt with IdempotencyKey %s: %w" , transactionID , err )
741+ return nil , err
739742 }
740743
744+ txFee := b .CalculateFee (FeeParts {
745+ GasUsed : receipt .GetFeeUsed (),
746+ EffectiveGasPrice : receipt .GetEffectiveGasPrice (),
747+ L1Fee : receipt .GetL1Fee (),
748+ })
749+
750+ return & evmtypes.TransactionFee {
751+ TransactionFee : txFee ,
752+ }, nil
753+ }
754+
755+ func (b * Txm [CID , HEAD , ADDR , THASH , BHASH , R , SEQ , FEE ]) GetTransactionReceipt (ctx context.Context , transactionID string ) (receipt txmgrtypes.ChainReceipt [THASH , BHASH ], err error ) {
756+ foundReceipt , err := b .txStore .FindReceiptWithIdempotencyKey (ctx , transactionID , b .chainID )
757+ if err != nil {
758+ return nil , fmt .Errorf ("failed to find receipt with IdempotencyKey %q: %w" , transactionID , err )
759+ }
741760 // This check is required since a no-rows error returns nil err
742- if receipt == nil {
743- return fee , fmt .Errorf ("failed to find receipt with IdempotencyKey %s " , transactionID )
761+ if foundReceipt == nil {
762+ return nil , fmt .Errorf ("failed to find receipt with IdempotencyKey %q " , transactionID )
744763 }
764+ return foundReceipt , nil
765+ }
766+
767+ type FeeParts struct {
768+ GasUsed uint64
769+ EffectiveGasPrice * big.Int
770+ L1Fee * big.Int
771+ }
745772
773+ func (b * Txm [CID , HEAD , ADDR , THASH , BHASH , R , SEQ , FEE ]) CalculateFee (feeParts FeeParts ) * big.Int {
746774 totalFee := new (big.Int )
747775
748- gasUsed := new (big.Int ).SetUint64 (receipt . GetFeeUsed () )
749- price := receipt . GetEffectiveGasPrice ()
776+ gasUsed := new (big.Int ).SetUint64 (feeParts . GasUsed )
777+ price := feeParts . EffectiveGasPrice
750778 if price != nil {
751779 totalFee .Mul (gasUsed , price )
752780 }
753- l1Fee := receipt . GetL1Fee ()
781+ l1Fee := feeParts . L1Fee
754782 if l1Fee != nil {
755783 totalFee .Add (totalFee , l1Fee )
756784 }
757785
758- fee = & evmtypes.TransactionFee {
759- TransactionFee : totalFee ,
760- }
761-
762- return fee , nil
786+ return totalFee
763787}
764788
765789// Deprecated: use txmgrtest.ErrTxManager
@@ -847,6 +871,14 @@ func (n *NullTxManager[CID, HEAD, ADDR, THASH, BHASH, SEQ, FEE]) GetTransactionF
847871 return
848872}
849873
874+ func (n * NullTxManager [CID , HEAD , ADDR , THASH , BHASH , SEQ , FEE ]) CalculateFee (feeParts FeeParts ) * big.Int {
875+ return nil
876+ }
877+
878+ func (n * NullTxManager [CID , HEAD , ADDR , THASH , BHASH , SEQ , FEE ]) GetTransactionReceipt (ctx context.Context , transactionID string ) (receipt * txmgrtypes.ChainReceipt [THASH , BHASH ], err error ) {
879+ return
880+ }
881+
850882func (b * Txm [CID , HEAD , ADDR , THASH , BHASH , R , SEQ , FEE ]) pruneQueueAndCreateTxn (
851883 ctx context.Context ,
852884 txRequest txmgrtypes.TxRequest [ADDR , THASH ],
0 commit comments