Skip to content

Commit 7fbcaee

Browse files
committed
XLS-65 and XLS-66 support
XLS-65 SingleAssetVault and XLS-66 LendingProtocol support
1 parent 91a422c commit 7fbcaee

File tree

5 files changed

+389
-0
lines changed

5 files changed

+389
-0
lines changed

src/TxParticipantExtractor.php

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -873,6 +873,31 @@ private function extract_MPToken(\stdClass $data, ?string $context = null)
873873
//no affected accounts (?)
874874
}
875875

876+
private function extract_Vault(\stdClass $data, ?string $context = null)
877+
{
878+
if(isset($data->Account)) {
879+
$this->addAccount($data->Account, 'VAULT_ACCOUNT');
880+
}
881+
if(isset($data->Owner)) {
882+
$this->addAccount($data->Owner, 'VAULT_OWNER');
883+
}
884+
885+
//Asset (if token)
886+
if(isset($data->Asset) && !\is_string($data->Asset) && isset($data->Asset->issuer)) {
887+
$this->addAccount($data->Asset->issuer, 'VAULT_ASSET_ISSUER');
888+
}
889+
}
890+
891+
private function extract_LoanBroker(\stdClass $data, ?string $context = null)
892+
{
893+
if(isset($data->Account)) {
894+
$this->addAccount($data->Account, 'LOANBROKER_ACCOUNT');
895+
}
896+
if(isset($data->Owner)) {
897+
$this->addAccount($data->Owner, 'LOANBROKER_OWNER');
898+
}
899+
}
900+
876901
private function pubkeyToAccount(string $SigningPubKey): string
877902
{
878903
return XRPLPHPUtilities::deriveAddress($SigningPubKey);

tests/Tx60Test.php

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<?php declare(strict_types=1);
2+
3+
namespace XRPLWin\XRPLTxParticipantExtractor\Tests;
4+
5+
use PHPUnit\Framework\TestCase;
6+
use XRPLWin\XRPLTxParticipantExtractor\TxParticipantExtractor;
7+
8+
/***
9+
* VaultDeposit
10+
* @see DAFE3CFEEC5E235965FC241CB59072167860B134F7D984E105B31425DFA8ECAE xrpl devnet
11+
*/
12+
final class Tx60Test extends TestCase
13+
{
14+
public function testVaultDeposit()
15+
{
16+
$transaction = file_get_contents(__DIR__.'/fixtures/tx60.json');
17+
$transaction = \json_decode($transaction);
18+
$TxParticipantExtractor = new TxParticipantExtractor($transaction->result);
19+
20+
$parsedTransaction = $TxParticipantExtractor->result();
21+
22+
$this->assertIsArray($parsedTransaction);
23+
24+
$accounts = $TxParticipantExtractor->accounts();
25+
26+
$this->assertCount(2, $accounts);
27+
28+
//Initiator
29+
$this->assertEquals([
30+
'INITIATOR',
31+
'TXSIGNER',
32+
'MPTOKEN_ACCOUNT',
33+
'VAULT_OWNER',
34+
'ACCOUNTROOT_ACCOUNT'
35+
], $accounts['r4SwQCi1TPhtUeaXv4iVWiuzyLqK7jxUwN']);
36+
37+
//MPT Issuer
38+
$this->assertEquals([
39+
'VAULT_ACCOUNT',
40+
'ACCOUNTROOT_ACCOUNT',
41+
'MPTOKEN_ISSUER'
42+
], $accounts['rDbV87m4C8Ns6wqUDCPAUsNSNtHHXzgKPF']);
43+
}
44+
}

tests/Tx61Test.php

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
<?php declare(strict_types=1);
2+
3+
namespace XRPLWin\XRPLTxParticipantExtractor\Tests;
4+
5+
use PHPUnit\Framework\TestCase;
6+
use XRPLWin\XRPLTxParticipantExtractor\TxParticipantExtractor;
7+
8+
/***
9+
* LoanBrokerSet
10+
* @see 2EE6E56970D231971027B9A050A5C2386EFBE941C7488CB74B4CCFD90592EACB xrpl devnet
11+
*/
12+
final class Tx61Test extends TestCase
13+
{
14+
public function testLoanBrokerSet()
15+
{
16+
$transaction = file_get_contents(__DIR__.'/fixtures/tx61.json');
17+
$transaction = \json_decode($transaction);
18+
$TxParticipantExtractor = new TxParticipantExtractor($transaction->result);
19+
20+
$parsedTransaction = $TxParticipantExtractor->result();
21+
22+
$this->assertIsArray($parsedTransaction);
23+
24+
$accounts = $TxParticipantExtractor->accounts();
25+
dump($accounts);
26+
$this->assertCount(4, $accounts);
27+
28+
//Initiator
29+
$this->assertEquals([
30+
'INITIATOR',
31+
'TXSIGNER',
32+
'DIRECTORYNODE_OWNER',
33+
'ACCOUNTROOT_ACCOUNT',
34+
'LOANBROKER_OWNER'
35+
], $accounts['rwietsevLFg8XSmG3bEZzFein1g8RBqWDZ']);
36+
37+
//Broker account
38+
$this->assertEquals([
39+
'RIPPLESTATE_HIGHLIMIT_ISSUER',
40+
'ACCOUNTROOT_ACCOUNT',
41+
'DIRECTORYNODE_OWNER',
42+
'LOANBROKER_ACCOUNT',
43+
], $accounts['rG8XfcWXyjg88zciEuvbUR5BGs5KkcCz24']);
44+
45+
}
46+
}

tests/fixtures/tx60.json

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
{
2+
"result": {
3+
"Account": "r4SwQCi1TPhtUeaXv4iVWiuzyLqK7jxUwN",
4+
"Amount": "10000000",
5+
"Fee": "12",
6+
"Flags": 0,
7+
"LastLedgerSequence": 3466142,
8+
"Sequence": 3168096,
9+
"SigningPubKey": "ED439EA914C272BB7BD61E44421BA3071B175FD995F13CBFB73665DCC8ECDEA17F",
10+
"TransactionType": "VaultDeposit",
11+
"TxnSignature": "0A9A96EA3B7A6028F31A8692FA9DC90CCF9B217AC86F10BDD4F860DB02C11E2B90CCBA4275734CBCB78D5821FD85725F9F37C335E7BE96767C156A05540CA508",
12+
"VaultID": "0DBF2D01881D6AA1E815BF7C9FDE1BE90DAAD1CBEB6BAA81000C91D8FB85C8E9",
13+
"ctid": "C034E38C00000002",
14+
"date": 823617250,
15+
"hash": "DAFE3CFEEC5E235965FC241CB59072167860B134F7D984E105B31425DFA8ECAE",
16+
"inLedger": 3466124,
17+
"ledger_index": 3466124,
18+
"meta": {
19+
"AffectedNodes": [
20+
{
21+
"ModifiedNode": {
22+
"FinalFields": {
23+
"Account": "r4SwQCi1TPhtUeaXv4iVWiuzyLqK7jxUwN",
24+
"Flags": 0,
25+
"MPTAmount": "10000000",
26+
"MPTokenIssuanceID": "000000018A27AE0C58938F9259C319CBB4585383BCC9945A",
27+
"OwnerNode": "0"
28+
},
29+
"LedgerEntryType": "MPToken",
30+
"LedgerIndex": "06FF89B72B12A7EB2074385634AD882BD486D8CCCF14C04F3A7D2A0CEBB7D662",
31+
"PreviousFields": {},
32+
"PreviousTxnID": "C9160C187C24A0EDF2C554ACA5EA3DADC40D49D43DD014D2444F84855714C18E",
33+
"PreviousTxnLgrSeq": 3465494
34+
}
35+
},
36+
{
37+
"ModifiedNode": {
38+
"FinalFields": {
39+
"Account": "rDbV87m4C8Ns6wqUDCPAUsNSNtHHXzgKPF",
40+
"Asset": {
41+
"currency": "XRP"
42+
},
43+
"AssetsAvailable": "10000000",
44+
"AssetsTotal": "10000000",
45+
"Flags": 0,
46+
"Owner": "r4SwQCi1TPhtUeaXv4iVWiuzyLqK7jxUwN",
47+
"OwnerNode": "0",
48+
"Sequence": 3168095,
49+
"ShareMPTID": "000000018A27AE0C58938F9259C319CBB4585383BCC9945A",
50+
"WithdrawalPolicy": 1
51+
},
52+
"LedgerEntryType": "Vault",
53+
"LedgerIndex": "0DBF2D01881D6AA1E815BF7C9FDE1BE90DAAD1CBEB6BAA81000C91D8FB85C8E9",
54+
"PreviousFields": {},
55+
"PreviousTxnID": "C9160C187C24A0EDF2C554ACA5EA3DADC40D49D43DD014D2444F84855714C18E",
56+
"PreviousTxnLgrSeq": 3465494
57+
}
58+
},
59+
{
60+
"ModifiedNode": {
61+
"FinalFields": {
62+
"Account": "r4SwQCi1TPhtUeaXv4iVWiuzyLqK7jxUwN",
63+
"Balance": "289999973",
64+
"Flags": 8388608,
65+
"OwnerCount": 3,
66+
"Sequence": 3168097
67+
},
68+
"LedgerEntryType": "AccountRoot",
69+
"LedgerIndex": "B923A03F400E3994B40B25B578DAB0842B53C80C8555BD4E7F00F596F0755F5A",
70+
"PreviousFields": {
71+
"Balance": "299999985",
72+
"Sequence": 3168096
73+
},
74+
"PreviousTxnID": "33223C62588924647493F721D86B00653E1AD6774807782ECB8FFDCFC509939A",
75+
"PreviousTxnLgrSeq": 3466113
76+
}
77+
},
78+
{
79+
"ModifiedNode": {
80+
"FinalFields": {
81+
"Account": "rDbV87m4C8Ns6wqUDCPAUsNSNtHHXzgKPF",
82+
"Balance": "10000000",
83+
"Flags": 26214400,
84+
"OwnerCount": 1,
85+
"Sequence": 0,
86+
"VaultID": "0DBF2D01881D6AA1E815BF7C9FDE1BE90DAAD1CBEB6BAA81000C91D8FB85C8E9"
87+
},
88+
"LedgerEntryType": "AccountRoot",
89+
"LedgerIndex": "C11374169B1E2B1EC0E6FAA259569B9E6D176F483ED3C7EAF5B59933986F986D",
90+
"PreviousFields": {
91+
"Balance": "0"
92+
},
93+
"PreviousTxnID": "C9160C187C24A0EDF2C554ACA5EA3DADC40D49D43DD014D2444F84855714C18E",
94+
"PreviousTxnLgrSeq": 3465494
95+
}
96+
},
97+
{
98+
"ModifiedNode": {
99+
"FinalFields": {
100+
"Flags": 56,
101+
"Issuer": "rDbV87m4C8Ns6wqUDCPAUsNSNtHHXzgKPF",
102+
"OutstandingAmount": "10000000",
103+
"OwnerNode": "0",
104+
"Sequence": 1
105+
},
106+
"LedgerEntryType": "MPTokenIssuance",
107+
"LedgerIndex": "F60A3A95473ECA4C070639186B14F5B2707A4FFBCF54189491B8FB71001D1121",
108+
"PreviousFields": {
109+
"OutstandingAmount": "0"
110+
},
111+
"PreviousTxnID": "C9160C187C24A0EDF2C554ACA5EA3DADC40D49D43DD014D2444F84855714C18E",
112+
"PreviousTxnLgrSeq": 3465494
113+
}
114+
}
115+
],
116+
"TransactionIndex": 0,
117+
"TransactionResult": "tesSUCCESS"
118+
},
119+
"status": "success",
120+
"validated": true
121+
}
122+
}

0 commit comments

Comments
 (0)