Задать вопрос
@setupx
Go & TS developer

Проверка пополнения TRX кошелька?

У меня есть простой код и функция GetTrxBalance:
code

type Client struct {
	node string
	GRPC *client.GrpcClient
}

func NewClient(node string) (*Client, error) {
	c := new(Client)

	if node == "" {
		c.node = "grpc.trongrid.io:50051"
	}

	c.node = node

	c.GRPC = client.NewGrpcClient(node)

	err := c.GRPC.Start(grpc.WithInsecure())

	if err != nil {
		return nil, fmt.Errorf("grpc client start error: %v", err)
	}

	return c, nil
}

func (c *Client) keepConnect() error {
	_, err := c.GRPC.GetNodeInfo()

	if err != nil {
		if strings.Contains(err.Error(), "no such host") {
			return c.GRPC.Reconnect(c.node)
		}
		return fmt.Errorf("node connect error: %v", err)
	}

	return err
}

func (c *Client) Transfer(from, to string, amount int64) (*api.TransactionExtention, error) {
	err := c.keepConnect()

	if err != nil {
		return nil, err
	}

	return c.GRPC.Transfer(from, to, amount)
}

func (c *Client) Broadcast(tx *core.Transaction) (*api.Return, error) {
	return c.GRPC.Broadcast(tx)
}

func (c *Client) GetTrxBalance(addr string) (float64, error) {
	err := c.keepConnect()

	if err != nil {
		return 0, err
	}

	account, err := c.GRPC.GetAccount(addr)
	if err != nil {
		return 0, err
	}

	return float64(account.Balance) / 1000000, err
}



Я создаю кошелек и отправляю его пользователю для пополнения. Мне нужно узнать, пополнил ли он баланс кошелька или нет, как мне это реализовать? На ум приходит только создать отдельную горутину, которая условно каждые 30-60 секунд будет делать запрос и проверять баланс и заносить данные в БД, но как будет вести себя система, когда таких горутин может быть более 10к?
  • Вопрос задан
  • 98 просмотров
Подписаться 1 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 1
@calculator212
но как будет вести себя система, когда таких горутин может быть более 10к?
Для этого есть worker pool, не нужно просто так бесконтрольно запускать горутины для такого. Суть в том, что ты создаешь воркер пул, в котором определяешь число горутин, после при помощи каналов шлешь в него таски на оплату
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы