hardcastle/xrpl_php

用于 XRP 账本(XRP Ledger)的 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);
}