@@ -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,54 @@ 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+
740+ txFee := b .CalculateFee (FeeParts {
741+ GasUsed : (* receipt ).GetFeeUsed (),
742+ EffectiveGasPrice : (* receipt ).GetEffectiveGasPrice (),
743+ L1Fee : (* receipt ).GetL1Fee (),
744+ })
745+
746+ fee = & evmtypes.TransactionFee {
747+ TransactionFee : txFee ,
748+ }
749+
750+ return fee , nil
751+ }
752+
753+ func (b * Txm [CID , HEAD , ADDR , THASH , BHASH , R , SEQ , FEE ]) GetTransactionReceipt (ctx context.Context , transactionID string ) (receipt * txmgrtypes.ChainReceipt [THASH , BHASH ], err error ) {
754+ foundReceipt , err := b .txStore .FindReceiptWithIdempotencyKey (ctx , transactionID , b .chainID )
737755 if err != nil {
738- return fee , fmt .Errorf ("failed to find receipt with IdempotencyKey %s: %w" , transactionID , err )
756+ return nil , fmt .Errorf ("failed to find receipt with IdempotencyKey %s: %w" , transactionID , err )
739757 }
740758
741759 // 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 )
760+ if foundReceipt == nil {
761+ return nil , fmt .Errorf ("failed to find receipt with IdempotencyKey %s" , transactionID )
744762 }
763+ return & foundReceipt , nil
764+ }
765+
766+ type FeeParts struct {
767+ GasUsed uint64
768+ EffectiveGasPrice * big.Int
769+ L1Fee * big.Int
770+ }
745771
772+ func (b * Txm [CID , HEAD , ADDR , THASH , BHASH , R , SEQ , FEE ]) CalculateFee (feeParts FeeParts ) * big.Int {
746773 totalFee := new (big.Int )
747774
748- gasUsed := new (big.Int ).SetUint64 (receipt . GetFeeUsed () )
749- price := receipt . GetEffectiveGasPrice ()
775+ gasUsed := new (big.Int ).SetUint64 (feeParts . GasUsed )
776+ price := feeParts . EffectiveGasPrice
750777 if price != nil {
751778 totalFee .Mul (gasUsed , price )
752779 }
753- l1Fee := receipt . GetL1Fee ()
780+ l1Fee := feeParts . L1Fee
754781 if l1Fee != nil {
755782 totalFee .Add (totalFee , l1Fee )
756783 }
757784
758- fee = & evmtypes.TransactionFee {
759- TransactionFee : totalFee ,
760- }
761-
762- return fee , nil
785+ return totalFee
763786}
764787
765788// Deprecated: use txmgrtest.ErrTxManager
@@ -847,6 +870,14 @@ func (n *NullTxManager[CID, HEAD, ADDR, THASH, BHASH, SEQ, FEE]) GetTransactionF
847870 return
848871}
849872
873+ func (n * NullTxManager [CID , HEAD , ADDR , THASH , BHASH , SEQ , FEE ]) CalculateFee (feeParts FeeParts ) * big.Int {
874+ return nil
875+ }
876+
877+ func (n * NullTxManager [CID , HEAD , ADDR , THASH , BHASH , SEQ , FEE ]) GetTransactionReceipt (ctx context.Context , transactionID string ) (receipt * txmgrtypes.ChainReceipt [THASH , BHASH ], err error ) {
878+ return
879+ }
880+
850881func (b * Txm [CID , HEAD , ADDR , THASH , BHASH , R , SEQ , FEE ]) pruneQueueAndCreateTxn (
851882 ctx context.Context ,
852883 txRequest txmgrtypes.TxRequest [ADDR , THASH ],
0 commit comments