Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Get order book changes #407

Merged
merged 17 commits into from Jul 28, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
3 changes: 1 addition & 2 deletions CHANGELOG.md
Expand Up @@ -8,12 +8,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [[Unreleased]]
### Added:
- Function to parse the final account balances from a transaction's metadata
- Function to parse order book changes from a transaction's metadata
- Support for Ed25519 seeds that don't use the `sEd` prefix

### Fixed:
- Typing for factory classmethods on models

### Fixed:
- Use properly encoded transactions in `Sign`, `SignFor`, and `SignAndSubmit`

## [1.6.0] - 2022-06-02
Expand Down
137 changes: 137 additions & 0 deletions tests/unit/utils/txn_parser/test_get_order_book_changes.py
@@ -0,0 +1,137 @@
from __future__ import annotations

import json
from unittest import TestCase

from xrpl.utils import get_order_book_changes

path_to_json = "tests/unit/utils/txn_parser/transaction_jsons/"
with open(path_to_json + "offer_created.json", "r") as infile:
offer_created = json.load(infile)
with open(path_to_json + "offer_partially_filled_and_filled.json", "r") as infile:
offer_partially_filled_and_filled = json.load(infile)
with open(path_to_json + "offer_cancelled.json", "r") as infile:
offer_cancelled = json.load(infile)
with open(path_to_json + "offer_with_expiration.json", "r") as infile:
offer_with_expiration = json.load(infile)


class TestGetOrderBookChanges(TestCase):
def test_offer_created(self: TestGetOrderBookChanges):
actual = get_order_book_changes(offer_created["meta"])
expected = [
{
"maker_account": "rJHbqhp9Sea4f43RoUanrDE1gW9MymTLp9",
"offer_changes": [
{
"flags": 131072,
"taker_gets": {"currency": "XRP", "value": "44.930000"},
"taker_pays": {
"currency": "USD",
"issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",
"value": "14.524821",
},
LimpidCrypto marked this conversation as resolved.
Show resolved Hide resolved
"sequence": 71307620,
"status": "created",
"maker_exchange_rate": "0.3232766748275094591586912976",
"expiration_time": 740218424,
}
],
}
]
self.assertEqual(actual, expected)

def test_offer_partially_filled_and_filled(self: TestGetOrderBookChanges):
actual = get_order_book_changes(offer_partially_filled_and_filled["meta"])
expected = [
{
"maker_account": "rNzgS71DyJPMnWMA8aS7NqvXP7bNuwyaZo",
"offer_changes": [
{
"flags": 131072,
"taker_gets": {
"currency": "USD",
"issuer": "rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq",
"value": "-63.7479881398749",
},
"taker_pays": {
"currency": "USD",
"issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",
"value": "-62.4730283770749",
},
"sequence": 5931,
"status": "filled",
"maker_exchange_rate": "0.9799999999999607517025555356",
}
],
},
{
"maker_account": "rPu2feBaViWGmWJhvaF5yLocTVD8FUxd2A",
"offer_changes": [
{
"flags": 131072,
"taker_gets": {
"currency": "USD",
"issuer": "rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq",
"value": "-117.3895136925395",
},
"taker_pays": {
"currency": "USD",
"issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",
"value": "-115.0877585220975",
},
"sequence": 67701941,
"status": "partially-filled",
"maker_exchange_rate": "0.980392156862744680458408839",
}
],
},
]
self.assertEqual(actual, expected)

def test_offer_cancelled(self: TestGetOrderBookChanges):
actual = get_order_book_changes(offer_cancelled["meta"])
expected = [
{
"maker_account": "rEUt5Wy44vDKBDaGkUWG6oSTvxmqgnKWCg",
"offer_changes": [
{
"flags": 0,
"taker_gets": {
"currency": "XDX",
"issuer": "rMJAXYsbNzhwp7FfYnAsYP5ty3R9XnurPo",
"value": "-82335.52909",
},
"taker_pays": {"currency": "XRP", "value": "-47.504858"},
"sequence": 70922543,
"status": "cancelled",
LimpidCrypto marked this conversation as resolved.
Show resolved Hide resolved
"maker_exchange_rate": "0.0005769666937838341642215588998",
}
],
}
]
self.assertEqual(actual, expected)

