wormhole-explorer/tx-tracker/chains/api_evm.go

56 lines
1.2 KiB
Go

package chains
import (
"context"
"fmt"
"strings"
"time"
)
type ethGetTransactionByHashResponse struct {
BlockHash string `json:"blockHash"`
BlockNumber string `json:"blockNumber"`
From string `json:"from"`
To string `json:"to"`
}
type ethGetBlockByHashResponse struct {
Timestamp string `json:"timestamp"`
Number string `json:"number"`
}
func fetchEthTx(
ctx context.Context,
rateLimiter *time.Ticker,
baseUrl string,
txHash string,
) (*TxDetail, error) {
// initialize RPC client
client, err := rpcDialContext(ctx, baseUrl)
if err != nil {
return nil, fmt.Errorf("failed to initialize RPC client: %w", err)
}
defer client.Close()
nativeTxHash := txHashLowerCaseWith0x(txHash)
// query transaction data
var txReply ethGetTransactionByHashResponse
{
err = client.CallContext(ctx, rateLimiter, &txReply, "eth_getTransactionByHash", nativeTxHash)
if err != nil {
return nil, fmt.Errorf("failed to get tx by hash: %w", err)
}
if txReply.BlockHash == "" || txReply.From == "" {
return nil, ErrTransactionNotFound
}
}
// build results and return
txDetail := &TxDetail{
From: strings.ToLower(txReply.From),
NativeTxHash: nativeTxHash,
}
return txDetail, nil
}