Added new tron networks
This commit is contained in:
@@ -34,8 +34,8 @@ messaging:
|
||||
reconnect_wait: 5
|
||||
|
||||
chains:
|
||||
- name: tron
|
||||
chain_id: 728126428
|
||||
- name: tron_mainnet
|
||||
chain_id: 728126428 # 0x2b6653dc
|
||||
native_token: TRX
|
||||
rpc_url_env: CHAIN_GATEWAY_RPC_URL
|
||||
tokens:
|
||||
@@ -45,7 +45,7 @@ chains:
|
||||
contract: "0x3487b63d30b5b2c87fb7ffa8bcfade38eaac1abe"
|
||||
|
||||
service_wallet:
|
||||
chain: tron
|
||||
chain: tron_mainnet
|
||||
address_env: CHAIN_GATEWAY_SERVICE_WALLET_ADDRESS
|
||||
private_key_env: CHAIN_GATEWAY_SERVICE_WALLET_KEY
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ package serverimp
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"os"
|
||||
"strings"
|
||||
"time"
|
||||
@@ -98,7 +99,11 @@ func (i *Imp) Start() error {
|
||||
}
|
||||
|
||||
cl := i.logger.Named("config")
|
||||
networkConfigs := resolveNetworkConfigs(cl.Named("network"), cfg.Chains)
|
||||
networkConfigs, err := resolveNetworkConfigs(cl.Named("network"), cfg.Chains)
|
||||
if err != nil {
|
||||
i.logger.Error("invalid chain network configuration", zap.Error(err))
|
||||
return err
|
||||
}
|
||||
walletConfig := resolveServiceWallet(cl.Named("wallet"), cfg.ServiceWallet)
|
||||
keyManager, err := resolveKeyManager(i.logger.Named("key_manager"), cfg.KeyManagement)
|
||||
if err != nil {
|
||||
@@ -157,7 +162,7 @@ func (i *Imp) loadConfig() (*config, error) {
|
||||
return cfg, nil
|
||||
}
|
||||
|
||||
func resolveNetworkConfigs(logger mlogger.Logger, chains []chainConfig) []gatewayshared.Network {
|
||||
func resolveNetworkConfigs(logger mlogger.Logger, chains []chainConfig) ([]gatewayshared.Network, error) {
|
||||
result := make([]gatewayshared.Network, 0, len(chains))
|
||||
for _, chain := range chains {
|
||||
if strings.TrimSpace(chain.Name) == "" {
|
||||
@@ -166,7 +171,8 @@ func resolveNetworkConfigs(logger mlogger.Logger, chains []chainConfig) []gatewa
|
||||
}
|
||||
rpcURL := strings.TrimSpace(os.Getenv(chain.RPCURLEnv))
|
||||
if rpcURL == "" {
|
||||
logger.Warn("chain RPC endpoint not configured", zap.String("chain", chain.Name), zap.String("env", chain.RPCURLEnv))
|
||||
logger.Error("RPC url not configured", zap.String("chain", chain.Name), zap.String("env", chain.RPCURLEnv))
|
||||
return nil, merrors.InvalidArgument(fmt.Sprintf("chain RPC endpoint not configured (chain=%s env=%s)", chain.Name, chain.RPCURLEnv))
|
||||
}
|
||||
contracts := make([]gatewayshared.TokenContract, 0, len(chain.Tokens))
|
||||
for _, token := range chain.Tokens {
|
||||
@@ -202,7 +208,7 @@ func resolveNetworkConfigs(logger mlogger.Logger, chains []chainConfig) []gatewa
|
||||
TokenConfigs: contracts,
|
||||
})
|
||||
}
|
||||
return result
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func resolveServiceWallet(logger mlogger.Logger, cfg serviceWalletConfig) gatewayshared.ServiceWallet {
|
||||
|
||||
@@ -22,8 +22,9 @@ type Deps struct {
|
||||
}
|
||||
|
||||
func (d Deps) WithLogger(name string) Deps {
|
||||
if d.Logger != nil {
|
||||
d.Logger = d.Logger.Named(name)
|
||||
if d.Logger == nil {
|
||||
panic("wallet deps: logger is required")
|
||||
}
|
||||
d.Logger = d.Logger.Named(name)
|
||||
return d
|
||||
}
|
||||
|
||||
@@ -34,34 +34,24 @@ func onChainWalletBalance(ctx context.Context, deps Deps, wallet *model.ManagedW
|
||||
}
|
||||
|
||||
if rpcURL == "" {
|
||||
if logger != nil {
|
||||
logger.Warn("network rpc url is not configured", logFields...)
|
||||
}
|
||||
logger.Warn("network rpc url is not configured", logFields...)
|
||||
return nil, merrors.Internal("network rpc url is not configured")
|
||||
}
|
||||
contract := strings.TrimSpace(wallet.ContractAddress)
|
||||
if contract == "" || !common.IsHexAddress(contract) {
|
||||
if logger != nil {
|
||||
logger.Warn("invalid contract address for balance fetch", logFields...)
|
||||
}
|
||||
logger.Warn("invalid contract address for balance fetch", logFields...)
|
||||
return nil, merrors.InvalidArgument("invalid contract address")
|
||||
}
|
||||
if wallet.DepositAddress == "" || !common.IsHexAddress(wallet.DepositAddress) {
|
||||
if logger != nil {
|
||||
logger.Warn("invalid wallet address for balance fetch", logFields...)
|
||||
}
|
||||
logger.Warn("invalid wallet address for balance fetch", logFields...)
|
||||
return nil, merrors.InvalidArgument("invalid wallet address")
|
||||
}
|
||||
|
||||
if logger != nil {
|
||||
logger.Info("fetching on-chain wallet balance", logFields...)
|
||||
}
|
||||
logger.Info("fetching on-chain wallet balance", logFields...)
|
||||
|
||||
client, err := ethclient.DialContext(ctx, rpcURL)
|
||||
if err != nil {
|
||||
if logger != nil {
|
||||
logger.Warn("failed to connect rpc", append(logFields, zap.Error(err))...)
|
||||
}
|
||||
logger.Warn("failed to connect rpc", append(logFields, zap.Error(err))...)
|
||||
return nil, merrors.Internal("failed to connect rpc: " + err.Error())
|
||||
}
|
||||
defer client.Close()
|
||||
@@ -71,46 +61,34 @@ func onChainWalletBalance(ctx context.Context, deps Deps, wallet *model.ManagedW
|
||||
|
||||
tokenABI, err := abi.JSON(strings.NewReader(erc20ABIJSON))
|
||||
if err != nil {
|
||||
if logger != nil {
|
||||
logger.Warn("failed to parse erc20 abi", append(logFields, zap.Error(err))...)
|
||||
}
|
||||
logger.Warn("failed to parse erc20 abi", append(logFields, zap.Error(err))...)
|
||||
return nil, merrors.Internal("failed to parse erc20 abi: " + err.Error())
|
||||
}
|
||||
tokenAddr := common.HexToAddress(contract)
|
||||
walletAddr := common.HexToAddress(wallet.DepositAddress)
|
||||
|
||||
if logger != nil {
|
||||
logger.Debug("calling token decimals", logFields...)
|
||||
}
|
||||
logger.Debug("calling token decimals", logFields...)
|
||||
decimals, err := readDecimals(timeoutCtx, client, tokenABI, tokenAddr)
|
||||
if err != nil {
|
||||
if logger != nil {
|
||||
logger.Warn("token decimals call failed", append(logFields, zap.Error(err))...)
|
||||
}
|
||||
logger.Warn("token decimals call failed", append(logFields, zap.Error(err))...)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if logger != nil {
|
||||
logger.Debug("calling token balanceOf", append(logFields, zap.Uint8("decimals", decimals))...)
|
||||
}
|
||||
logger.Debug("calling token balanceOf", append(logFields, zap.Uint8("decimals", decimals))...)
|
||||
bal, err := readBalanceOf(timeoutCtx, client, tokenABI, tokenAddr, walletAddr)
|
||||
if err != nil {
|
||||
if logger != nil {
|
||||
logger.Warn("token balanceOf call failed", append(logFields, zap.Uint8("decimals", decimals), zap.Error(err))...)
|
||||
}
|
||||
logger.Warn("token balanceOf call failed", append(logFields, zap.Uint8("decimals", decimals), zap.Error(err))...)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
dec := decimal.NewFromBigInt(bal, 0).Shift(-int32(decimals))
|
||||
if logger != nil {
|
||||
logger.Info("on-chain wallet balance fetched",
|
||||
append(logFields,
|
||||
zap.Uint8("decimals", decimals),
|
||||
zap.String("balance_raw", bal.String()),
|
||||
zap.String("balance", dec.String()),
|
||||
)...,
|
||||
)
|
||||
}
|
||||
logger.Info("on-chain wallet balance fetched",
|
||||
append(logFields,
|
||||
zap.Uint8("decimals", decimals),
|
||||
zap.String("balance_raw", bal.String()),
|
||||
zap.String("balance", dec.String()),
|
||||
)...,
|
||||
)
|
||||
return &moneyv1.Money{Currency: wallet.TokenSymbol, Amount: dec.String()}, nil
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user