@@ -144,6 +144,13 @@ func (t *Transaction) From() common.Address {
144144 return common .HexToAddress (t .FromRaw )
145145}
146146
147+ func (t * Transaction ) ToAddress () common.Address {
148+ if t .To == "" {
149+ return common.Address {}
150+ }
151+ return common .HexToAddress (t .To )
152+ }
153+
147154func RPCTransactionByHash (client aggkittypes.EthClienter ,
148155 txHash common.Hash ) (* Transaction , error ) {
149156 // Use client.Call to fetch transaction details using eth_getTransactionByHash
@@ -155,33 +162,25 @@ func RPCTransactionByHash(client aggkittypes.EthClienter,
155162 return & tx , nil
156163}
157164
158- func extractTxnSender (
159- client aggkittypes.EthClienter ,
160- txHash common.Hash ) (common.Address , error ) {
161- tx , err := RPCTransactionByHash (client , txHash )
162- if err != nil {
163- return common.Address {}, fmt .Errorf ("failed to get transaction by hash for %s: %w" , txHash .Hex (), err )
164- }
165- return tx .From (), nil
166- }
167-
168- // ExtractTxnSenderAndFrom extracts the txn_sender and from address from the transaction trace.
169- // Return txnSender (same for all events in the same transaction) and fromAddr (specific for the event)
170- func ExtractTxnSenderAndFrom (ctx context.Context ,
165+ // ExtractTxnAddresses extracts the txn_sender, from address, and to address from the transaction trace.
166+ func ExtractTxnAddresses (ctx context.Context ,
171167 client aggkittypes.EthClienter ,
172168 bridgeAddr common.Address ,
173169 txHash common.Hash ,
174170 logEvent * agglayerbridge.AgglayerbridgeBridgeEvent ,
175- logger * logger.Logger ) (txnSender common.Address , fromAddr common.Address , err error ) {
171+ logger * logger.Logger ) (txnSender common.Address , fromAddr common.Address , toAddr common. Address , err error ) {
176172 // If event is a message, fromAddr is log.origin_address
177173 // so we only need the txn_sender that can be obtained from hash_receipt
174+ // and toAddr from the transaction receipt (same source as txn_sender)
178175 if logEvent .LeafType == bridgeLeafTypeMessage {
179- txnSender , err = extractTxnSender (client , txHash )
176+ tx , err := RPCTransactionByHash (client , txHash )
180177 if err != nil {
181- return common.Address {}, common.Address {},
182- fmt .Errorf ("extractTxnSenderAndFrom : failed to extract txn sender from tx_hash:%s: %w" , txHash .Hex (), err )
178+ return common.Address {}, common.Address {}, common. Address {},
179+ fmt .Errorf ("extractTxnAddresses : failed to extract txn sender from tx_hash:%s: %w" , txHash .Hex (), err )
183180 }
184- return txnSender , logEvent .OriginAddress , nil
181+ txnSender = tx .From ()
182+ toAddr = tx .ToAddress ()
183+ return txnSender , logEvent .OriginAddress , toAddr , nil
185184 }
186185 foundCalls , rootCall , err := extractCallData (client , bridgeAddr , txHash , logger , func (c Call ) (bool , error ) {
187186 if logEvent .LeafType == bridgeLeafTypeAsset {
@@ -190,18 +189,19 @@ func ExtractTxnSenderAndFrom(ctx context.Context,
190189 return false , nil
191190 })
192191 if err != nil {
193- return common.Address {}, common.Address {},
194- fmt .Errorf ("extractTxnSenderAndFrom :failed to extract bridge event data (tx hash: %s): %w" , txHash , err )
192+ return common.Address {}, common.Address {}, common. Address {},
193+ fmt .Errorf ("extractTxnAddresses :failed to extract bridge event data (tx hash: %s): %w" , txHash , err )
195194 }
196195 txnSender = rootCall .From
196+ toAddr = rootCall .To
197197 fromAddr , err = ExtractFromAddrFromCalls (foundCalls , logEvent )
198198 if err != nil {
199- return common.Address {}, common.Address {},
200- fmt .Errorf ("extractTxnSenderAndFrom : failed to extract fromAddr from tx_hash:%s calls: %w" ,
199+ return common.Address {}, common.Address {}, common. Address {},
200+ fmt .Errorf ("extractTxnAddresses : failed to extract fromAddr from tx_hash:%s calls: %w" ,
201201 txHash .Hex (), err )
202202 }
203203
204- return txnSender , fromAddr , nil
204+ return txnSender , fromAddr , toAddr , nil
205205}
206206
207207type bridgeCallParams struct {
@@ -360,7 +360,7 @@ func buildBridgeEventHandler(
360360 "DestinationNetwork: %d, DestinationAddress: %s, DepositCount: %d, Amount: %s, " ,
361361 bridgeEvent .LeafType , bridgeEvent .OriginNetwork , bridgeEvent .OriginAddress .Hex (), bridgeEvent .DestinationNetwork ,
362362 bridgeEvent .DestinationAddress .Hex (), bridgeEvent .DepositCount , bridgeEvent .Amount .String ())
363- txnSender , fromAddress , err := ExtractTxnSenderAndFrom (ctx , client , bridgeAddr , l .TxHash ,
363+ txnSender , fromAddress , toAddress , err := ExtractTxnAddresses (ctx , client , bridgeAddr , l .TxHash ,
364364 bridgeEvent , logger )
365365 if err != nil {
366366 return fmt .Errorf ("failed to extract bridge event data (tx hash: %s): %w" , l .TxHash , err )
@@ -381,6 +381,7 @@ func buildBridgeEventHandler(
381381 Metadata : bridgeEvent .Metadata ,
382382 DepositCount : bridgeEvent .DepositCount ,
383383 TxnSender : txnSender ,
384+ ToAddress : toAddress ,
384385 }})
385386 return nil
386387 }
0 commit comments