Files
sendico/api/gateway/tron/internal/service/gateway/shared/tron_addr.go
2026-02-05 14:36:38 +01:00

38 lines
825 B
Go

package shared
import (
"encoding/hex"
"fmt"
"github.com/shengdoushi/base58"
"github.com/tech/sendico/pkg/merrors"
)
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
}