From f52b135db4325cefefad70b9e3eda1fae2b0ec3e Mon Sep 17 00:00:00 2001 From: Stephan D Date: Tue, 3 Mar 2026 19:08:56 +0100 Subject: [PATCH] fixed ip4v enforcement --- .../tron/internal/server/internal/serverimp.go | 14 ++++++++++---- .../service/gateway/tronclient/registry.go | 2 +- api/gateway/tron/shared/helpers.go | 1 + 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/api/gateway/tron/internal/server/internal/serverimp.go b/api/gateway/tron/internal/server/internal/serverimp.go index a4de7253..6dc55905 100644 --- a/api/gateway/tron/internal/server/internal/serverimp.go +++ b/api/gateway/tron/internal/server/internal/serverimp.go @@ -53,14 +53,19 @@ type config struct { type chainConfig struct { Name string `yaml:"name"` RPCURLEnv string `yaml:"rpc_url_env"` - GRPCURLEnv string `yaml:"grpc_url_env"` // Native TRON gRPC endpoint - GRPCTokenEnv string `yaml:"grpc_token_env"` + GRPC chainGRPCConfig `yaml:"grpc"` ChainID uint64 `yaml:"chain_id"` NativeToken string `yaml:"native_token"` Tokens []tokenConfig `yaml:"tokens"` GasTopUpPolicy *gasTopUpPolicyConfig `yaml:"gas_topup_policy"` } +type chainGRPCConfig struct { + URLEnv string `yaml:"url_env"` // Native TRON gRPC endpoint env var + TokenEnv string `yaml:"token_env"` // Optional auth token env var for x-token header + ForceIPv4 bool `yaml:"force_ipv4"` // Force IPv4 sockets when dialing TRON gRPC. +} + type serviceWalletConfig struct { Chain string `yaml:"chain"` Address string `yaml:"address"` @@ -282,14 +287,14 @@ func resolveNetworkConfigs(logger mlogger.Logger, chains []chainConfig) ([]gatew // Resolve optional TRON gRPC URL grpcURL := "" - if grpcEnv := strings.TrimSpace(chain.GRPCURLEnv); grpcEnv != "" { + if grpcEnv := strings.TrimSpace(chain.GRPC.URLEnv); grpcEnv != "" { grpcURL = strings.TrimSpace(os.Getenv(grpcEnv)) if grpcURL != "" { logger.Info("TRON gRPC URL configured", zap.String("chain", network.String()), zap.String("env", grpcEnv)) } } grpcToken := "" - if grpcTokenEnv := strings.TrimSpace(chain.GRPCTokenEnv); grpcTokenEnv != "" { + if grpcTokenEnv := strings.TrimSpace(chain.GRPC.TokenEnv); grpcTokenEnv != "" { grpcToken = strings.TrimSpace(os.Getenv(grpcTokenEnv)) if grpcToken != "" { logger.Info("TRON gRPC token configured", zap.String("chain", network.String()), zap.String("env", grpcTokenEnv)) @@ -301,6 +306,7 @@ func resolveNetworkConfigs(logger mlogger.Logger, chains []chainConfig) ([]gatew RPCURL: rpcURL, GRPCUrl: grpcURL, GRPCToken: grpcToken, + GRPCForceIPv4: chain.GRPC.ForceIPv4, ChainID: chain.ChainID, NativeToken: chain.NativeToken, TokenConfigs: contracts, diff --git a/api/gateway/tron/internal/service/gateway/tronclient/registry.go b/api/gateway/tron/internal/service/gateway/tronclient/registry.go index 04da5a4b..7196a182 100644 --- a/api/gateway/tron/internal/service/gateway/tronclient/registry.go +++ b/api/gateway/tron/internal/service/gateway/tronclient/registry.go @@ -58,7 +58,7 @@ func Prepare(ctx context.Context, logger mlogger.Logger, networks []shared.Netwo zap.String("grpc_url", grpcURL), ) - client, err := NewClient(grpcURL, timeout, grpcToken) + client, err := NewClient(grpcURL, timeout, grpcToken, network.GRPCForceIPv4) if err != nil { registry.Close() registry.logger.Error("Failed to initialize TRON gRPC client", diff --git a/api/gateway/tron/shared/helpers.go b/api/gateway/tron/shared/helpers.go index e834e9d3..69888c53 100644 --- a/api/gateway/tron/shared/helpers.go +++ b/api/gateway/tron/shared/helpers.go @@ -170,6 +170,7 @@ type Network struct { RPCURL string GRPCUrl string // Native TRON gRPC endpoint (for transactions) GRPCToken string // Optional auth token for TRON gRPC (x-token header) + GRPCForceIPv4 bool ChainID uint64 NativeToken string TokenConfigs []TokenContract