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

Add Ledger Objects #663

Closed
wants to merge 63 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
fe6c399
add ledger objects
Oct 27, 2023
6b9fb7f
add NFTokenOffer test
Oct 27, 2023
752cea2
add NFTokenOffer test
Oct 27, 2023
84a9241
remove metadata models
Oct 27, 2023
6e08332
Merge branch 'main' into add-ledger-objects
khancode Jan 16, 2024
da60b00
remove optional type from ledger_entry_type
khancode Jan 16, 2024
361d429
add AMM ledger object
khancode Jan 19, 2024
92e435a
add DID ledger object
khancode Jan 19, 2024
182aa4e
add Bridge ledger object
khancode Jan 23, 2024
2209fc0
fix doctring
khancode Jan 23, 2024
167d5d5
fix typos
khancode Jan 23, 2024
d9b44b2
add XChainOwnedClaimID ledger object
khancode Jan 23, 2024
e51e170
add XChainOwnedCreateAccountClaimID ledger object
khancode Jan 25, 2024
81afbcd
small docstring updates
khancode Jan 25, 2024
cb13e9d
update AccountRoot
khancode Jan 25, 2024
f3f3c82
update Amendments
khancode Jan 25, 2024
3d25c01
update AMM
khancode Jan 25, 2024
e0c59b7
update Check
khancode Jan 25, 2024
7508dce
fix Check field
khancode Jan 25, 2024
655e53f
update DepositPreauth
khancode Jan 25, 2024
f6d656b
update flags docstrings
khancode Jan 25, 2024
3372896
update DirectoryNode
khancode Jan 25, 2024
41aa83c
update Escrow
khancode Jan 25, 2024
c213cff
update FeeSettings
khancode Jan 25, 2024
0de4fca
update LedgerHashes
khancode Jan 25, 2024
a504287
update LedgerObject and models with flags
khancode Jan 25, 2024
ac93044
update NegativeUNL
khancode Jan 25, 2024
1681bc6
update NFTokenOffer
khancode Jan 25, 2024
b7fda71
update NFTokenPage
khancode Jan 25, 2024
1e726b3
add ledger_index to LedgerObject
khancode Jan 25, 2024
4c82bff
update Offer
khancode Jan 25, 2024
f30d69d
update PayChannel
khancode Jan 25, 2024
c231e36
update RippleState
khancode Jan 25, 2024
5857fe0
remove unnecessary flags
khancode Jan 25, 2024
c5c19c1
update SignerList
khancode Jan 25, 2024
a2028b4
add index to Ticket test
khancode Jan 25, 2024
5c7a057
update Ticket
khancode Jan 25, 2024
1f9a418
update docstrings
khancode Jan 25, 2024
47e97c1
update .rst file
khancode Jan 25, 2024
835f821
resolve mypy errors
khancode Jan 25, 2024
4fd1134
remove docstring from ledger_entry_type
khancode Feb 1, 2024
d9858db
export LedgerObject
khancode Feb 1, 2024
eb7ad2a
set flag=0 in LedgerObject
khancode Feb 1, 2024
f56a985
exclude ledger objects model from code coverage
khancode Feb 1, 2024
3c90f8a
Merge branch 'main' into add-ledger-objects
khancode Feb 12, 2024
8d6fea3
add ledger_objects flags to flag list
khancode Feb 12, 2024
d63f92e
use from_xrpl in unit tests
khancode Feb 12, 2024
097ac0c
remove optional fields in unit tests
khancode Feb 12, 2024
2370e50
make index_next and index_previous strings
khancode Feb 12, 2024
6cd3389
add HasPreviousTxnID class to be inherited by ledger object models
khancode Feb 12, 2024
a7bdfd0
Merge branch 'main' into add-ledger-objects
khancode Feb 12, 2024
3d4ef7e
add TODO to .coveragerc
khancode Feb 13, 2024
376590b
update TODO in .coveragerc
khancode Feb 13, 2024
453c447
Merge branch 'main' into add-ledger-objects
khancode Feb 14, 2024
901ed12
update test JSONs to match XRPL formatting
khancode Feb 16, 2024
a7f0f54
move unit tests into their own files
khancode Feb 16, 2024
93e8222
fix docstring
khancode Feb 16, 2024
2fac675
fix NFTokenOffer.amount type
khancode Feb 21, 2024
a48706d
Merge branch 'main' into add-ledger-objects
khancode Feb 21, 2024
207a343
update docstrings
khancode Feb 21, 2024
ada14f6
add lsfAMMNode to RippleState
khancode Feb 21, 2024
ac8e737
add missing del
khancode Feb 23, 2024
ca02097
remove accidental change
khancode Feb 23, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .coveragerc
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# TODO: Delete this .coveragerc file once the ledger objects models are incorporated into the rest of the code.
[run]
omit =
khancode marked this conversation as resolved.
Show resolved Hide resolved
*/xrpl/models/ledger_objects/*
22 changes: 22 additions & 0 deletions docs/source/xrpl.models.ledger_objects.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
XRPL Ledger Objects Models
===================================

Use these models to process XRP Ledger Objects.

Base Ledger Object Model
----------------------

.. autoclass:: xrpl.models.ledger_objects.ledger_object.LedgerObject
khancode marked this conversation as resolved.
Show resolved Hide resolved
:members:
:undoc-members:
:show-inheritance:
:inherited-members:

Specific Ledger Object Types
--------------------------

.. automodule:: xrpl.models.ledger_objects
:members:
:undoc-members:
:show-inheritance:
:inherited-members:
Empty file.
47 changes: 47 additions & 0 deletions tests/unit/models/ledger_objects/test_account_root.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
from unittest import TestCase

from xrpl.models.ledger_objects.account_root import AccountRoot
from xrpl.models.ledger_objects.ledger_object import LedgerObject


class TestAccountRoot(TestCase):
def test_account_root(self):
account_root_json = {
"Account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
"AccountTxnID": "0D5FB50FA65C9FE1538FD7E398FFFE9D190"
"8DFA4576D8D7A020040686F93C77D",
"Balance": "148446663",
"Domain": "6D64756F31332E636F6D",
"EmailHash": "98B4375E1D753E5B91627516F6D70977",
"Flags": 8388608,
"LedgerEntryType": "AccountRoot",
"MessageKey": "0000000000000000000000070000000300",
"OwnerCount": 3,
"NFTokenMinter": "rHello",
"PreviousTxnID": "0D5FB50FA65C9FE1538FD7E398FFFE9D1908DFA4576D8D7A0200"
"40686F93C77D",
"PreviousTxnLgrSeq": 14091160,
"Sequence": 336,
"TransferRate": 1004999999,
"index": "13F1A95D7AAB7108D5CE7EEAF504B2894B8C674E6D68499076441C4837282BF8",
}
actual = LedgerObject.from_xrpl(account_root_json)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can the tests also check to_xrpl, since that's just adding one line? Just to make sure that everything's correct.

expected = AccountRoot(
index="13F1A95D7AAB7108D5CE7EEAF504B2894B8C674E6D68499076441C4837282BF8",
account="rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
balance="148446663",
flags=8388608,
owner_count=3,
previous_txn_id="0D5FB50FA65C9FE1538FD7E398FFFE9D"
"1908DFA4576D8D7A020040686F93C77D",
previous_txn_lgr_seq=14091160,
sequence=336,
account_txn_id="0D5FB50FA65C9FE1538FD7E398FFFE9D1"
"908DFA4576D8D7A020040686F93C77D",
domain="6D64756F31332E636F6D",
email_hash="98B4375E1D753E5B91627516F6D70977",
message_key="0000000000000000000000070000000300",
nftoken_minter="rHello",
transfer_rate=1004999999,
)
self.assertEqual(actual, expected)
47 changes: 47 additions & 0 deletions tests/unit/models/ledger_objects/test_amendments.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
from unittest import TestCase

from xrpl.models.ledger_objects.amendments import Amendments, Majority
from xrpl.models.ledger_objects.ledger_object import LedgerObject


class TestAmendments(TestCase):
def test_amendments(self):
amendment_json = {
"Majorities": [
{
"Majority": {
"Amendment": "1562511F573A19AE9BD103B5D6B9E01B3B46805AEC"
"5D3C4805C902B51"
"4399146",
"CloseTime": 535589001,
}
}
],
"Amendments": [
"42426C4D4F1009EE67080A9B7965B44656D7714D104A72F9B4369F97ABF044EE",
"4C97EBA926031A7CF7D7B36FDE3ED66DDA5421192D63DE53FFB46E43B9DC8373",
"6781F8368C4771B83E8B821D88F580202BCB4228075297B19E4FDC5233F1EFDC",
"740352F2412A9909880C23A559FCECEDA3BE2126FED62FC7660D628A06927F11",
],
"Flags": 0,
"LedgerEntryType": "Amendments",
"index": "7DB0788C020F02780A673DC74757F23823FA3014C1866E72CC4CD8B226CD6EF4",
}
actual = LedgerObject.from_xrpl(amendment_json)
expected = Amendments(
index="7DB0788C020F02780A673DC74757F23823FA3014C1866E72CC4CD8B226CD6EF4",
amendments=[
"42426C4D4F1009EE67080A9B7965B44656D7714D104A72F9B4369F97ABF044EE",
"4C97EBA926031A7CF7D7B36FDE3ED66DDA5421192D63DE53FFB46E43B9DC8373",
"6781F8368C4771B83E8B821D88F580202BCB4228075297B19E4FDC5233F1EFDC",
"740352F2412A9909880C23A559FCECEDA3BE2126FED62FC7660D628A06927F11",
],
majorities=[
Majority(
amendment="1562511F573A19AE9BD103B5D6B9E01B3B46805AEC5D3C"
"4805C902B514399146",
close_time=535589001,
)
],
)
self.assertEqual(actual, expected)
90 changes: 90 additions & 0 deletions tests/unit/models/ledger_objects/test_amm.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
from unittest import TestCase

from xrpl.models.amounts.issued_currency_amount import IssuedCurrencyAmount
from xrpl.models.auth_account import AuthAccount
from xrpl.models.currencies.issued_currency import IssuedCurrency
from xrpl.models.currencies.xrp import XRP
from xrpl.models.ledger_objects.amm import AMM, AuctionSlot, VoteEntry
from xrpl.models.ledger_objects.ledger_object import LedgerObject


class TestAMM(TestCase):
def test_amm(self):
amm_json = {
"Account": "rE54zDvgnghAoPopCgvtiqWNq3dU5y836S",
"Asset": {"currency": "XRP"},
"Asset2": {
"currency": "TST",
"issuer": "rP9jPyP5kyvFRb6ZiRghAGw5u8SGAmU4bd",
},
"AuctionSlot": {
"Account": "rJVUeRqDFNs2xqA7ncVE6ZoAhPUoaJJSQm",
"AuthAccounts": [
{"AuthAccount": {"Account": "rMKXGCbJ5d8LbrqthdG46q3f969MVK2Qeg"}},
{"AuthAccount": {"Account": "rBepJuTLFJt3WmtLXYAxSjtBWAeQxVbncv"}},
],
"DiscountedFee": 0,
"Expiration": 721870180,
"Price": {
"currency": "039C99CD9AB0B70B32ECDA51EAAE471625608EA2",
"issuer": "rE54zDvgnghAoPopCgvtiqWNq3dU5y836S",
"value": "0.8696263565463045",
},
},
"LPTokenBalance": {
"currency": "039C99CD9AB0B70B32ECDA51EAAE471625608EA2",
"issuer": "rE54zDvgnghAoPopCgvtiqWNq3dU5y836S",
"value": "71150.53584131501",
},
"TradingFee": 600,
"VoteSlots": [
{
"VoteEntry": {
"Account": "rJVUeRqDFNs2xqA7ncVE6ZoAhPUoaJJSQm",
"TradingFee": 600,
"VoteWeight": 100000,
}
}
],
"OwnerNode": "0",
"Flags": 0,
"LedgerEntryType": "AMM",
}
actual = LedgerObject.from_xrpl(amm_json)
expected = AMM(
account="rE54zDvgnghAoPopCgvtiqWNq3dU5y836S",
asset=XRP(),
asset2=IssuedCurrency(
currency="TST",
issuer="rP9jPyP5kyvFRb6ZiRghAGw5u8SGAmU4bd",
),
auction_slot=AuctionSlot(
account="rJVUeRqDFNs2xqA7ncVE6ZoAhPUoaJJSQm",
auth_accounts=[
AuthAccount(account="rMKXGCbJ5d8LbrqthdG46q3f969MVK2Qeg"),
AuthAccount(account="rBepJuTLFJt3WmtLXYAxSjtBWAeQxVbncv"),
],
discounted_fee=0,
expiration=721870180,
price=IssuedCurrencyAmount(
currency="039C99CD9AB0B70B32ECDA51EAAE471625608EA2",
issuer="rE54zDvgnghAoPopCgvtiqWNq3dU5y836S",
value="0.8696263565463045",
),
),
owner_node="0",
lp_token_balance=IssuedCurrencyAmount(
currency="039C99CD9AB0B70B32ECDA51EAAE471625608EA2",
issuer="rE54zDvgnghAoPopCgvtiqWNq3dU5y836S",
value="71150.53584131501",
),
trading_fee=600,
vote_slots=[
VoteEntry(
account="rJVUeRqDFNs2xqA7ncVE6ZoAhPUoaJJSQm",
trading_fee=600,
vote_weight=100000,
),
],
)
self.assertEqual(actual, expected)
53 changes: 53 additions & 0 deletions tests/unit/models/ledger_objects/test_bridge.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
from unittest import TestCase

from xrpl.models.currencies.xrp import XRP
from xrpl.models.ledger_objects.bridge import Bridge
from xrpl.models.ledger_objects.ledger_object import LedgerObject
from xrpl.models.xchain_bridge import XChainBridge


class TestBridge(TestCase):
def test_bridge(self):
bridge_json = {
"Account": "r3nCVTbZGGYoWvZ58BcxDmiMUU7ChMa1eC",
"Flags": 0,
"LedgerEntryType": "Bridge",
"MinAccountCreateAmount": "2000000000",
"OwnerNode": "0",
"PreviousTxnID": "67A8A1B36C1B97BE3AAB6B19CB3A3069034877DE"
"917FD1A71919EAE7548E56"
"36",
"PreviousTxnLgrSeq": 102,
"SignatureReward": "204",
"XChainAccountClaimCount": "0",
"XChainAccountCreateCount": "0",
"XChainBridge": {
"IssuingChainDoor": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"IssuingChainIssue": {"currency": "XRP"},
"LockingChainDoor": "r3nCVTbZGGYoWvZ58BcxDmiMUU7ChMa1eC",
"LockingChainIssue": {"currency": "XRP"},
},
"XChainClaimID": "1",
"index": "9F2C9E23343852036AFD323025A8506018ABF9D4DBAA746D61BF1CFB5C297D10",
}
actual = LedgerObject.from_xrpl(bridge_json)
expected = Bridge(
account="r3nCVTbZGGYoWvZ58BcxDmiMUU7ChMa1eC",
min_account_create_amount="2000000000",
owner_node="0",
previous_txn_id="67A8A1B36C1B97BE3AAB6B19CB3A3069034877DE917FD1A71919EAE75"
"48E5636",
previous_txn_lgr_seq=102,
signature_reward="204",
xchain_account_claim_count="0",
xchain_account_create_count="0",
xchain_bridge=XChainBridge(
issuing_chain_door="rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
issuing_chain_issue=XRP(),
locking_chain_door="r3nCVTbZGGYoWvZ58BcxDmiMUU7ChMa1eC",
locking_chain_issue=XRP(),
),
xchain_claim_id="1",
index="9F2C9E23343852036AFD323025A8506018ABF9D4DBAA746D61BF1CFB5C297D10",
)
self.assertEqual(actual, expected)
44 changes: 44 additions & 0 deletions tests/unit/models/ledger_objects/test_check.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
from unittest import TestCase

from xrpl.models.ledger_objects.check import Check
from xrpl.models.ledger_objects.ledger_object import LedgerObject


class TestCheck(TestCase):
def test_check(self):
check_json = {
"Account": "rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo",
"Destination": "rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy",
"DestinationNode": "0000000000000000",
"DestinationTag": 1,
"Expiration": 570113521,
"Flags": 0,
"InvoiceID": "46060241FABCF692D4D934BA2A6C4427CD4279083E3"
"8C77CBE642243E43BE291",
"LedgerEntryType": "Check",
"OwnerNode": "0000000000000000",
"PreviousTxnID": "5463C6E08862A1FAE5EDAC12D70ADB16546A1F67"
"4930521295BC082494B62924",
"PreviousTxnLgrSeq": 6,
"SendMax": "100000000",
"Sequence": 2,
"index": "49647F0D748DC3FE26BDACBC57F251AADEFFF391403EC9BF87C97F67E9977FB0",
}
actual = LedgerObject.from_xrpl(check_json)
expected = Check(
index="49647F0D748DC3FE26BDACBC57F251AADEFFF391403EC9BF87C97F67E9977FB0",
account="rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo",
destination="rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy",
owner_node="0000000000000000",
previous_txn_id="5463C6E08862A1FAE5EDAC12D70ADB16546A"
"1F674930521295BC082494B62924",
previous_txn_lgr_seq=6,
send_max="100000000",
sequence=2,
destination_node="0000000000000000",
destination_tag=1,
expiration=570113521,
invoice_id="46060241FABCF692D4D934BA2A6C4427CD427"
"9083E38C77CBE642243E43BE291",
)
self.assertEqual(actual, expected)
30 changes: 30 additions & 0 deletions tests/unit/models/ledger_objects/test_deposit_preauth.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
from unittest import TestCase

from xrpl.models.ledger_objects.deposit_preauth import DepositPreauth
from xrpl.models.ledger_objects.ledger_object import LedgerObject


class TestDepositPreauth(TestCase):
def test_deposit_preauth(self):
deposit_preauth_json = {
"LedgerEntryType": "DepositPreauth",
"Account": "rsUiUMpnrgxQp24dJYZDhmV4bE3aBtQyt8",
"Authorize": "rEhxGqkqPPSxQ3P25J66ft5TwpzV14k2de",
"Flags": 0,
"OwnerNode": "0000000000000000",
"PreviousTxnID": "3E8964D5A86B3CD6B9ECB33310D4E073D64C865A5B866200"
"AD2B7E29F8326702",
"PreviousTxnLgrSeq": 7,
"index": "4A255038CC3ADCC1A9C91509279B59908251728D0DAADB248FFE297D0F7E068C",
}
actual = LedgerObject.from_xrpl(deposit_preauth_json)
expected = DepositPreauth(
index="4A255038CC3ADCC1A9C91509279B59908251728D0DAADB248FFE297D0F7E068C",
account="rsUiUMpnrgxQp24dJYZDhmV4bE3aBtQyt8",
authorize="rEhxGqkqPPSxQ3P25J66ft5TwpzV14k2de",
owner_node="0000000000000000",
previous_txn_id="3E8964D5A86B3CD6B9ECB33310D4E073D64C8"
"65A5B866200AD2B7E29F8326702",
previous_txn_lgr_seq=7,
)
self.assertEqual(actual, expected)
34 changes: 34 additions & 0 deletions tests/unit/models/ledger_objects/test_did.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
from unittest import TestCase

from xrpl.models.ledger_objects.did import DID
from xrpl.models.ledger_objects.ledger_object import LedgerObject


class TestDID(TestCase):
def test_did(self):
did_json = {
"Account": "rpfqJrXg5uidNo2ZsRhRY6TiF1cvYmV9Fg",
"DIDDocument": "646F63",
"Data": "617474657374",
"Flags": 0,
"LedgerEntryType": "DID",
"OwnerNode": "0",
"PreviousTxnID": "A4C15DA185E6092DF5954FF62A1446220C61A5F60F0D93B4B0"
"9F708778E41120",
"PreviousTxnLgrSeq": 4,
"URI": "6469645F6578616D706C65",
"index": "46813BE38B798B3752CA590D44E7FEADB17485649074403AD1761A2835CE91FF",
}
actual = LedgerObject.from_xrpl(did_json)
expected = DID(
account="rpfqJrXg5uidNo2ZsRhRY6TiF1cvYmV9Fg",
did_document="646F63",
data="617474657374",
owner_node="0",
previous_txn_id="A4C15DA185E6092DF5954FF62A1446220C61A5F60F0D93B4B09F"
"708778E41120",
previous_txn_lgr_seq=4,
uri="6469645F6578616D706C65",
index="46813BE38B798B3752CA590D44E7FEADB17485649074403AD1761A2835CE91FF",
)
self.assertEqual(actual, expected)
Loading
Loading