TRON driver update
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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 == "" {
|
||||
|
||||
Reference in New Issue
Block a user