mirror of
https://github.com/GMWalletApp/epusdt.git
synced 2026-07-07 02:06:16 +00:00
adjust
This commit is contained in:
@@ -33,6 +33,10 @@ func resolveTronNode() (string, string, error) {
|
|||||||
return rpcURL, node.ApiKey, nil
|
return rpcURL, node.ApiKey, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ResolveTronNode() (string, string, error) {
|
||||||
|
return resolveTronNode()
|
||||||
|
}
|
||||||
|
|
||||||
func TryProcessTronTRC20Transfer(toAddr string, rawValue *big.Int, txHash string, blockTsMs int64) {
|
func TryProcessTronTRC20Transfer(toAddr string, rawValue *big.Int, txHash string, blockTsMs int64) {
|
||||||
defer func() {
|
defer func() {
|
||||||
if err := recover(); err != nil {
|
if err := recover(); err != nil {
|
||||||
|
|||||||
@@ -17,8 +17,6 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
TronAPIBase = "https://api.trongrid.io"
|
|
||||||
|
|
||||||
// USDT 合约地址 (TRC20 主网)
|
// USDT 合约地址 (TRC20 主网)
|
||||||
USDTContractHex = "41a614f803b6fd780986a42c78ec9c7f77e6ded13c" // Base58: TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t
|
USDTContractHex = "41a614f803b6fd780986a42c78ec9c7f77e6ded13c" // Base58: TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t
|
||||||
// transfer(address,uint256) 方法签名前4字节
|
// transfer(address,uint256) 方法签名前4字节
|
||||||
@@ -115,7 +113,7 @@ type TransferContractValue struct {
|
|||||||
|
|
||||||
var httpClient = &http.Client{Timeout: RequestTimeout}
|
var httpClient = &http.Client{Timeout: RequestTimeout}
|
||||||
|
|
||||||
func doPost(url string, body interface{}) ([]byte, error) {
|
func doPost(url string, apiKey string, body interface{}) ([]byte, error) {
|
||||||
data, _ := json.Marshal(body)
|
data, _ := json.Marshal(body)
|
||||||
req, err := http.NewRequest("POST", url, bytes.NewReader(data))
|
req, err := http.NewRequest("POST", url, bytes.NewReader(data))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -123,6 +121,9 @@ func doPost(url string, body interface{}) ([]byte, error) {
|
|||||||
}
|
}
|
||||||
req.Header.Set("Content-Type", "application/json")
|
req.Header.Set("Content-Type", "application/json")
|
||||||
req.Header.Set("Accept", "application/json")
|
req.Header.Set("Accept", "application/json")
|
||||||
|
if apiKey = strings.TrimSpace(apiKey); apiKey != "" {
|
||||||
|
req.Header.Set("TRON-PRO-API-KEY", apiKey)
|
||||||
|
}
|
||||||
|
|
||||||
resp, err := httpClient.Do(req)
|
resp, err := httpClient.Do(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -137,8 +138,8 @@ func doPost(url string, body interface{}) ([]byte, error) {
|
|||||||
return b, nil
|
return b, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetNowBlock() (*Block, error) {
|
func GetNowBlock(baseURL string, apiKey string) (*Block, error) {
|
||||||
b, err := doPost(TronAPIBase+"/wallet/getnowblock", map[string]interface{}{})
|
b, err := doPost(baseURL+"/wallet/getnowblock", apiKey, map[string]interface{}{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -146,8 +147,8 @@ func GetNowBlock() (*Block, error) {
|
|||||||
return &block, json.Unmarshal(b, &block)
|
return &block, json.Unmarshal(b, &block)
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetBlockByNum(num int64) (*Block, error) {
|
func GetBlockByNum(baseURL string, apiKey string, num int64) (*Block, error) {
|
||||||
b, err := doPost(TronAPIBase+"/wallet/getblockbynum", map[string]interface{}{"num": num})
|
b, err := doPost(baseURL+"/wallet/getblockbynum", apiKey, map[string]interface{}{"num": num})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -281,6 +282,8 @@ func processBlock(block *Block) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type Scanner struct {
|
type Scanner struct {
|
||||||
|
baseURL string
|
||||||
|
apiKey string
|
||||||
lastBlock int64
|
lastBlock int64
|
||||||
// 统计
|
// 统计
|
||||||
totalBlocks int64
|
totalBlocks int64
|
||||||
@@ -293,8 +296,15 @@ func NewScanner() *Scanner {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *Scanner) Init() error {
|
func (s *Scanner) Init() error {
|
||||||
log.Sugar.Infof("[TRON-BLOCK] node=%s", TronAPIBase)
|
baseURL, apiKey, err := service.ResolveTronNode()
|
||||||
block, err := GetNowBlock()
|
if err != nil {
|
||||||
|
return fmt.Errorf("resolve tron node: %w", err)
|
||||||
|
}
|
||||||
|
s.baseURL = baseURL
|
||||||
|
s.apiKey = apiKey
|
||||||
|
|
||||||
|
log.Sugar.Infof("[TRON-BLOCK] node=%s", s.baseURL)
|
||||||
|
block, err := GetNowBlock(s.baseURL, s.apiKey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("获取初始块失败: %w", err)
|
return fmt.Errorf("获取初始块失败: %w", err)
|
||||||
}
|
}
|
||||||
@@ -322,7 +332,7 @@ func (s *Scanner) Run() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *Scanner) poll() {
|
func (s *Scanner) poll() {
|
||||||
latest, err := GetNowBlock()
|
latest, err := GetNowBlock(s.baseURL, s.apiKey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Sugar.Warnf("[TRON-BLOCK] get latest block: %v", err)
|
log.Sugar.Warnf("[TRON-BLOCK] get latest block: %v", err)
|
||||||
return
|
return
|
||||||
@@ -337,7 +347,7 @@ func (s *Scanner) poll() {
|
|||||||
if num == latestNum {
|
if num == latestNum {
|
||||||
block = latest
|
block = latest
|
||||||
} else {
|
} else {
|
||||||
block, err = GetBlockByNum(num)
|
block, err = GetBlockByNum(s.baseURL, s.apiKey, num)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Sugar.Warnf("[TRON-BLOCK] get block %d: %v", num, err)
|
log.Sugar.Warnf("[TRON-BLOCK] get block %d: %v", num, err)
|
||||||
continue
|
continue
|
||||||
|
|||||||
Reference in New Issue
Block a user