Как работает перенос токена ERC20?
Несмотря на то, что ABI контракта ERC20 поставляется со встроенным методом передачи, но это не то, как вы делаете перенос токена ERC20.Метод для передачи токенов включает в себя кодирование правильно отформатированного оператора метода передачи контракта, включая все переданные аргументы, с использованием алгоритма Keccak.Это действительно сложный процесс, но какой смысл использовать библиотеку, если она не облегчает работу разработчика?Итак, вот простой и продуманный способ переноса токенов ERC20 с одного адреса Ethereum на другой…
Примечание за транзакцию: Любая транзакция на блокчейне Ethereum требует обработки «газом», поэтомуесли адрес Эфириума, с которого вы намереваетесь передать токены, имеет достаточное количество токенов, но все еще имеет НЕДОСТАТОЧНОЕ количество ETH, транзакция НЕ пройдет!
Библиотека
ЭтоВ ответе используется библиотека erc20-php
, которую можно установить с помощью композитора:
composer require furqansiddiqui/erc20-php
Передача токена ERC20
Начнем с создания необходимых классов:
<?php
declare(strict_types=1);
use EthereumRPC\EthereumRPC;
use ERC20\ERC20;
// Instantiate Ethereum RPC lib with your server credentials (i.e. Ethereum-Go)
// This example assumes Ethereum RPC server running on standard port 8545 on localhost
$geth = new EthereumRPC('127.0.0.1', 8545);
// Instantiate ERC20 lib by passing Instance of EthereumRPC lib as constructor argument
$erc20 = new ERC20($geth);
Подготовьте свой vars и получите экземпляр токена ERC20:
$contract = "0x...contract-address"; // ERC20 contract address
$payer = "0x...payer-address"; // Sender's Ethereum account
$payee = "0x...payee-address"; // Recipient's Ethereum account
$amount = "1.2345"; // Amount of tokens to transfer
// Grab instance of ERC20_Token class
$token = $erc20->token($contract);
Кодирование передачи токена:
// First argument is payee/recipient of this transfer
// Second argument is the amount of tokens that will be sent
$data = $token->encodedTransferData($payee, $amount);
Подготовьте транзакцию Ethereum:
Теперь, когда у нас есть требуемая закодированная шестнадцатеричная строка метода передачи в качестве нашей переменной $ data, далее мы будем готовить и отправлять эту транзакцию, но вотКлючевые примечания:
Получатель транзакции: Транзакции передачи токена ERC20 отправляются на адрес контракта ERC20, вы закодировали адрес исходного получателя на предыдущем шаге, поэтому не нужно путать, транзакция должнабыть отправленным на адрес смарт-контракта.
Сумма транзакции: Как и получатель, сумма перевода токена ERC20 уже закодирована в нашем $ data var, поэтому сумма транзакции ETH должна быть установлена на «0 ”
Подготовка транзакции:
$transaction = $geth->personal()->transaction($payer, $contract) // from $payer to $contract address
->amount("0") // Amount should be ZERO
->data($data); // Our encoded ERC20 token transfer data from previous step
и все!А если серьезно, не забудьте отправить эту транзакцию:
// Send transaction with ETH account passphrase
$txId = $transaction->send("secret"); // Replace "secret" with actual passphrase of SENDER's ethereum account
Поздравляем, ваша транзакция передачи токена ERC20 отправлена в сеть Ethereum P2P.Вы получите идентификатор транзакции в качестве возврата от метода send (), и вы можете использовать этот идентификатор транзакции для проверки статуса этой транзакции в любом проводнике цепочек цепей Ethereum!
Спасибо за чтение!Дайте мне знать, как это сработало для вас, у меня есть и другие похожие темы, освещенные в моем блоге: https://www.furqansiddiqui.com/