Деплоим Tron смарт-контракт на PHP
Ранее мы уже успели немного поработать с TRC-10 смарт-контрактами, когда активировали адрес. Продолжим дальше работать с сетью Shasta и попробуем повзаимодействовать с TRC-20 смарт-контрактом USDT (TG3XXyExBkPp9nzdajDZsozEu4BkaSJozs
).
1
2
3
4
5
6
7
8
$fullNode = new \IEXBase\TronAPI\Provider\HttpProvider(
'https://api.shasta.trongrid.io'
);
$solidityNode = new \IEXBase\TronAPI\Provider\HttpProvider(
'https://api.shasta.trongrid.io'
);
$tron = new \IEXBase\TronAPI\Tron($fullNode, $solidityNode);
Где взять TRC-20 в тестнете Shasta? У Tron-а есть свой официальный discord. Там в канале
#faucet-test-coins
можно через бота получить себе немного TRX и USDT.
Создание объекта
Для взаимодействия со смарт-контрактом из PHP нужно создать объект контракта, передав адрес:
1
$contract = $tron->contract('TG3XXyExBkPp9nzdajDZsozEu4BkaSJozs');
Метод
contract()
подходит только для работы с TRC-20 контрактами
Чтение данных из контракта
Можно повызывать стандартные методы из интерфейса TRC-20 для получения информации о токене:
1
2
echo "Name: {$contract->name()}\n"; // Name: TetherToken
echo "Symbol: {$contract->symbol()}\n"; // Symbol: USDT
Или всю информацию в виде массива:
1
2
3
4
5
6
7
8
print_r($contract->array());
// Array
//(
// [name] => TetherToken
// [symbol] => USDT
// [decimals] => 6
// [totalSupply] => 10000000000.000000
//)
Получить свой баланс:
1
2
3
$balance = $contract->balanceOf('TRcaRU8eLxUsnj2htorxZGncT9ZB4xYxQr');
echo "Balance is $balance USDT\n";
// Balance is 5000.000000 USDT
Баланс вернется сразу в виде decimal числа. Все эти вызовы были чтением контракта (данных из блокчейна) и поэтому не требовали создания и подписи транзакции. Теперь попробуем отправить немного токенов с одного адреса на другой.
Отправка токенов
Для отправки токенов с одного адреса на другой используется TRC-20 метод transfer()
:
1
2
3
4
5
6
$result = $contract->transfer('TY5vve1fL4odqFmVwB4pwCJsiy8jfGJaFe', '5');
if (!$result['result']) {
echo 'Error: ' . $result['message'] . PHP_EOL;
} else {
echo 'Transaction hash: ' . $result['txid'] . PHP_EOL;
}
Обычно для вызова метода
transfer()
смарт-контракт USDT TRC-20 хватаетfeeLimit
в 10 TRX. Но если вдруг вызов смарт-контракта фейлится по причинеOut of Energy
, то можно вручную установить этот лимит:
1 $contract->setFeeLimit(20); // 20 TRX
Библиотека внутри сразу создает, подписывает и бродкастит транзакцию. В результате мы получаем хэш и саму подписанную транзакцию.