xrplwin/xrpl-txmutationparser

解析XRPL交易为上下文感知对象。

v1.0.11 2024-05-03 09:40 UTC

README

CI workflow GitHub license Total Downloads

PHP版的XRPL交易突变解析器

演示

XRPLWin沙盒 中查看此操作

描述

将XRPL交易解析为上下文感知对象以进行可视化表示。它接受一个XRPL交易(结果、元数据)和一个XRPL账户。XRPL账户是从该账户解释XRPL交易的上下文。

该账户可以是发送者、接收者或中间账户。如果发生交易,例如异步触及您的出价,则适用中间账户。您提出一个出价,并在某个时候被(可能部分地)消费。或者,如果您是常规密钥签名人,或者有东西通过您的账户波及,您也可以成为中间账户。

库将解析所有内容,执行所有逻辑(包括费用或不包括费用等),并返回一个对象,该对象可用于例如事件列表或交易详细信息视图,其中包含所有相关对象解析和计算。

这是由 https://github.com/XRPL-Labs/TxMutationParser 通过 @XRPL Labs 开发的PHP端口。

注意

此软件包提供原样,请先自行测试。
发现了一个错误? 在此处报告问题

要求

安装

要安装,请运行

composer require xrplwin/xrpl-txmutationparser

用法

use XRPLWin\XRPLTxMutatationParser\TxMutationParser;

$referenceAccount = "rA...";
$tx = (object)[ // Full XRPL transaction, containing Account, Destination, meta, ...)
    "Account": "rA...",
    "Amount": "100300000",
    "Destination": "rD....",
    "Fee": "10000",
    ...
    "meta" => [ ... ],
    ...
];

//Enable to include trading fees calculation in allBalanceChanges results
$calculateTradingFees = false;

$TxMutationParser = new TxMutationParser($referenceAccount, $tx, $calculateTradingFees);
$parsedTransaction = $TxMutationParserRef->result();

print_r($parsedTransaction); 

一个示例响应(作为JSON)

{
  self: {
    feePayer: true,
    account: 'rA...',
    balanceChangesExclFee: [ [Object], [Object], ... ],
    balanceChanges: [ [Object], [Object], ... ],
    tradingFees: [ [Object], ... ] //Optional
  },
  type: 'TRADE',
  eventList: {
    primary: { ... },
    secondary: { ... },
  },
  eventFlow: {
    start: {
      account: 'rB...',
      mutation: [Object]
    },
    intermediate: {
      account: 'rA...',
      mutations: {'in' => ?Object, 'out' => ?Object}
    },
    end: {
      account: 'rC...',
      mutation: [Object]
    }
  },
  allBalanceChanges: {
    rB: [ [Object], [Object], ... ],
    rA: [ [Object], [Object], ... ],
    rC: [ [Object], ... ]
  }
}

场景(数据内容)

事件列表(code>eventList,例如属于上下文账户的交易列表)

如果您的上下文账户没有应用任何余额变化:空。如果只有一个相关变化(例如,支付进出):只有eventList.primary对象存在。如果发生交易并且您的账户既发送也接收/交换了某些内容,则eventList.primary对象是主要余额变化。作为参考,可以显示eventList.secondary值。

eventList.secondary.counterparty可以是一系列对手方,如果查看账户是发行人并且多货币余额通过多个当事人进行调整(ripple)通过多个当事人(在此处查看示例),其中eventList.secondary.value是该货币余额变化的总和 - 这种行为与XRPL Labs软件包不同。

事件列表完全为空的一个常见场景是,如果您的上下文账户是例如发行的货币通过其波及的账户,或者上下文账户是常规密钥,签署了解析的交易。

事件流程(code>eventFlow,例如上下文账户查看的交易详情页面)

code>eventFlow对象可以包含一个eventFlow.starteventFlow.intermediateeventFlow.end对象。开始和结束对象可以包含一个mutation(一个,例如eventFlow.start.mutation)。

code>eventFlow.intermediate对象可以包含多个mutations、一个in和一个out(或仅in,或(更常见)仅out)突变:eventFlow.intermediate.mutations.in / eventFlow.intermediate.mutations.out

如果

  • 交易类型为突变类型 SET(例如:常规密钥设置、账户设置、发布XRPL报价等)
  • 上下文账户是交易的发行者,交易正在通过上下文账户传播
  • 上下文账户是使用常规密钥的签名者,且上下文账户的余额不发生变化
显示逻辑

始终按此顺序显示(如果存在)

  • 开始
  • 中间
  • 结束

... 只显示(但总是)它们如果存在。

余额变动(《allBalanceChanges》)

所有余额变动返回每个参与者的余额变动。如果启用 calculateTradingFees,余额变动也包括交易费用计算。

运行测试

在 "tests" 目录中运行所有测试。

composer test

./vendor/bin/phpunit --testdox