@@ -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,57 @@ 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+ r := * receipt
745+
746+ txFee := b .CalculateFee (FeeParts {
747+ GasUsed : r .GetFeeUsed (),
748+ EffectiveGasPrice : r .GetEffectiveGasPrice (),
749+ L1Fee : r .GetL1Fee (),
750+ })
751+
752+ return & evmtypes.TransactionFee {
753+ TransactionFee : txFee ,
754+ }, nil
755+ }
756+
757+ func (b * Txm [CID , HEAD , ADDR , THASH , BHASH , R , SEQ , FEE ]) GetTransactionReceipt (ctx context.Context , transactionID string ) (receipt * txmgrtypes.ChainReceipt [THASH , BHASH ], err error ) {
758+ foundReceipt , err := b .txStore .FindReceiptWithIdempotencyKey (ctx , transactionID , b .chainID )
759+ if err != nil {
760+ return nil , fmt .Errorf ("failed to find receipt with IdempotencyKey %q: %w" , transactionID , err )
761+ }
741762 // 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 )
763+ if foundReceipt == nil {
764+ return nil , fmt .Errorf ("failed to find receipt with IdempotencyKey %q " , transactionID )
744765 }
766+ return & foundReceipt , nil
767+ }
745768
769+ type FeeParts struct {
770+ GasUsed uint64
771+ EffectiveGasPrice * big.Int
772+ L1Fee * big.Int
773+ }
774+
775+ func (b * Txm [CID , HEAD , ADDR , THASH , BHASH , R , SEQ , FEE ]) CalculateFee (feeParts FeeParts ) * big.Int {
746776 totalFee := new (big.Int )
747777
748- gasUsed := new (big.Int ).SetUint64 (receipt . GetFeeUsed () )
749- price := receipt . GetEffectiveGasPrice ()
778+ gasUsed := new (big.Int ).SetUint64 (feeParts . GasUsed )
779+ price := feeParts . EffectiveGasPrice
750780 if price != nil {
751781 totalFee .Mul (gasUsed , price )
752782 }
753- l1Fee := receipt . GetL1Fee ()
783+ l1Fee := feeParts . L1Fee
754784 if l1Fee != nil {
755785 totalFee .Add (totalFee , l1Fee )
756786 }
757787
758- fee = & evmtypes.TransactionFee {
759- TransactionFee : totalFee ,
760- }
761-
762- return fee , nil
788+ return totalFee
763789}
764790
765791// Deprecated: use txmgrtest.ErrTxManager
@@ -847,6 +873,14 @@ func (n *NullTxManager[CID, HEAD, ADDR, THASH, BHASH, SEQ, FEE]) GetTransactionF
847873 return
848874}
849875
876+ func (n * NullTxManager [CID , HEAD , ADDR , THASH , BHASH , SEQ , FEE ]) CalculateFee (feeParts FeeParts ) * big.Int {
877+ return nil
878+ }
879+
880+ func (n * NullTxManager [CID , HEAD , ADDR , THASH , BHASH , SEQ , FEE ]) GetTransactionReceipt (ctx context.Context , transactionID string ) (receipt * txmgrtypes.ChainReceipt [THASH , BHASH ], err error ) {
881+ return
882+ }
883+
850884func (b * Txm [CID , HEAD , ADDR , THASH , BHASH , R , SEQ , FEE ]) pruneQueueAndCreateTxn (
851885 ctx context.Context ,
852886 txRequest txmgrtypes.TxRequest [ADDR , THASH ],
0 commit comments