Skip to content
3 changes: 3 additions & 0 deletions src/Enums/AbiFunction.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

namespace ArkEcosystem\Crypto\Enums;

use ArkEcosystem\Crypto\Transactions\Types\EvmCall;
use ArkEcosystem\Crypto\Transactions\Types\Multipayment;
use ArkEcosystem\Crypto\Transactions\Types\Unvote;
use ArkEcosystem\Crypto\Transactions\Types\UsernameRegistration;
Expand All @@ -21,6 +22,7 @@ enum AbiFunction: string
case USERNAME_REGISTRATION = 'registerUsername';
case USERNAME_RESIGNATION = 'resignUsername';
case MULTIPAYMENT = 'pay';
case TRANSFER = 'transfer';

public function transactionClass(): string
{
Expand All @@ -32,6 +34,7 @@ public function transactionClass(): string
self::USERNAME_REGISTRATION => UsernameRegistration::class,
self::USERNAME_RESIGNATION => UsernameResignation::class,
self::MULTIPAYMENT => Multipayment::class,
self::TRANSFER => EvmCall::class,
};
}
}
1 change: 1 addition & 0 deletions src/Enums/ContractAbiType.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,5 @@ enum ContractAbiType: string
case CONSENSUS = 'consensus';
case MULTIPAYMENT = 'multipayment';
case USERNAMES = 'usernames';
case TOKEN = 'token';
}
38 changes: 38 additions & 0 deletions src/Transactions/Builder/TokenTransferBuilder.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
<?php

declare(strict_types=1);

namespace ArkEcosystem\Crypto\Transactions\Builder;

use ArkEcosystem\Crypto\Enums\AbiFunction;
use ArkEcosystem\Crypto\Enums\ContractAbiType;
use ArkEcosystem\Crypto\Helpers;
use ArkEcosystem\Crypto\Transactions\Types\AbstractTransaction;
use ArkEcosystem\Crypto\Transactions\Types\EvmCall;
use ArkEcosystem\Crypto\Utils\AbiEncoder;
use Brick\Math\BigDecimal;

class TokenTransferBuilder extends AbstractTransactionBuilder
{
public function contractAddress(string $address): self
{
return $this->to($address);
}

public function recipient(string $address, BigDecimal $amount): self
{
$payload = (new AbiEncoder(ContractAbiType::TOKEN))->encodeFunctionCall(
AbiFunction::TRANSFER->value,
[$address, $amount]
);

$this->transaction->data['data'] = Helpers::removeLeadingHexZero($payload);

return $this;
}

protected function getTransactionInstance(array $data): AbstractTransaction
{
return new EvmCall($data);
}
}
Loading
Loading