38 lines
825 B
Go
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
|
|
}
|