xrplwin / xrpl-txmutationparser
解析XRPL交易为上下文感知对象。
Requires
- php: ^8.1.0
- hardcastle/xrpl_php: ^0.8
- xrplwin/xrpl: ^1.0.18
Requires (Dev)
- phpunit/phpunit: ^10.1
- symfony/var-dumper: ^6.1
README
PHP版的XRPL交易突变解析器
演示
在 XRPLWin沙盒 中查看此操作
描述
将XRPL交易解析为上下文感知对象以进行可视化表示。它接受一个XRPL交易(结果、元数据)和一个XRPL账户。XRPL账户是从该账户解释XRPL交易的上下文。
该账户可以是发送者、接收者或中间账户。如果发生交易,例如异步触及您的出价,则适用中间账户。您提出一个出价,并在某个时候被(可能部分地)消费。或者,如果您是常规密钥签名人,或者有东西通过您的账户波及,您也可以成为中间账户。
库将解析所有内容,执行所有逻辑(包括费用或不包括费用等),并返回一个对象,该对象可用于例如事件列表或交易详细信息视图,其中包含所有相关对象解析和计算。
这是由 https://github.com/XRPL-Labs/TxMutationParser 通过 @XRPL Labs 开发的PHP端口。
注意
此软件包提供原样,请先自行测试。
发现了一个错误? 在此处报告问题
要求
- PHP 8.1或更高版本
- Composer
安装
要安装,请运行
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.start
、eventFlow.intermediate
和eventFlow.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