gndlf/ xrpl_php

XRP分类账的PHP客户端

0.9.4 2024-06-25 14:00 UTC

README

PHP SDK / 客户端库,用于与XRP分类账交互。它提供了JavaScript和Java版本中所有可用的功能,强调健壮性和代码可读性,对于想要深入了解XRPL开发细节的用户来说非常有用。

Build Status License

特性

  1. 管理密钥和创建测试凭据
  2. 向XRP分类账提交交易
  3. 发送请求以观察分类账
  4. 创建和签名交易(例如付款)以修改分类账状态
  5. 将分类账数据解析为更方便的格式

安装

此库可以通过Composer安装

composer require hardcastle/xrpl_php

要求

此库需要PHP 8.1或更高版本以及PHP扩展GMP

示例

"快速入门"示例

这些示例重现了JavaScript快速入门示例的功能

php 1.get-accounts-send-xrp.php
php 2.create-trustline-send-currency.php
php 3.mint-nfts.php

如何使用示例

这些示例展示了如何使用关键功能

php examples/client.php
php examples/fundWallet.php
php examples/payment.php
php examples/token-create.php // IOU + Token + CBDC - Wallet Matrix with Trustlines
etc...

核心示例

这些示例可用于探索XRPL核心功能

php examples/internal/address-codec.php
php examples/internal/binary-codec.php
etc...

通过Docker运行项目

  1. 在项目目录中,启动项目并打开shell
docker-compose up -d
docker-compose exec -u 0 php bash
  1. 在容器shell中,安装composer依赖项
composer install

运行测试

您可以使用以下命令运行测试

./vendor/bin/phpunit tests

您可以使用以下命令使用psalm进行静态代码分析

./vendor/bin/psalm --config=psalm.xml

亲自尝试

发出账户信息请求

require __DIR__.'/../vendor/autoload.php';

use Hardcastle\XRPL_PHP\Client\JsonRpcClient;
use Hardcastle\XRPL_PHP\Models\Account\AccountObjectsRequest;

// Those will be purged from the Testnet in regular intervals, you can use fundWallet()
// to generate prefunded Wallets on the Testnet
$testnetAccountAddress = 'raKXrkYfbh4Uzqc481jTXbaKsWnW5XRMjp';

$client = new JsonRpcClient("https://s.altnet.rippletest.net:51234");

$request = new AccountObjectsRequest(
    account: $testnetAccountAddress,
    ledgerIndex: 'validated',
    deletionBlockersOnly: true
);

// Using synchronous request
$response = $client->syncRequest($request);
$json = json_decode($response->getBody());
print_r($json);

// Using asynchronous request
// $response = $client->request($request)->wait();
// $json = json_decode($response->getBody());
// print_r($json);

进行付款

// Use your own credentials here:
$testnetStandbyAccountSeed = 'sEdTcvQ9k4UUEHD9y947QiXEs93Fp2k';
$testnetStandbyAccountAddress = 'raJNboPDvjLrYZropPFrxvz2Qm7A9guEVd';
$standbyWallet = Wallet::fromSeed($testnetStandbyAccountSeed);

// Use your own credentials here:
$testnetOperationalAccountSeed = 'sEdVHf8rNEaRveJw4NdVKxm3iYWFuRb';
$testnetOperationalAccountAddress = 'rEQ3ik2kmAvajqpFweKgDghJFZQGpXxuRN';
$operationalWallet = Wallet::fromSeed($testnetStandbyAccountSeed);

$client = new JsonRpcClient("https://s.altnet.rippletest.net:51234");

$tx = [
    "TransactionType" => "Payment",
    "Account" => $testnetStandbyAccountAddress,
    "Amount" => xrpToDrops("100"),
    "Destination" => $testnetOperationalAccountAddress
];
$autofilledTx = $client->autofill($tx);
$signedTx = $standbyWallet->sign($autofilledTx);

$txResponse = $client->submitAndWait($signedTx['tx_blob']);
$result = $txResponse->getResult();
if ($result['meta']['TransactionResult'] === 'tecUNFUNDED_PAYMENT') {
    print_r("Error: The sending account is unfunded! TxHash: {$result['hash']}" . PHP_EOL);
} else {
    print_r("Token payment done! TxHash: {$result['hash']}" . PHP_EOL);
}