TRON driver update

This commit is contained in:
Stephan D
2026-02-05 11:47:41 +01:00
parent 542d88750d
commit 3a4f1c7e3f
4 changed files with 36 additions and 5 deletions

View File

@@ -76,7 +76,7 @@ func (c *createManagedWalletCommand) Execute(ctx context.Context, req *chainv1.C
c.deps.Logger.Warn("Missing token symbol")
return gsresponse.InvalidArgument[chainv1.CreateManagedWalletResponse](c.deps.Logger, mservice.ChainGateway, merrors.InvalidArgument("asset.token_symbol is required"))
}
contractAddress := strings.ToLower(strings.TrimSpace(asset.GetContractAddress()))
contractAddress := strings.TrimSpace(asset.GetContractAddress())
if contractAddress == "" {
if !strings.EqualFold(tokenSymbol, networkCfg.NativeToken) {
contractAddress = shared.ResolveContractAddress(networkCfg.TokenConfigs, tokenSymbol)

View File

@@ -2,7 +2,9 @@ package evm
import (
"context"
"encoding/hex"
"errors"
"fmt"
"math/big"
"strings"
"time"
@@ -13,6 +15,7 @@ import (
"github.com/ethereum/go-ethereum/common/hexutil"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/rpc"
"github.com/shengdoushi/base58"
"github.com/shopspring/decimal"
"github.com/tech/sendico/gateway/tron/internal/service/gateway/driver"
"github.com/tech/sendico/gateway/tron/internal/service/gateway/shared"
@@ -59,6 +62,34 @@ const erc20ABIJSON = `
}
]`
func TronBase58ToHex(addr string) (string, error) {
const (
tronAddrLen = 25
tronPrefix = byte(0x41)
payloadLen = 21
checksumBytes = 4
)
raw, err := base58.Decode(addr, base58.BitcoinAlphabet)
if err != nil {
return "", merrors.InvalidArgument(fmt.Sprintf("tron address: base58 decode failed: %s", err.Error()))
}
if len(raw) != tronAddrLen {
return "", merrors.DataConflict("tron address: invalid length")
}
// 21 байт: prefix + 20 байт EVM адреса
payload := raw[:payloadLen]
if payload[0] != tronPrefix {
return "", merrors.DataConflict("tron address: invalid prefix")
}
evm := payload[1:payloadLen]
return "0x" + hex.EncodeToString(evm), nil
}
// NormalizeAddress validates and normalizes EVM hex addresses.
func NormalizeAddress(address string) (string, error) {
trimmed := strings.TrimSpace(address)
@@ -116,7 +147,7 @@ func Balance(ctx context.Context, deps driver.Deps, network shared.Network, wall
zap.String("wallet_ref", wallet.WalletRef),
zap.String("network", network.Name.String()),
zap.String("token_symbol", strings.ToUpper(strings.TrimSpace(wallet.TokenSymbol))),
zap.String("contract", strings.ToLower(strings.TrimSpace(wallet.ContractAddress))),
zap.String("contract", strings.TrimSpace(wallet.ContractAddress)),
zap.String("wallet_address", normalizedAddress),
}
if rpcURL == "" {