Сегодня хотел бы рассказать про такую замечательную криптовалюту как TRON ( TRX ), а так же показать как достаточно просто можно создать сервис процессинга оплаты при помощи АПИ — https://api.trongrid.io на любимом многими РHP
Почему я считаю, что TRX замечательным:
- Сеть Tron работает очень быстро с минимальными затратами. TRON способен обрабатывать до 2000 транзакций в секунду, что значительно больше, чем у Ethereum (15-30 транзакций/секунда) или Bitcoin (5-7 транзакций/секунда).
- Транзакции в TRON практически бесплатны. Это делает его отличным выбором для частых и мелких переводов, особенно в DeFi-приложениях и микротранзакциях.
- Огромная популярность стэйблкоина в сети TRON (TRC20) из-за скорости и минимальных комиссий
Теперь я хотел бы продемонстрировать простой способ как можно процессить проведение платежей на примере реализации простого API на PHP с использованием Symfony.
Каким образом настроить докер для работы Symfony а так же как развернуть на Symfony API я углоблятся не буду ( может напишу про это отдельный пост чуть позже ), а вот как установить библиотеку и подключить ее к проекту на Symfony расскажу.
Для установки библиотеки для работы с АПИ TRX потребуется composer
Устанавливаем необходимый пакет:
# composer require iexbase/tron-api
Я хочу создать API который будет реализовывать 2 метода REST API:
- метод создания кошелька
- метод получения баланса кошелька
В целом думаю этого будет достаточно для того чтобы создать кошелек TRON для оплаты чего-либо и далее регулярно выполняя запросы на метод получения данных о балансе можно будет производить проверку проведения платежа, если сумма платежа будет соответствовать той под которую создавался кошелек, тогда оплату можно считать успешной.
<?php namespace App\Controller; use IEXBase\TronAPI\Exception\TronException; use IEXBase\TronAPI\Provider\HttpProvider; use IEXBase\TronAPI\Tron; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Routing\Attribute\Route; class CreateWalletController extends AbstractController { /** * @throws TronException */ #[Route('/wallet', name: 'create_wallet', methods: ['POST'])] public function __invoke(Request $request): JsonResponse { $fullNode = new HttpProvider('https://api.trongrid.io'); // Нода Tron $solidityNode = new HttpProvider('https://api.trongrid.io'); $eventServer = new HttpProvider('https://api.trongrid.io'); $tron = new Tron($fullNode, $solidityNode, $eventServer); $wallet = $tron->generateAddress(); $data = $wallet->getRawData(); return new JsonResponse([ 'wallet' => $data['address_base58'] ]); } }
Это простой метод POST при вызове которого будет создан кошелек.
Тут важно отметить, что приватный ключ не будет нигде сохранен и передан, поэтому с кошельком далее нельзя будет выполнить какие-либо действия ( тут приводится упрощенный код для того чтобы показать как это можно сделать на PHP )
После получения публичного адреса нового кошелька можно запустить воркер, который бы проверял поступление денежных средств на данный кошелек, для этого потребуется создать метод GET с передачей параметра — адреса кошелька для проверки его баланса.
<?php namespace App\Controller; use IEXBase\TronAPI\Exception\TronException; use IEXBase\TronAPI\Provider\HttpProvider; use IEXBase\TronAPI\Tron; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\Routing\Attribute\Route; class GetAddressInfo { #[Route('/address/{address}', name: 'get_address_info')] public function __invoke(string $address): JsonResponse { $fullNode = new HttpProvider('https://api.trongrid.io'); $solidityNode = new HttpProvider('https://api.trongrid.io'); $eventServer = new HttpProvider('https://api.trongrid.io'); try { $tron = new Tron($fullNode, $solidityNode, $eventServer); $tron->setAddress($address); $balance = $tron->getBalance(); $info = $tron->getAccount(); } catch (TronException $e) { exit($e->getMessage()); } return new JsonResponse([ 'address' => $address, 'create_date' => date('Y-m-d H:i:s', $info['create_time']/1000), 'balance' => $balance, ]); } }
Таким образом мы можем получить баланс кошелька и сопоставить его с ожидаемой суммой в TRX для оплаты того под что создавался кошелек. Тут важно понимать, что подобная система не является полностью работоспособной. Чтобы далее что-то делать со средствами которые поступили на счет нового кошелька, потребуется как минимум приватный ключ, но я думаю эти методы вполне могут подойти для каркаса будущего приложения в парадигме web3
Продолжение следует.