xrplwin / xrpl-hookparser
为启用钩子的XRPL/Xahau网络提供的交易钩子解析器。
v2.0.1
2024-03-10 21:43 UTC
Requires
- php: ^8.1.0
- ext-bcmath: *
- brick/math: ^0.10||^0.11||^0.12
Requires (Dev)
- phpunit/phpunit: ^10.1
- symfony/var-dumper: ^6.1
README
HookParser
为启用钩子的XRPL/Xahau网络提供的交易钩子解析器。
本包接收单个交易,解析元数据并提供关于HookHash和账户的信息。
需求
- PHP 8.1或更高版本
- Composer
安装
composer require xrplwin/xrpl-hookparser
用法
交易解析器
use XRPLWin\XRPLHookParser\TxHookParser; $tx = (object)[ // Full transaction, containing Account, Destination, meta, ... "Account": "rA...", "Amount": "100300000", "Destination": "rD....", "Fee": "10000", ... "meta" => [ ... ], ... ]; $TxHookParser = new TxHookParser($tx); // All examples below return array: # List of all hooks in transaction $hooks = $TxHookParser->hooks(); # List of all accounts that are affected by hooks in transaction $accounts = $TxHookParser->accounts(); # List of hooks by account* $accountHooks = $TxHookParser->accountHooks('raddress...'); # List of accounts by hook $hookAccounts = $TxHookParser->hookAccounts('5EDF6...2DC77'); # List of newly created hooks (new HookDefinition created) $createdHooks = $TxHookParser->createdHooks(); # List of newly created hooks - detailed $createdHooksDetails = $TxHookParser->createdHooksDetailed(); # Array key-value parameters contained in created hook $hookInitialParams = TxHookParser::toParams($createdHooksDetails['5EDF6...2DC77']); # Check if specific hook is created $isCreated = $TxHookParser->isHookCreated('5EDF6...2DC77'); # List of destroyed hooks (HookDefinition deleted) $destroyedHooks = $TxHookParser->destroyedHooks(); # Check if specific hook is destroyed $isDestroyed = $TxHookParser->isHookDestroyed('5EDF6...2DC77'); # List of uninstalled hooks* (eg. SetHook transaction) $uninstalledHooks = $TxHookParser->uninstalledHooks(); # List of uninstalled hooks with positions* $uninstalledHooksPos = $TxHookParser->uninstalledHooksPos(); # List of uninstalled hooks with num uninstalls $uninstalledHooksStats = $TxHookParser->uninstalledHooksStats(); # List of installed hooks* (eg. SetHook transaction) $installedHooks = $TxHookParser->installedHooks(); # List of installed hooks with positions* $installedHooksPos = $TxHookParser->installedHooksPos(); # List of installed hooks with num installs $installedHooksStats = $TxHookParser->installedHooksStats(); # List of modified hooks* $modifiedHooks = $TxHookParser->modifiedHooks(); # List of modified hooks with positions* $modifiedHooksPos = $TxHookParser->modifiedHooksPos(); # List of unmodified hooks* $unmodifiedHooks = $TxHookParser->unmodifiedHooks(); # List of unmodified hooks with positions* $unmodifiedHooksPos = $TxHookParser->unmodifiedHooksPos(); # Manual data lookup (lookup any combination of mapped data) $lookup = $TxHookParser->lookup('raddress...','Hook','installed'); # * Methods that can return multiple same hook hashes, for example if # account has same hook on two or more positions installed, it is # important to differentiate hook "instance" on account vs hook # create and destroy actions. List of hooks always returns unique hashes.
HookOn字段
有关参考,请参阅https://richardah.github.io/xrpl-hookon-calculator/
解码HookOnString
use XRPLWin\XRPLHookParser\HookOn; $triggered = HookOn::decode('0xfffffffffffffffffffffffffffffffffffffff7fffffffffffc1fffffc00a40'); //array /* $triggered = array:26 [ 0 => "ttPAYMENT" 1 => "ttESCROW_CREATE" ... ] */ //No triggers in this sample: HookOn::decode('0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffff'); //Works without prefix: HookOn::decode('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffff'); //Works with uppercase and lowercase: HookOn::decode('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFF'); HookOn::decode('0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFF'); HookOn::decode('0XFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFF');
编码HookOnString
use XRPLWin\XRPLHookParser\HookOn; HookOn::encode([HookOn::ttACCOUNT_DELETE]); //= (string)'0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9fffff' HookOn::encode([]); //= (string)'0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffff' HookOn::encode([HookOn::ttACCOUNT_DELETE,HookOn::ttACCOUNT_SET]); //= (string)'0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9ffff7'
2.x版本的新功能
2.x版本带来了钩子检测代码的重构,现在可以跟踪位置,这反过来又允许使用以下列出的新方法。对于每个账户安装、修改和卸载的钩子,都可以获取更改发生的位置。修改钩子方法现在不返回重新安装但内容未更改的钩子(标志=0已归一化),这些钩子现在可在unmodifiedHooks
和unmodifiedHooksPos
方法中找到。
- 添加了
uninstalledHooksPos()
方法 - 添加了
installedHooksPos()
方法 - 修改了
modifiedHooks()
方法 - 添加了
modifiedHooksPos()
方法 - 添加了
unmodifiedHooks()
方法 - 添加了
unmodifiedHooksPos()
方法
运行测试
在"tests"目录中运行所有测试。
composer test
或
./vendor/bin/phpunit --testdox