def test_offer_with_expiration(self: TestGetOrderBookChanges):
actual = get_order_book_changes(offer_with_expiration["meta"])
expected = [
{
"maker_account": "rJHHRtt6qmiz71tyGFMZUoxMGakdgqEou5",
"offer_changes": [
{
"flags": 0,
"taker_gets": {"currency": "XRP", "value": "-50.000000"},
"taker_pays": {
"currency": "457175696C69627269756D000000000000000000",
"issuer": "rpakCr61Q92abPXJnVboKENmpKssWyHpwu",
"value": "-230.8404670389911",
},
"sequence": 67782876,
"status": "cancelled",
"maker_exchange_rate": "4.616809340779822",
"expiration_time": 708682031,
}
],
}
]
self.assertEqual(actual, expected)
90 changes: 90 additions & 0 deletions tests/unit/utils/txn_parser/transaction_jsons/offer_cancelled.json
@@ -0,0 +1,90 @@
{
"Account": "rEUt5Wy44vDKBDaGkUWG6oSTvxmqgnKWCg",
"Fee": "15",
"Flags": 2147483648,
"LastLedgerSequence": 72374248,
"OfferSequence": 70922543,
"Sequence": 70922544,
"SigningPubKey": "ED024DA5B0A65470D8582D43BDD54D2BD861C9485CFB13EFA2928650CE6686A86D",
"TransactionType": "OfferCancel",
"TxnSignature": "37EB64C659AE77A70FB93A2DFA0AE5282E3B6C0C8E89A3FE08E004D216CB5C8C62219761E3764AFCBA82692DF6204516FD63C0265CC894B360EA06F18401E90E",
"date": 708682141,
"hash": "40FDBE9F71213696FE67CC80B2847E7DA1D3E03A4446D34DCC7DE347137FF436",
"inLedger": 72374247,
"ledger_index": 72374247,
"meta": {
"AffectedNodes": [
{
"DeletedNode": {
"FinalFields": {
"ExchangeRate": "57147f7b444d5b06",
"Flags": 0,
"RootIndex": "2004607367326F467796C4080157BE0997B306F1CA6AE0C657147F7B444D5B06",
"TakerGetsCurrency": "0000000000000000000000005844580000000000",
"TakerGetsIssuer": "DEC71A7A7168ED930218B15994FD007CE80A4913",
"TakerPaysCurrency": "0000000000000000000000000000000000000000",
"TakerPaysIssuer": "0000000000000000000000000000000000000000"
},
"LedgerEntryType": "DirectoryNode",
"LedgerIndex": "2004607367326F467796C4080157BE0997B306F1CA6AE0C657147F7B444D5B06"
}
},
{
"ModifiedNode": {
"FinalFields": {
"Account": "rEUt5Wy44vDKBDaGkUWG6oSTvxmqgnKWCg",
"Balance": "1283353963",
"Flags": 0,
"OwnerCount": 2,
"Sequence": 70922545
},
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "2CAC78E1EEC7340A666AED1DE99DB8B6C8235CB6675903CAB26EA5C62D4F0BB4",
"PreviousFields": {
"Balance": "1283353978",
"OwnerCount": 3,
"Sequence": 70922544
},
"PreviousTxnID": "3C6A9B3C72B79DB877AC205ADC1700281C20D08CCD30A6779C3E1B550B558B95",
"PreviousTxnLgrSeq": 72373937
}
},
{
"DeletedNode": {
"FinalFields": {
"Account": "rEUt5Wy44vDKBDaGkUWG6oSTvxmqgnKWCg",
"BookDirectory": "2004607367326F467796C4080157BE0997B306F1CA6AE0C657147F7B444D5B06",
"BookNode": "0",
"Flags": 0,
"OwnerNode": "0",
"PreviousTxnID": "3C6A9B3C72B79DB877AC205ADC1700281C20D08CCD30A6779C3E1B550B558B95",
"PreviousTxnLgrSeq": 72373937,
"Sequence": 70922543,
"TakerGets": {
"currency": "XDX",
"issuer": "rMJAXYsbNzhwp7FfYnAsYP5ty3R9XnurPo",
"value": "82335.52909"
},
"TakerPays": "47504858"
},
"LedgerEntryType": "Offer",
"LedgerIndex": "A867E960F0D9F88D7BE2885AA3E69C5F2C7F76499D6CC483E353D6616EEBD352"
}
},
{
"ModifiedNode": {
"FinalFields": {
"Flags": 0,
"Owner": "rEUt5Wy44vDKBDaGkUWG6oSTvxmqgnKWCg",
"RootIndex": "FEB025593E20EE2B66382D9F9079719A40AD0DE257CBBD6421092037E39C9A53"
},
"LedgerEntryType": "DirectoryNode",
"LedgerIndex": "FEB025593E20EE2B66382D9F9079719A40AD0DE257CBBD6421092037E39C9A53"
}
}
],
"TransactionIndex": 16,
"TransactionResult": "tesSUCCESS"
},
"validated": true
}
93 changes: 93 additions & 0 deletions tests/unit/utils/txn_parser/transaction_jsons/offer_created.json
@@ -0,0 +1,93 @@
{
"Account": "rJHbqhp9Sea4f43RoUanrDE1gW9MymTLp9",
"Expiration": 740218424,
"Fee": "25",
"Flags": 2148007936,
"LastLedgerSequence": 72374322,
"Sequence": 71307620,
"SigningPubKey": "020AF1B1419DB3C80FBB3B2621315F78F03806118094140B6FE535ED809561AC23",
"TakerGets": "44930000",
"TakerPays": {
"currency": "USD",
"issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",
"value": "14.524821"
},
"TransactionType": "OfferCreate",
"TxnSignature": "3045022100C1CA7C960C1BD0B2EA9ACCA13BB429C1C5B558AB2B8AFE9FE3815DB075E07806022030152DC46694A3BF8BA1509944F9388723CB30C678E659613D4B3BF8166CCCA5",
"date": 708682430,
"hash": "463E28521ACA7FB5F4081E7E368FA5AEB76FB641FCB3C92CA9E8971A990CE84A",
"inLedger": 72374321,
"ledger_index": 72374321,
"meta": {
"AffectedNodes": [
{
"ModifiedNode": {
"FinalFields": {
"Flags": 0,
"Owner": "rJHbqhp9Sea4f43RoUanrDE1gW9MymTLp9",
"RootIndex": "3418F55643869450792F7047DC92DD661D38E68AC827C378D7C12FE8E017DD2B"
},
"LedgerEntryType": "DirectoryNode",
"LedgerIndex": "3418F55643869450792F7047DC92DD661D38E68AC827C378D7C12FE8E017DD2B"
}
},
{
"ModifiedNode": {
"FinalFields": {
"Account": "rJHbqhp9Sea4f43RoUanrDE1gW9MymTLp9",
"Balance": "69932774",
"Flags": 0,
"OwnerCount": 3,
"Sequence": 71307621
},
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "72D49D4E2ECA5153A90413AA4BCEFBFBE748A2B66A96F5E5611089C095BD666D",
"PreviousFields": {
"Balance": "69932799",
"OwnerCount": 2,
"Sequence": 71307620
},
"PreviousTxnID": "70C2D1F863FBF18CA7E9B17D7B35A19BD5ED22C8B703D447A21C746E1F66F311",
"PreviousTxnLgrSeq": 72374313
}
},
{
"ModifiedNode": {
"FinalFields": {
"ExchangeRate": "4e0b7c2f29ac3197",
"Flags": 0,
"RootIndex": "DFA3B6DDAB58C7E8E5D944E736DA4B7046C30E4F460FD9DE4E0B7C2F29AC3197",
"TakerGetsCurrency": "0000000000000000000000000000000000000000",
"TakerGetsIssuer": "0000000000000000000000000000000000000000",
"TakerPaysCurrency": "0000000000000000000000005553440000000000",
"TakerPaysIssuer": "0A20B3C85F482532A9578DBB3950B85CA06594D1"
},
"LedgerEntryType": "DirectoryNode",
"LedgerIndex": "DFA3B6DDAB58C7E8E5D944E736DA4B7046C30E4F460FD9DE4E0B7C2F29AC3197"
}
},
{
"CreatedNode": {
"LedgerEntryType": "Offer",
"LedgerIndex": "DFA50F8A0710C8483D5DEF31E87BFA5DBC617F16045EC187EB21A07B7A2B23DA",
"NewFields": {
"Account": "rJHbqhp9Sea4f43RoUanrDE1gW9MymTLp9",
"BookDirectory": "DFA3B6DDAB58C7E8E5D944E736DA4B7046C30E4F460FD9DE4E0B7C2F29AC3197",
"Expiration": 740218424,
"Flags": 131072,
"Sequence": 71307620,
"TakerGets": "44930000",
"TakerPays": {
"currency": "USD",
"issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",
"value": "14.524821"
}
}
}
}
],
"TransactionIndex": 37,
"TransactionResult": "tesSUCCESS"
},
"validated": true
}