@@ -139,6 +139,13 @@ func (t *Transaction) From() common.Address {
139139 return common .HexToAddress (t .FromRaw )
140140}
141141
142+ func (t * Transaction ) ToAddress () common.Address {
143+ if t .To == "" {
144+ return common.Address {}
145+ }
146+ return common .HexToAddress (t .To )
147+ }
148+
142149func RPCTransactionByHash (client aggkittypes.EthClienter ,
143150 txHash common.Hash ) (* Transaction , error ) {
144151 // Use client.Call to fetch transaction details using eth_getTransactionByHash
@@ -150,33 +157,25 @@ func RPCTransactionByHash(client aggkittypes.EthClienter,
150157 return & tx , nil
151158}
152159
153- func extractTxnSender (
154- client aggkittypes.EthClienter ,
155- txHash common.Hash ) (common.Address , error ) {
156- tx , err := RPCTransactionByHash (client , txHash )
157- if err != nil {
158- return common.Address {}, fmt .Errorf ("failed to get transaction by hash for %s: %w" , txHash .Hex (), err )
159- }
160- return tx .From (), nil
161- }
162-
163- // ExtractTxnSenderAndFrom extracts the txn_sender and from address from the transaction trace.
164- // Return txnSender (same for all events in the same transaction) and fromAddr (specific for the event)
165- func ExtractTxnSenderAndFrom (ctx context.Context ,
160+ // ExtractTxnAddresses extracts the txn_sender, from address, and to address from the transaction trace.
161+ func ExtractTxnAddresses (ctx context.Context ,
166162 client aggkittypes.EthClienter ,
167163 bridgeAddr common.Address ,
168164 txHash common.Hash ,
169165 logEvent * agglayerbridge.AgglayerbridgeBridgeEvent ,
170- logger * logger.Logger ) (txnSender common.Address , fromAddr common.Address , err error ) {
166+ logger * logger.Logger ) (txnSender common.Address , fromAddr common.Address , toAddr common. Address , err error ) {
171167 // If event is a message, fromAddr is log.origin_address
172168 // so we only need the txn_sender that can be obtained from hash_receipt
169+ // and toAddr from the transaction receipt (same source as txn_sender)
173170 if logEvent .LeafType == bridgeLeafTypeMessage {
174- txnSender , err = extractTxnSender (client , txHash )
171+ tx , err := RPCTransactionByHash (client , txHash )
175172 if err != nil {
176- return common.Address {}, common.Address {},
177- fmt .Errorf ("extractTxnSenderAndFrom : failed to extract txn sender from tx_hash:%s: %w" , txHash .Hex (), err )
173+ return common.Address {}, common.Address {}, common. Address {},
174+ fmt .Errorf ("extractTxnAddresses : failed to extract txn sender from tx_hash:%s: %w" , txHash .Hex (), err )
178175 }
179- return txnSender , logEvent .OriginAddress , nil
176+ txnSender = tx .From ()
177+ toAddr = tx .ToAddress ()
178+ return txnSender , logEvent .OriginAddress , toAddr , nil
180179 }
181180 foundCalls , rootCall , err := extractCallData (client , bridgeAddr , txHash , logger , func (c Call ) (bool , error ) {
182181 if logEvent .LeafType == bridgeLeafTypeAsset {
@@ -185,18 +184,19 @@ func ExtractTxnSenderAndFrom(ctx context.Context,
185184 return false , nil
186185 })
187186 if err != nil {
188- return common.Address {}, common.Address {},
189- fmt .Errorf ("extractTxnSenderAndFrom :failed to extract bridge event data (tx hash: %s): %w" , txHash , err )
187+ return common.Address {}, common.Address {}, common. Address {},
188+ fmt .Errorf ("extractTxnAddresses :failed to extract bridge event data (tx hash: %s): %w" , txHash , err )
190189 }
191190 txnSender = rootCall .From
191+ toAddr = rootCall .To
192192 fromAddr , err = ExtractFromAddrFromCalls (foundCalls , logEvent )
193193 if err != nil {
194- return common.Address {}, common.Address {},
195- fmt .Errorf ("extractTxnSenderAndFrom : failed to extract fromAddr from tx_hash:%s calls: %w" ,
194+ return common.Address {}, common.Address {}, common. Address {},
195+ fmt .Errorf ("extractTxnAddresses : failed to extract fromAddr from tx_hash:%s calls: %w" ,
196196 txHash .Hex (), err )
197197 }
198198
199- return txnSender , fromAddr , nil
199+ return txnSender , fromAddr , toAddr , nil
200200}
201201
202202type bridgeCallParams struct {
@@ -355,7 +355,7 @@ func buildBridgeEventHandler(
355355 "DestinationNetwork: %d, DestinationAddress: %s, DepositCount: %d, Amount: %s, " ,
356356 bridgeEvent .LeafType , bridgeEvent .OriginNetwork , bridgeEvent .OriginAddress .Hex (), bridgeEvent .DestinationNetwork ,
357357 bridgeEvent .DestinationAddress .Hex (), bridgeEvent .DepositCount , bridgeEvent .Amount .String ())
358- txnSender , fromAddress , err := ExtractTxnSenderAndFrom (ctx , client , bridgeAddr , l .TxHash ,
358+ txnSender , fromAddress , toAddress , err := ExtractTxnAddresses (ctx , client , bridgeAddr , l .TxHash ,
359359 bridgeEvent , logger )
360360 if err != nil {
361361 return fmt .Errorf ("failed to extract bridge event data (tx hash: %s): %w" , l .TxHash , err )
@@ -376,6 +376,7 @@ func buildBridgeEventHandler(
376376 Metadata : bridgeEvent .Metadata ,
377377 DepositCount : bridgeEvent .DepositCount ,
378378 TxnSender : txnSender ,
379+ ToAddress : toAddress ,
379380 }})
380381 return nil
381382 }
0 commit comments