Skip to content

Commit 05546df

Browse files
committed
Handle Loan
1 parent 40d10a4 commit 05546df

File tree

3 files changed

+320
-0
lines changed

3 files changed

+320
-0
lines changed

src/TxParticipantExtractor.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -898,6 +898,22 @@ private function extract_LoanBroker(\stdClass $data, ?string $context = null)
898898
}
899899
}
900900

901+
/**
902+
* @see https://github.com/Tapanito/XRPL-Standards/tree/xls-66-lending-protocol/XLS-0066-lending-protocol
903+
*/
904+
private function extract_Loan(\stdClass $data, ?string $context = null)
905+
{
906+
if(isset($data->Depositor)) {
907+
$this->addAccount($data->Depositor, 'LOAN_DEPOSITOR');
908+
}
909+
if(isset($data->Borrower)) {
910+
$this->addAccount($data->Borrower, 'LOAN_BORROWER');
911+
}
912+
if(isset($data->LoanBroker)) {
913+
$this->addAccount($data->LoanBroker, 'LOAN_LOANBROKER');
914+
}
915+
}
916+
901917
private function pubkeyToAccount(string $SigningPubKey): string
902918
{
903919
return XRPLPHPUtilities::deriveAddress($SigningPubKey);

tests/Tx62Test.php

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
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+
* LoanSet
10+
* @see 2EE6E56970D231971027B9A050A5C2386EFBE941C7488CB74B4CCFD90592EACB xrpl devnet
11+
*/
12+
final class Tx62Test extends TestCase
13+
{
14+
public function testLoanSet()
15+
{
16+
$transaction = file_get_contents(__DIR__.'/fixtures/tx62.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(5, $accounts);
27+
28+
//Initiator
29+
$this->assertEquals([
30+
'INITIATOR',
31+
'TXSIGNER',
32+
'VAULT_OWNER',
33+
'LOANBROKER_OWNER',
34+
'ACCOUNTROOT_ACCOUNT'
35+
], $accounts['rLqFqimsVC6NDzrXd1U2DJ4HpePmY6bNKE']);
36+
37+
//Broker account
38+
$this->assertEquals([
39+
'DIRECTORYNODE_OWNER',
40+
'LOANBROKER_ACCOUNT',
41+
], $accounts['r3Tqo462LWafQrvgYxUA7RsZnZezzZbUmp']);
42+
43+
$this->assertEquals([
44+
'LOAN_BORROWER',
45+
'DIRECTORYNODE_OWNER',
46+
'RIPPLESTATE_HIGHLIMIT_ISSUER',
47+
'ACCOUNTROOT_ACCOUNT'
48+
], $accounts['r4YvsyQWzLhnTtazA1wpFMBHcfjktw5tsQ']);
49+
50+
$this->assertEquals([
51+
'VAULT_ACCOUNT',
52+
'RIPPLESTATE_HIGHLIMIT_ISSUER',
53+
], $accounts['rEChfXTCNbDrqyvMUCETLyjvf8umtdXuRL']);
54+
55+
$this->assertEquals([
56+
'VAULT_ASSET_ISSUER',
57+
'RIPPLESTATE_LOWLIMIT_ISSUER',
58+
], $accounts['r3cqktRFGSDsBZZkmo3phWaT278XQ19ySS']);
59+
60+
}
61+
}

tests/fixtures/tx62.json

Lines changed: 243 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,243 @@
1+
{
2+
"result": {
3+
"Account": "rLqFqimsVC6NDzrXd1U2DJ4HpePmY6bNKE",
4+
"Counterparty": "r4YvsyQWzLhnTtazA1wpFMBHcfjktw5tsQ",
5+
"CounterpartySignature": {
6+
"SigningPubKey": "ED892D0656CA46E0E4BD50B07E501DA7619FE891FE3783122A11C26805821273F6",
7+
"TxnSignature": "8427B9432D0FBF3CD0F4BBB0F24947A53DEF9F20A021C6CD0CA7A5AD0218E45960FEA3DAD28F8E0413B9A0428FF91C882EA4B877C108A2AACB16B101F2536B00"
8+
},
9+
"Fee": "4",
10+
"Flags": 0,
11+
"GracePeriod": 604800,
12+
"InterestRate": 100,
13+
"LastLedgerSequence": 3796836,
14+
"LoanBrokerID": "F2BFD680E3C9D6CA1CE69A3033FBBABF65967B53F1C2B19BD8E561AB5FE0CD74",
15+
"PaymentInterval": 2592000,
16+
"PaymentTotal": 1,
17+
"PrincipalRequested": "100",
18+
"Sequence": 3493598,
19+
"SigningPubKey": "EDD17A4D9770715EAAAF0B57BA03BA62EEDE9B232F5F5F0285B30471B246ED7B3E",
20+
"TransactionType": "LoanSet",
21+
"TxnSignature": "38FABCD49658D21830C5C463BE72915F6A22AD2AEB15211C5D9DE4A1865FC002CD15334670E09B0FF60E5EAC8E907C94E57505942506BB08F05807D34DBFD102",
22+
"ctid": "C039EF5600000002",
23+
"date": 824650370,
24+
"hash": "117F33DABB25F7653B28072BC2AFAB708E419A61CE8D750C5822D4B5BBA82EEB",
25+
"inLedger": 3796822,
26+
"ledger_index": 3796822,
27+
"meta": {
28+
"AffectedNodes": [
29+
{
30+
"ModifiedNode": {
31+
"FinalFields": {
32+
"Flags": 0,
33+
"Owner": "r3Tqo462LWafQrvgYxUA7RsZnZezzZbUmp",
34+
"RootIndex": "0550506A61E0568156D815961A5BE20A6F7EFB25752E5752D2E64B1EA9DDA1D5"
35+
},
36+
"LedgerEntryType": "DirectoryNode",
37+
"LedgerIndex": "0550506A61E0568156D815961A5BE20A6F7EFB25752E5752D2E64B1EA9DDA1D5",
38+
"PreviousTxnID": "D697985A2CA1168981F9DF9FDB119737AFF2E90B99A0CE2B3E802B30B624AA66",
39+
"PreviousTxnLgrSeq": 3790900
40+
}
41+
},
42+
{
43+
"CreatedNode": {
44+
"LedgerEntryType": "Loan",
45+
"LedgerIndex": "12E8743FAA6783E6E1AA0B12870B84F145915CFE13D95ACFC5C72F7144279271",
46+
"NewFields": {
47+
"Borrower": "r4YvsyQWzLhnTtazA1wpFMBHcfjktw5tsQ",
48+
"GracePeriod": 604800,
49+
"InterestRate": 100,
50+
"LoanBrokerID": "F2BFD680E3C9D6CA1CE69A3033FBBABF65967B53F1C2B19BD8E561AB5FE0CD74",
51+
"LoanScale": -13,
52+
"LoanSequence": 1,
53+
"ManagementFeeOutstanding": "0.000008219178",
54+
"NextPaymentDueDate": 827242372,
55+
"PaymentInterval": 2592000,
56+
"PaymentRemaining": 1,
57+
"PeriodicPayment": "100.0082191780819584",
58+
"PrincipalOutstanding": "100",
59+
"StartDate": 824650372,
60+
"TotalValueOutstanding": "100.008219178082"
61+
}
62+
}
63+
},
64+
{
65+
"ModifiedNode": {
66+
"FinalFields": {
67+
"Flags": 0,
68+
"Owner": "r4YvsyQWzLhnTtazA1wpFMBHcfjktw5tsQ",
69+
"RootIndex": "20B905505B354FC686243066E4BA9D070B32A9F91A17455FF6303C37EFC26544"
70+
},
71+
"LedgerEntryType": "DirectoryNode",
72+
"LedgerIndex": "20B905505B354FC686243066E4BA9D070B32A9F91A17455FF6303C37EFC26544",
73+
"PreviousTxnID": "781897E26FD41BDAD1A705E4D7590C1E6F95F9A6B7F59DF4630DA828BBDD65F4",
74+
"PreviousTxnLgrSeq": 3708355
75+
}
76+
},
77+
{
78+
"ModifiedNode": {
79+
"FinalFields": {
80+
"Account": "rEChfXTCNbDrqyvMUCETLyjvf8umtdXuRL",
81+
"Asset": {
82+
"currency": "USD",
83+
"issuer": "r3cqktRFGSDsBZZkmo3phWaT278XQ19ySS"
84+
},
85+
"AssetsAvailable": "150",
86+
"AssetsTotal": "250.008210958904",
87+
"Flags": 0,
88+
"Owner": "rLqFqimsVC6NDzrXd1U2DJ4HpePmY6bNKE",
89+
"OwnerNode": "0",
90+
"Scale": 6,
91+
"Sequence": 3493596,
92+
"ShareMPTID": "00000001A0C42A6BCD4EF8E13379D53F91E96AF0819719B9",
93+
"WithdrawalPolicy": 1
94+
},
95+
"LedgerEntryType": "Vault",
96+
"LedgerIndex": "2E1C97F1A9ED4DCB25B1F261C0BEF05533520E860F2960B714837AD84D5404C7",
97+
"PreviousFields": {
98+
"AssetsAvailable": "250",
99+
"AssetsTotal": "250"
100+
},
101+
"PreviousTxnID": "F36EBA7F08CED5DA191DC849DB2B76F41AEB420BE1F0160200E9B20291667234",
102+
"PreviousTxnLgrSeq": 3790949
103+
}
104+
},
105+
{
106+
"ModifiedNode": {
107+
"FinalFields": {
108+
"Balance": {
109+
"currency": "USD",
110+
"issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji",
111+
"value": "-100"
112+
},
113+
"Flags": 131072,
114+
"HighLimit": {
115+
"currency": "USD",
116+
"issuer": "r4YvsyQWzLhnTtazA1wpFMBHcfjktw5tsQ",
117+
"value": "1000000000"
118+
},
119+
"HighNode": "0",
120+
"LowLimit": {
121+
"currency": "USD",
122+
"issuer": "r3cqktRFGSDsBZZkmo3phWaT278XQ19ySS",
123+
"value": "0"
124+
},
125+
"LowNode": "0"
126+
},
127+
"LedgerEntryType": "RippleState",
128+
"LedgerIndex": "B0AD663E5AC18460C273BB43569747EB42BE2209BC02CB5FF7A27EB8C0B426E5",
129+
"PreviousFields": {
130+
"Balance": {
131+
"currency": "USD",
132+
"issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji",
133+
"value": "0"
134+
}
135+
},
136+
"PreviousTxnID": "781897E26FD41BDAD1A705E4D7590C1E6F95F9A6B7F59DF4630DA828BBDD65F4",
137+
"PreviousTxnLgrSeq": 3708355
138+
}
139+
},
140+
{
141+
"ModifiedNode": {
142+
"FinalFields": {
143+
"Balance": {
144+
"currency": "USD",
145+
"issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji",
146+
"value": "-150"
147+
},
148+
"Flags": 2228224,
149+
"HighLimit": {
150+
"currency": "USD",
151+
"issuer": "rEChfXTCNbDrqyvMUCETLyjvf8umtdXuRL",
152+
"value": "0"
153+
},
154+
"HighNode": "0",
155+
"LowLimit": {
156+
"currency": "USD",
157+
"issuer": "r3cqktRFGSDsBZZkmo3phWaT278XQ19ySS",
158+
"value": "0"
159+
},
160+
"LowNode": "0"
161+
},
162+
"LedgerEntryType": "RippleState",
163+
"LedgerIndex": "ED8E5740171F5C432E8B1D9A642728FA2F147D1EB359547263AEA6B88B0E12A2",
164+
"PreviousFields": {
165+
"Balance": {
166+
"currency": "USD",
167+
"issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji",
168+
"value": "-250"
169+
}
170+
},
171+
"PreviousTxnID": "F36EBA7F08CED5DA191DC849DB2B76F41AEB420BE1F0160200E9B20291667234",
172+
"PreviousTxnLgrSeq": 3790949
173+
}
174+
},
175+
{
176+
"ModifiedNode": {
177+
"FinalFields": {
178+
"Account": "r3Tqo462LWafQrvgYxUA7RsZnZezzZbUmp",
179+
"DebtTotal": "100.008210958904",
180+
"Flags": 0,
181+
"LoanSequence": 2,
182+
"ManagementFeeRate": 100,
183+
"Owner": "rLqFqimsVC6NDzrXd1U2DJ4HpePmY6bNKE",
184+
"OwnerCount": 1,
185+
"OwnerNode": "0",
186+
"Sequence": 3493597,
187+
"VaultID": "2E1C97F1A9ED4DCB25B1F261C0BEF05533520E860F2960B714837AD84D5404C7",
188+
"VaultNode": "0"
189+
},
190+
"LedgerEntryType": "LoanBroker",
191+
"LedgerIndex": "F2BFD680E3C9D6CA1CE69A3033FBBABF65967B53F1C2B19BD8E561AB5FE0CD74",
192+
"PreviousFields": {
193+
"LoanSequence": 1
194+
},
195+
"PreviousTxnID": "D697985A2CA1168981F9DF9FDB119737AFF2E90B99A0CE2B3E802B30B624AA66",
196+
"PreviousTxnLgrSeq": 3790900
197+
}
198+
},
199+
{
200+
"ModifiedNode": {
201+
"FinalFields": {
202+
"Account": "r4YvsyQWzLhnTtazA1wpFMBHcfjktw5tsQ",
203+
"Balance": "260999987",
204+
"Flags": 0,
205+
"OwnerCount": 2,
206+
"Sequence": 3510827
207+
},
208+
"LedgerEntryType": "AccountRoot",
209+
"LedgerIndex": "F3721E14873682ABA31C828E785D0E0D9D8B03623BCBF49AD18C11F7F667060E",
210+
"PreviousFields": {
211+
"OwnerCount": 1
212+
},
213+
"PreviousTxnID": "5B112B9C73967B92F2068F0A1B8B0478974C1B2D3765581E5C2871391ED7F7E9",
214+
"PreviousTxnLgrSeq": 3796800
215+
}
216+
},
217+
{
218+
"ModifiedNode": {
219+
"FinalFields": {
220+
"Account": "rLqFqimsVC6NDzrXd1U2DJ4HpePmY6bNKE",
221+
"Balance": "199599986",
222+
"Flags": 0,
223+
"OwnerCount": 11,
224+
"Sequence": 3493599
225+
},
226+
"LedgerEntryType": "AccountRoot",
227+
"LedgerIndex": "F9B448AF0D15D8BE7817582AD68316E4F57CB082B2E4CE72D6B6EF7647C8DA77",
228+
"PreviousFields": {
229+
"Balance": "199599990",
230+
"Sequence": 3493598
231+
},
232+
"PreviousTxnID": "D697985A2CA1168981F9DF9FDB119737AFF2E90B99A0CE2B3E802B30B624AA66",
233+
"PreviousTxnLgrSeq": 3790900
234+
}
235+
}
236+
],
237+
"TransactionIndex": 0,
238+
"TransactionResult": "tesSUCCESS"
239+
},
240+
"status": "success",
241+
"validated": true
242+
}
243+
}

0 commit comments

Comments
 (0)