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

Cannot decode binary ledger_data #354

Open
MaxKh opened this issue Feb 4, 2022 · 2 comments
Open

Cannot decode binary ledger_data #354

MaxKh opened this issue Feb 4, 2022 · 2 comments
Labels
enhancement New feature or request

Comments

@MaxKh
Copy link

MaxKh commented Feb 4, 2022

xrpl-py 1.3.0

↪ ipython
/usr/lib/python3.10/site-packages/IPython/core/interactiveshell.py:949: UserWarning: Attempting to work in a virtualenv. If you encounter problems, please install IPython inside the virtualenv.
  warn(
Python 3.10.1 (main, Dec 18 2021, 23:53:45) [GCC 11.1.0]
Type 'copyright', 'credits' or 'license' for more information
IPython 7.31.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: %pdb
Automatic pdb calling has been turned ON

In [2]: from xrpl.clients import JsonRpcClient

In [3]: c = JsonRpcClient("https://s.altnet.rippletest.net:51234")

In [4]: from xrpl.models.requests import Ledger

In [5]: resp = c.request(Ledger(ledger_index=24971037, binary=True))

In [6]: resp
Out[6]: Response(status=<ResponseStatus.SUCCESS: 'success'>, result={'ledger': {'closed': True, 'ledger_data': '017D071D0163451A1E1577A3C28993D78514B970FB26919047661D842B2656D5301A1BF4C28A416C30DF76055CACBC703606B15684947BB51FECAA394EDCC71259900498A21AA8901C076664F1AF645987C24A6AAE23BB2936A5281A78E75A800A8BE5C5D97A4B6FE6E82745298E3A23298E3A240A00'}, 'ledger_hash': '1D4838E7515B20EDDBC7F68386797FEC2150604C423B66A3D19240756755AFE8', 'ledger_index': 24971037, 'validated': True}, id=None, type=<ResponseType.RESPONSE: 'response'>)

In [7]: from xrpl.core.binarycodec import decode

In [8]: decode(resp.result['ledger']['ledger_data'])
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-8-1f5de63ab726> in <module>
----> 1 decode(resp.result['ledger']['ledger_data'])

/tmp/xrpl/lib/python3.10/site-packages/xrpl/core/binarycodec/main.py in decode(buffer)
    109     """
    110     parser = BinaryParser(buffer)
--> 111     parsed_type = cast(SerializedDict, parser.read_type(SerializedDict))
    112     return parsed_type.to_json()
    113 

/tmp/xrpl/lib/python3.10/site-packages/xrpl/core/binarycodec/binary_wrappers/binary_parser.py in read_type(self, field_type)
    223             None
    224         """
--> 225         return field_type.from_parser(self, None)
    226 
    227     def read_field_value(self: BinaryParser, field: FieldInstance) -> SerializedType:

/tmp/xrpl/lib/python3.10/site-packages/xrpl/core/binarycodec/types/serialized_dict.py in from_parser(cls, parser, _length_hint)
    107 
    108         while not parser.is_end():
--> 109             field = parser.read_field()
    110             if field.name == _OBJECT_END_MARKER:
    111                 break

/tmp/xrpl/lib/python3.10/site-packages/xrpl/core/binarycodec/binary_wrappers/binary_parser.py in read_field(self)
    208         """
    209         field_header = self.read_field_header()
--> 210         field_name = definitions.get_field_name_from_header(field_header)
    211         return definitions.get_field_instance(field_name)
    212 

/tmp/xrpl/lib/python3.10/site-packages/xrpl/core/binarycodec/definitions/definitions.py in get_field_name_from_header(field_header)
    160         The name of the field described by the given FieldHeader.
    161     """
--> 162     return _FIELD_HEADER_NAME_MAP[field_header]
    163 
    164 

KeyError: <xrpl.core.binarycodec.definitions.field_header.FieldHeader object at 0x7f8b649e3010>
> /tmp/xrpl/lib/python3.10/site-packages/xrpl/core/binarycodec/definitions/definitions.py(162)get_field_name_from_header()
    160         The name of the field described by the given FieldHeader.
    161     """
--> 162     return _FIELD_HEADER_NAME_MAP[field_header]
    163 
    164 

ipdb> field_header.field_code
1
ipdb> field_header.type_code
125
@mvadari
Copy link
Collaborator

mvadari commented Feb 7, 2022

@mvadari
Copy link
Collaborator

mvadari commented Feb 7, 2022

We don't currently have support for decoding ledger data in Python. Here is the equivalent function for JS: https://github.com/XRPLF/xrpl.js/blob/main/packages/ripple-binary-codec/src/ledger-hashes.ts#L165

@mvadari mvadari added the enhancement New feature or request label Feb 7, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants