Skip to content

Commit e54b15a

Browse files
committed
BalanceChanges MPTAmount detection
1 parent 3d2d007 commit e54b15a

File tree

4 files changed

+179
-3
lines changed

4 files changed

+179
-3
lines changed

phpunit.xml.dist

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<testsuites>
44
<testsuite name="Test suite">
55
<directory suffix="Test.php">./tests/Unit</directory>
6-
<directory suffix="Test.php">./tests/Feature</directory>
6+
<!--<directory suffix="Test.php">./tests/Feature</directory>-->
77
</testsuite>
88
</testsuites>
99
</phpunit>

src/Utilities/BalanceChanges.php

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,7 @@ private function getTrustlineQuantity(\stdClass $node): ?array
166166
private function getMPTQuantity(\stdClass $node): ?array
167167
{
168168
$value = $this->computeMPTAmountChange($node);
169+
169170
if($value === null)
170171
return null;
171172

@@ -254,6 +255,35 @@ private function computeMPTAmountChange(\stdClass $node): ?BigDecimal
254255
{
255256
$value = null;
256257

258+
$finalFieldType = 'FinalFields';
259+
if($node->NewFields !== null) {
260+
$finalFieldType = 'NewFields';
261+
}
262+
263+
$oldMPTAmount = $this->getValue('0');
264+
if($node->PreviousFields !== null && isset($node->PreviousFields->MPTAmount)) {
265+
$oldMPTAmount = $this->getValue($node->PreviousFields->MPTAmount);
266+
}
267+
268+
$newMPTAmount = $this->getValue('0');
269+
if($node->{$finalFieldType} !== null && isset($node->{$finalFieldType}->MPTAmount)) {
270+
$newMPTAmount = $this->getValue($node->{$finalFieldType}->MPTAmount);
271+
}
272+
273+
$value = $newMPTAmount->minus($oldMPTAmount);
274+
275+
if($value === null)
276+
return null;
277+
278+
if($value->isEqualTo(0))
279+
return null;
280+
281+
return $value;
282+
283+
//OLD BELOW
284+
285+
/*dd($node,$value,$finalFieldType);
286+
257287
if($node->NewFields !== null && isset($node->NewFields->MPTAmount)) {
258288
$value = $this->getValue($node->NewFields->MPTAmount);
259289
} elseif($node->PreviousFields !== null && isset($node->PreviousFields->MPTAmount) && $node->FinalFields !== null && isset($node->FinalFields->MPTAmount)) {
@@ -275,7 +305,7 @@ private function computeMPTAmountChange(\stdClass $node): ?BigDecimal
275305
if($value->isEqualTo(0))
276306
return null;
277307
278-
return $value;
308+
return $value;*/
279309
}
280310

281311
private function computeBalanceChange(\stdClass $node): ?BigDecimal

tests/Unit/BalanceChangesTest.php

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -362,9 +362,10 @@ public function test_mpt_payment1()
362362
{
363363
$tx = file_get_contents(__DIR__.'/../fixtures/utils/mptPayment1.json');
364364
$tx = \json_decode($tx);
365-
365+
//echo 'AAAAAAAAAAAAAAAAAA';
366366
$parser = new BalanceChanges($tx->result->meta,false);
367367
$result = $parser->result();
368+
//dd($result);
368369

369370
$expected = [
370371
[
@@ -508,6 +509,43 @@ public function test_mpt_clawback1()
508509
$this->assertEquals($expected,$result);
509510
}
510511

512+
public function test_loan_broker_cover_clawback1()
513+
{
514+
$tx = file_get_contents(__DIR__.'/../fixtures/utils/loanBrokerCoverClawback1.json');
515+
$tx = \json_decode($tx);
516+
517+
$parser = new BalanceChanges($tx->result->meta,false);
518+
$result = $parser->result();
519+
//
520+
$expected = [
521+
[
522+
'account' => 'rPmootBD4pqewsovD7xNwiUBEEMGCygAJk',
523+
'balances' => [
524+
[
525+
'mpt_issuance_id' => '00020819F9CC24A7381FE776A547005EC32B89AEA64C4C37',
526+
'value' => '10000',
527+
],
528+
[
529+
'currency' => 'XRP',
530+
'value' => '-0.000001'
531+
]
532+
],
533+
],
534+
[
535+
'account' => 'rfyoYKwFpnGZ9zbuVKoaDTBZ5ADK3c2Ti2',
536+
'balances' => [
537+
[
538+
'mpt_issuance_id' => '00020819F9CC24A7381FE776A547005EC32B89AEA64C4C37',
539+
'value' => '-10000',
540+
],
541+
]
542+
]
543+
];
544+
545+
$this->assertEquals($expected,$result);
546+
547+
}
548+
511549
public function test_mpt_escrowfinish1()
512550
{
513551
//return mpt back to issuer
@@ -517,10 +555,15 @@ public function test_mpt_escrowfinish1()
517555

518556
$parser = new BalanceChanges($tx->result->meta,false);
519557
$result = $parser->result();
558+
//dd($result);
520559
$expected = [
521560
[
522561
'account' => 'rMdLLyrrh1UC7M5rA4UVvBDjsbzi4Go1yc',
523562
'balances' => [
563+
[
564+
'mpt_issuance_id' => '0042AB9EAB8A5036CE4DB80D47016F557F9BFC9523985BF1',
565+
'value' => '57858464',
566+
],
524567
[
525568
'currency' => 'XRP',
526569
'value' => '-0.000001'
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
{
2+
"result": {
3+
"Account": "rPmootBD4pqewsovD7xNwiUBEEMGCygAJk",
4+
"Amount": {
5+
"mpt_issuance_id": "00020819F9CC24A7381FE776A547005EC32B89AEA64C4C37",
6+
"value": "10000"
7+
},
8+
"Fee": "1",
9+
"LoanBrokerID": "BCC2D2A2FD4C0ADC941B104811AB81989BFE5A81CCADBFFC4840ED81B9D07210",
10+
"Sequence": 133148,
11+
"SigningPubKey": "02132D5C630333DC95B4E3580F289A11D9979D15E8935C77B64B151F1EDDF6A090",
12+
"TransactionType": "LoanBrokerCoverClawback",
13+
"TxnSignature": "3045022100C15D3BC4B34E5FBFBEE1ADEB2CAF7B7FBE303A8C4C8460FBC626B08D094DDFBE02202F1D0A8CFC6C9C893865D5CC6C016673DF1B4ADAF132D64950DCDDD52EA8743F",
14+
"ctid": "C002082300110002",
15+
"date": 826278263,
16+
"hash": "AA0932FC8B92C2719A62CBA14F1B91504960AC7461E63A78B2E2ECC6DB96E417",
17+
"inLedger": 133155,
18+
"ledger_index": 133155,
19+
"meta": {
20+
"AffectedNodes": [
21+
{
22+
"ModifiedNode": {
23+
"FinalFields": {
24+
"Flags": 96,
25+
"Issuer": "rPmootBD4pqewsovD7xNwiUBEEMGCygAJk",
26+
"OutstandingAmount": "20000",
27+
"OwnerNode": "0",
28+
"Sequence": 133145
29+
},
30+
"LedgerEntryType": "MPTokenIssuance",
31+
"LedgerIndex": "B9DC472D8B6169E8752287A6DE8DA56F8E2EC4EF2D1459BC7F631AD00AD77EF3",
32+
"PreviousFields": {
33+
"OutstandingAmount": "30000"
34+
},
35+
"PreviousTxnID": "D926B5DC13E9124AD483BA7EF9B96A256EE95F1B7794B54BA22A0019BB3097F2",
36+
"PreviousTxnLgrSeq": 133150
37+
}
38+
},
39+
{
40+
"ModifiedNode": {
41+
"FinalFields": {
42+
"Account": "rfyoYKwFpnGZ9zbuVKoaDTBZ5ADK3c2Ti2",
43+
"Flags": 0,
44+
"LoanSequence": 1,
45+
"Owner": "rB5MhNBBeFeKu6aXxv1bbx5QnLYszu93Fm",
46+
"OwnerNode": "0",
47+
"Sequence": 133145,
48+
"VaultID": "8C283E9280E6A511F182CE186FD0713CD005EFBC663956367D535CB92EB0848A",
49+
"VaultNode": "0"
50+
},
51+
"LedgerEntryType": "LoanBroker",
52+
"LedgerIndex": "BCC2D2A2FD4C0ADC941B104811AB81989BFE5A81CCADBFFC4840ED81B9D07210",
53+
"PreviousFields": {
54+
"CoverAvailable": "10000"
55+
},
56+
"PreviousTxnID": "0FD1AA9F20C335B6B4DDA37EBF971576D7588AEACB8377AEA5A876AA451AF34D",
57+
"PreviousTxnLgrSeq": 133154
58+
}
59+
},
60+
{
61+
"ModifiedNode": {
62+
"FinalFields": {
63+
"Account": "rfyoYKwFpnGZ9zbuVKoaDTBZ5ADK3c2Ti2",
64+
"Flags": 0,
65+
"MPTokenIssuanceID": "00020819F9CC24A7381FE776A547005EC32B89AEA64C4C37",
66+
"OwnerNode": "0"
67+
},
68+
"LedgerEntryType": "MPToken",
69+
"LedgerIndex": "BE4058CA284089E8140B3400DE51DD12416591C6F6BF13450B75AE4ECDA175A3",
70+
"PreviousFields": {
71+
"MPTAmount": "10000"
72+
},
73+
"PreviousTxnID": "0FD1AA9F20C335B6B4DDA37EBF971576D7588AEACB8377AEA5A876AA451AF34D",
74+
"PreviousTxnLgrSeq": 133154
75+
}
76+
},
77+
{
78+
"ModifiedNode": {
79+
"FinalFields": {
80+
"Account": "rPmootBD4pqewsovD7xNwiUBEEMGCygAJk",
81+
"Balance": "39999996",
82+
"Flags": 0,
83+
"OwnerCount": 1,
84+
"Sequence": 133149
85+
},
86+
"LedgerEntryType": "AccountRoot",
87+
"LedgerIndex": "E9A1702DF900A647AA21BB46DDB6B7B29E9AFE33290F1D656467E9D1C225E196",
88+
"PreviousFields": {
89+
"Balance": "39999997",
90+
"Sequence": 133148
91+
},
92+
"PreviousTxnID": "D926B5DC13E9124AD483BA7EF9B96A256EE95F1B7794B54BA22A0019BB3097F2",
93+
"PreviousTxnLgrSeq": 133150
94+
}
95+
}
96+
],
97+
"TransactionIndex": 17,
98+
"TransactionResult": "tesSUCCESS"
99+
},
100+
"status": "success",
101+
"validated": true
102+
}
103+
}

0 commit comments

Comments
 (0)