Токены ERC-20

Как мы экономим на комиссиях

Отдельно стоит отметить erc-20 токены, работающие у нас на платформе ethereum. Проблем при пополнении кошельков токенам не возникает, однако эти токены нужно еще как-то отправить владельцам биржи. Но есть проблема: чтобы применить метод transfer в сторону смарт-контракта, нужно оплатить топливо для совершения транзакции.

Первая идея, которая пришла нам в голову была следующей:

  1. Если на адресе есть токены, идем дальше

  2. Если нет эфира на адресе, пополняем адрес эфиром

  3. Делаем запрос transfer в адрес смарт-контракта чтобы переместить токены на новый адрес

Однако данный способ очень не экономичный: при каждом пополнении кошелька токенами приходилось бы пополнить его эфиром и затем снова сделать запрос в адрес смарт-контракта. Чтобы сэкономить средства на комиссиях, был придуман достаточно хитрый и непрозрачный способ вывода средств.

В логика системы были добавлены новые кошельки:

  • Сервисный кошелек deposit: кошелек, с которого отправляется определенное количество эфира на адреса, на которых есть токены

  • Сервисный кошелек transfer: кошелек, который вызывает метод transferFrom для вывода токена с одного кошелька на другой (для этого нужно получить доверенность к адресу с помощью метода approve)

Алгоритм работы по сбору средств следующий:

  1. Если на кошелек пришли токены, проверяем, был ли сделан approve в адрес смарт-контракта ранее

  2. Если не было approve для сервисного кошелька transfer, то кошелек deposit отправляет на данный адрес eth (если на данном адресе нет eth)

  3. Если кошелек был пополнен eth и не был вызван метод approve, то на адрес смарт-контракта отправляется транзакция с методом approve и выдается доверенность на выполнение транзакций с сервисного кошелька transfer.

  4. Сервисный кошелек transfer вызывает метод transferFrom и выводит с кошельков пополнений токены

В итоге мы имеем следующую картину: после первого пополнения кошелька токенами, сервисный кошелек deposit пополняет его eth, отправляет запрос approve в смарт-контракт, и затем сервисный кошелек transfer выводит все токены на новый кошелек. Далее при пополнении этого же адреса, сервисный кошелек transfer сам выведет токены.