From d8e61625cfdafc16a1bd5a574576613bd3ef7e33 Mon Sep 17 00:00:00 2001 From: Geoff Taylor Date: Thu, 6 Jan 2022 16:34:18 +0000 Subject: [PATCH] Preliminary use of DataFrame calculations on Accounts. --- .flake8 | 2 +- bin/show-account-dataframe | 54 +++ mango/__init__.py | 1 + mango/account.py | 309 +++++++++++++++++- mango/group.py | 22 +- mango/lotsizeconverter.py | 11 +- mango/openorders.py | 5 +- mango/perpaccount.py | 52 +-- tests/calculations/test_healthcalculator.py | 39 ++- tests/data.py | 8 +- tests/test_account.py | 62 ++++ tests/test_group.py | 60 ++++ tests/test_healthcalculator.py | 203 ++++++++++++ .../{openorders0.json => openorders3.json} | 0 .../{openorders1.json => openorders6.json} | 0 .../{openorders2.json => openorders7.json} | 0 .../{openorders0.json => openorders2.json} | 0 .../{openorders1.json => openorders3.json} | 0 .../account.json | 0 .../cache.json | 0 .../group.json | 0 .../regenerate | 0 .../AccountPanel.png | Bin .../account.json | 0 .../cache.json | 0 .../group.json | 0 .../regenerate | 0 tests/testdata/account5/account.json | 11 + tests/testdata/account5/cache.json | 11 + tests/testdata/account5/group.json | 11 + tests/testdata/account5/openorders0.json | 11 + tests/testdata/account5/openorders1.json | 11 + tests/testdata/account5/openorders2.json | 11 + tests/testdata/account5/openorders3.json | 11 + tests/testdata/account5/openorders8.json | 11 + tests/testdata/account5/regenerate | 13 + tests/testdata/account6/account.json | 11 + tests/testdata/account6/cache.json | 11 + tests/testdata/account6/group.json | 11 + tests/testdata/account6/openorders0.json | 11 + tests/testdata/account6/openorders1.json | 11 + tests/testdata/account6/openorders2.json | 11 + tests/testdata/account6/openorders3.json | 11 + tests/testdata/account6/openorders8.json | 11 + tests/testdata/account6/regenerate | 13 + 45 files changed, 974 insertions(+), 56 deletions(-) create mode 100755 bin/show-account-dataframe create mode 100644 tests/test_healthcalculator.py rename tests/testdata/account1/{openorders0.json => openorders3.json} (100%) rename tests/testdata/account1/{openorders1.json => openorders6.json} (100%) rename tests/testdata/account1/{openorders2.json => openorders7.json} (100%) rename tests/testdata/account2/{openorders0.json => openorders2.json} (100%) rename tests/testdata/account2/{openorders1.json => openorders3.json} (100%) rename tests/testdata/{perp_account_no_spot_openorders => account3}/account.json (100%) rename tests/testdata/{perp_account_no_spot_openorders => account3}/cache.json (100%) rename tests/testdata/{perp_account_no_spot_openorders => account3}/group.json (100%) rename tests/testdata/{perp_account_no_spot_openorders => account3}/regenerate (100%) rename tests/testdata/{perp_account_no_spot_openorders_unhealthy => account4}/AccountPanel.png (100%) rename tests/testdata/{perp_account_no_spot_openorders_unhealthy => account4}/account.json (100%) rename tests/testdata/{perp_account_no_spot_openorders_unhealthy => account4}/cache.json (100%) rename tests/testdata/{perp_account_no_spot_openorders_unhealthy => account4}/group.json (100%) rename tests/testdata/{perp_account_no_spot_openorders_unhealthy => account4}/regenerate (100%) create mode 100644 tests/testdata/account5/account.json create mode 100644 tests/testdata/account5/cache.json create mode 100644 tests/testdata/account5/group.json create mode 100644 tests/testdata/account5/openorders0.json create mode 100644 tests/testdata/account5/openorders1.json create mode 100644 tests/testdata/account5/openorders2.json create mode 100644 tests/testdata/account5/openorders3.json create mode 100644 tests/testdata/account5/openorders8.json create mode 100755 tests/testdata/account5/regenerate create mode 100644 tests/testdata/account6/account.json create mode 100644 tests/testdata/account6/cache.json create mode 100644 tests/testdata/account6/group.json create mode 100644 tests/testdata/account6/openorders0.json create mode 100644 tests/testdata/account6/openorders1.json create mode 100644 tests/testdata/account6/openorders2.json create mode 100644 tests/testdata/account6/openorders3.json create mode 100644 tests/testdata/account6/openorders8.json create mode 100755 tests/testdata/account6/regenerate diff --git a/.flake8 b/.flake8 index 19435868..645f4979 100644 --- a/.flake8 +++ b/.flake8 @@ -1,5 +1,5 @@ [flake8] -ignore = D203 +ignore = D203,W503 exclude = .venv,.git,__pycache__,.ipynb_checkpoints,docs per-file-ignores = # imported but unused diff --git a/bin/show-account-dataframe b/bin/show-account-dataframe new file mode 100755 index 00000000..609eaa8e --- /dev/null +++ b/bin/show-account-dataframe @@ -0,0 +1,54 @@ +#!/usr/bin/env python3 + +import argparse +import os +import os.path +import pandas +import sys +import typing + +from solana.publickey import PublicKey + +sys.path.insert(0, os.path.abspath( + os.path.join(os.path.dirname(__file__), ".."))) +import mango # nopep8 + +parser = argparse.ArgumentParser(description="Display the balances of all group tokens in the current wallet.") +mango.ContextBuilder.add_command_line_parameters(parser) +mango.Wallet.add_command_line_parameters(parser) +parser.add_argument("--address", type=PublicKey, + help="Root address to check (if not provided, the wallet address is used)") +args: argparse.Namespace = mango.parse_args(parser) + +address: typing.Optional[PublicKey] = args.address +if address is None: + wallet = mango.Wallet.from_command_line_parameters_or_raise(args) + address = wallet.address + +context: mango.Context = mango.ContextBuilder.from_command_line_parameters(args) +group: mango.Group = mango.Group.load(context) +cache: mango.Cache = mango.Cache.load(context, group.cache) + +address_account_info: typing.Optional[mango.AccountInfo] = mango.AccountInfo.load(context, address) +if address_account_info is None: + raise Exception(f"Could not load account data from address {address}") + +mango_accounts: typing.Sequence[mango.Account] +if len(address_account_info.data) == mango.layouts.MANGO_ACCOUNT.sizeof(): + mango_accounts = [mango.Account.parse(address_account_info, group, cache)] +else: + mango_accounts = mango.Account.load_all_for_owner(context, address, group) + +for account in mango_accounts: + print("\n⚠ WARNING! ⚠ This is a work-in-progress and these figures may be wrong!\n") + pandas.set_option('display.max_columns', None) + pandas.set_option('display.width', None) + pandas.set_option('precision', 6) + + open_orders: typing.Dict[str, mango.OpenOrders] = account.load_all_spot_open_orders(context) + frame: pandas.DataFrame = account.to_dataframe(group, open_orders, cache) + print(frame) + + print("Init Health:", account.init_health(frame)) + print("Maint Health:", account.maint_health(frame)) + print("Total Value:", account.total_value(frame)) diff --git a/mango/__init__.py b/mango/__init__.py index 7098bf77..7c30b20f 100644 --- a/mango/__init__.py +++ b/mango/__init__.py @@ -42,6 +42,7 @@ from .client import TransactionException as TransactionException from .combinableinstructions import CombinableInstructions as CombinableInstructions from .constants import MangoConstants as MangoConstants +from .constants import DATA_PATH as DATA_PATH from .constants import SOL_DECIMAL_DIVISOR as SOL_DECIMAL_DIVISOR from .constants import SOL_DECIMALS as SOL_DECIMALS from .constants import SOL_MINT_ADDRESS as SOL_MINT_ADDRESS diff --git a/mango/account.py b/mango/account.py index df5c60ee..24a72384 100644 --- a/mango/account.py +++ b/mango/account.py @@ -13,6 +13,7 @@ # [Github](https://github.com/blockworks-foundation) # [Email](mailto:hello@blockworks.foundation) +import pandas import typing from decimal import Decimal @@ -21,10 +22,10 @@ from .accountinfo import AccountInfo from .addressableaccount import AddressableAccount -from .cache import Cache, RootBankCache +from .cache import Cache, PerpMarketCache, RootBankCache, MarketCache from .context import Context from .encoding import encode_key -from .group import Group +from .group import Group, GroupSlot, GroupSlotPerpMarket from .instrumentvalue import InstrumentValue from .layouts import layouts from .metadata import Metadata @@ -67,7 +68,7 @@ def __str__(self) -> str: perp_account: str = "None" if self.perp_account is not None: perp_account = f"{self.perp_account}".replace("\n", "\n ") - return f"""« AccountSlot {self.base_instrument.symbol} + return f"""« AccountSlot [{self.index}] {self.base_instrument.symbol} Net Value: {self.net_value} Deposited: {self.deposit} (raw value: {self.raw_deposit}) Borrowed: {self.borrow} (raw value {self.raw_borrow}) @@ -85,6 +86,14 @@ def __repr__(self) -> str: # `Account` holds information about the account for a particular user/wallet for a particualr `Group`. # class Account(AddressableAccount): + @staticmethod + def __sum_neg(dataframe: pandas.DataFrame, name: str) -> Decimal: + return typing.cast(Decimal, dataframe.loc[dataframe[name] < 0, name].sum()) + + @staticmethod + def __sum_pos(dataframe: pandas.DataFrame, name: str) -> Decimal: + return typing.cast(Decimal, dataframe.loc[dataframe[name] > 0, name].sum()) + def __init__(self, account_info: AccountInfo, version: Version, meta_data: Metadata, group_name: str, group_address: PublicKey, owner: PublicKey, info: str, shared_quote: AccountSlot, @@ -370,6 +379,300 @@ def update_spot_open_orders_for_market(self, spot_market_index: int, spot_open_o raise Exception(f"Could not find AccountBasketItem in Account {self.address} at index {spot_market_index}.") item_to_update.spot_open_orders = spot_open_orders + def to_dataframe(self, group: Group, all_spot_open_orders: typing.Dict[str, OpenOrders], cache: Cache) -> pandas.DataFrame: + asset_data = [] + for slot in self.slots: + market_cache: typing.Optional[MarketCache] = group.market_cache_from_cache_or_none( + cache, slot.base_instrument) + price: InstrumentValue = group.token_price_from_cache(cache, slot.base_instrument) + + spot_open_orders: typing.Optional[OpenOrders] = None + spot_health_base: Decimal = Decimal(0) + spot_health_quote: Decimal = Decimal(0) + spot_bids_base_net: Decimal = Decimal(0) + spot_asks_base_net: Decimal = Decimal(0) + if slot.spot_open_orders is not None: + spot_open_orders = all_spot_open_orders[str(slot.spot_open_orders)] + if spot_open_orders is None: + raise Exception(f"OpenOrders address {slot.spot_open_orders} at index {slot.index} not loaded.") + + # base total if all bids were executed + spot_bids_base_net = slot.net_value.value + \ + (spot_open_orders.quote_token_locked / price.value) + spot_open_orders.base_token_total + + # base total if all asks were executed + spot_asks_base_net = slot.net_value.value + spot_open_orders.base_token_free + + if abs(spot_bids_base_net) > abs(spot_asks_base_net): + spot_health_base = spot_bids_base_net + spot_health_quote = spot_open_orders.quote_token_free + else: + spot_health_base = spot_asks_base_net + spot_health_quote = (spot_open_orders.base_token_locked * price.value) + \ + spot_open_orders.quote_token_total + + # From Daffy in Discord 2021-11-23: https://discord.com/channels/791995070613159966/857699200279773204/912705017767677982 + # -- + # There's a long_funding field on the PerpMarketCache which holds the current native USDC per + # base position accrued. The long_settled_funding stores the last time funding was settled for + # this particular user. So the funding owed is + # (PerpMarketCache.long_funding - PerpAccount.long_settled_funding) * PerpAccount.base_position + # if base position greater than 0 (i.e. long) + # + # And we use short_funding if base_position < 0 + # + # The long_funding field in PerpMarketCache changes across time according to the + # update_funding() function. If orderbook is above index price, then long_funding and + # short_funding both increase. + # + # Usually long_funding and short_funding will be the same unless there was a socialized loss + # event. IF you have negative equity and insurance fund is empty, then half of the negative + # equity goes to longs and half goes to shorts. The way that's done is by increasing + # long_funding and decreasing short_funding by same amount. + # + # But unless there's a socialized loss, long_funding == short_funding + # -- + perp_position: Decimal = Decimal(0) + perp_notional_position: Decimal = Decimal(0) + perp_value: Decimal = Decimal(0) + perp_health_base: Decimal = Decimal(0) + perp_health_quote: Decimal = Decimal(0) + unsettled_funding: Decimal = Decimal(0) + perp_health_base_value: Decimal = Decimal(0) + perp_asset: Decimal = Decimal(0) + perp_liability: Decimal = Decimal(0) + perp_current_value: Decimal = Decimal(0) + if slot.perp_account is not None and not slot.perp_account.empty and market_cache is not None: + perp_market: typing.Optional[GroupSlotPerpMarket] = group.perp_markets_by_index[slot.index] + if perp_market is None: + raise Exception(f"Could not find perp market in Group at index {slot.index}.") + + perp_position = slot.perp_account.lot_size_converter.base_size_lots_to_number( + slot.perp_account.base_position) + perp_notional_position = perp_position * price.value + perp_value = slot.perp_account.quote_position_raw + cached_perp_market: typing.Optional[PerpMarketCache] = market_cache.perp_market + if cached_perp_market is None: + raise Exception(f"Could not find perp market in Cache at index {slot.index}.") + + unsettled_funding = slot.perp_account.unsettled_funding(cached_perp_market) + bids_quantity = slot.perp_account.lot_size_converter.base_size_lots_to_number( + slot.perp_account.bids_quantity) + asks_quantity = slot.perp_account.lot_size_converter.base_size_lots_to_number( + slot.perp_account.asks_quantity) + taker_quote = slot.perp_account.lot_size_converter.quote_size_lots_to_number( + slot.perp_account.taker_quote) + + perp_bids_base_net: Decimal = perp_position + bids_quantity + perp_asks_base_net: Decimal = perp_position - asks_quantity + + perp_asset = slot.perp_account.asset_value(cached_perp_market, price.value) + perp_liability = slot.perp_account.liability_value(cached_perp_market, price.value) + perp_current_value = slot.perp_account.current_value(cached_perp_market, price.value) + + quote_pos = slot.perp_account.quote_position / (10 ** self.shared_quote_token.decimals) + if abs(perp_bids_base_net) > abs(perp_asks_base_net): + perp_health_base = perp_bids_base_net + perp_health_quote = (quote_pos + unsettled_funding) + \ + taker_quote - (bids_quantity * price.value) + else: + perp_health_base = perp_asks_base_net + perp_health_quote = (quote_pos + unsettled_funding) + \ + taker_quote + (asks_quantity * price.value) + perp_health_base_value = perp_health_base * price.value + + group_slot: typing.Optional[GroupSlot] = None + if market_cache is not None: + group_slot = group.slot_by_instrument(slot.base_instrument) + + spot_init_asset_weight: Decimal = Decimal(0) + spot_maint_asset_weight: Decimal = Decimal(0) + spot_init_liab_weight: Decimal = Decimal(0) + spot_maint_liab_weight: Decimal = Decimal(0) + if group_slot is not None and group_slot.spot_market is not None: + spot_init_asset_weight = group_slot.spot_market.init_asset_weight + spot_maint_asset_weight = group_slot.spot_market.maint_asset_weight + spot_init_liab_weight = group_slot.spot_market.init_liab_weight + spot_maint_liab_weight = group_slot.spot_market.maint_liab_weight + elif slot.base_instrument == self.shared_quote_token: + spot_init_asset_weight = Decimal(1) + spot_maint_asset_weight = Decimal(1) + spot_init_liab_weight = Decimal(1) + spot_maint_liab_weight = Decimal(1) + + perp_init_asset_weight: Decimal = Decimal(0) + perp_maint_asset_weight: Decimal = Decimal(0) + perp_init_liab_weight: Decimal = Decimal(0) + perp_maint_liab_weight: Decimal = Decimal(0) + if group_slot is not None and group_slot.perp_market is not None: + perp_init_asset_weight = group_slot.perp_market.init_asset_weight + perp_maint_asset_weight = group_slot.perp_market.maint_asset_weight + perp_init_liab_weight = group_slot.perp_market.init_liab_weight + perp_maint_liab_weight = group_slot.perp_market.maint_liab_weight + elif slot.base_instrument == self.shared_quote_token: + perp_init_asset_weight = Decimal(1) + perp_maint_asset_weight = Decimal(1) + perp_init_liab_weight = Decimal(1) + perp_maint_liab_weight = Decimal(1) + + base_open_unsettled: Decimal = Decimal(0) + base_open_locked: Decimal = Decimal(0) + base_open_total: Decimal = Decimal(0) + quote_open_unsettled: Decimal = Decimal(0) + quote_open_locked: Decimal = Decimal(0) + if spot_open_orders is not None: + base_open_unsettled = spot_open_orders.base_token_free + base_open_locked = spot_open_orders.base_token_locked + base_open_total = spot_open_orders.base_token_total + quote_open_unsettled = (spot_open_orders.quote_token_free + + spot_open_orders.referrer_rebate_accrued) + quote_open_locked = spot_open_orders.quote_token_locked + base_total: Decimal = slot.deposit.value - slot.borrow.value + base_open_total + base_total_value: Decimal = base_total * price.value + spot_init_value: Decimal + spot_maint_value: Decimal + if base_total_value >= 0: + spot_init_value = base_total_value * spot_init_asset_weight + spot_maint_value = base_total_value * spot_maint_asset_weight + else: + spot_init_value = base_total_value * spot_init_liab_weight + spot_maint_value = base_total_value * spot_maint_liab_weight + perp_init_value: Decimal + perp_maint_value: Decimal + if perp_health_base >= 0: + perp_init_value = perp_notional_position * perp_init_asset_weight + perp_maint_value = perp_notional_position * perp_maint_asset_weight + perp_init_health_base_value = perp_health_base_value * perp_init_asset_weight + perp_maint_health_base_value = perp_health_base_value * perp_maint_asset_weight + else: + perp_init_value = perp_notional_position * perp_init_liab_weight + perp_maint_value = perp_notional_position * perp_maint_liab_weight + perp_init_health_base_value = perp_health_base_value * perp_init_liab_weight + perp_maint_health_base_value = perp_health_base_value * perp_maint_liab_weight + data = { + "Name": slot.base_instrument.name, + "Symbol": slot.base_instrument.symbol, + "Spot": base_total, + "SpotDeposit": slot.deposit.value, + "SpotBorrow": slot.borrow.value, + "SpotValue": base_total_value, + "SpotInitValue": spot_init_value, + "SpotMaintValue": spot_maint_value, + "PerpInitValue": perp_init_value, + "PerpMaintValue": perp_maint_value, + "BaseUnsettled": base_open_unsettled, + "BaseLocked": base_open_locked, + "QuoteUnsettled": quote_open_unsettled, + "QuoteLocked": quote_open_locked, + "PerpPositionSize": perp_position, + "PerpNotionalPositionSize": perp_notional_position, + "PerpValue": perp_value, + "UnsettledFunding": unsettled_funding, + "SpotInitAssetWeight": spot_init_asset_weight, + "SpotMaintAssetWeight": spot_maint_asset_weight, + "SpotInitLiabilityWeight": spot_init_liab_weight, + "SpotMaintLiabilityWeight": spot_maint_liab_weight, + "PerpInitAssetWeight": perp_init_asset_weight, + "PerpMaintAssetWeight": perp_maint_asset_weight, + "PerpInitLiabilityWeight": perp_init_liab_weight, + "PerpMaintLiabilityWeight": perp_maint_liab_weight, + "SpotHealthBase": spot_health_base, + "SpotHealthQuote": spot_health_quote, + "PerpHealthBase": perp_health_base, + "PerpHealthBaseValue": perp_health_base_value, + "PerpInitHealthBaseValue": perp_init_health_base_value, + "PerpMaintHealthBaseValue": perp_maint_health_base_value, + "PerpHealthQuote": perp_health_quote, + "PerpAsset": perp_asset, + "PerpLiability": perp_liability, + "PerpCurrentValue": perp_current_value, + } + asset_data += [data] + frame: pandas.DataFrame = pandas.DataFrame(asset_data) + return frame + + def weighted_assets(self, frame: pandas.DataFrame, weighting_name: str = "", include_unsettled_quote: bool = False) -> typing.Tuple[Decimal, Decimal]: + non_quote = frame.loc[frame["Symbol"] != self.shared_quote_token.symbol] + quote = frame.loc[frame["Symbol"] == self.shared_quote_token.symbol, "SpotValue"].sum() + quote += frame["PerpHealthQuote"].sum() + + assets = Decimal(0) + liabilities = Decimal(0) + if quote > 0: + assets = quote + else: + liabilities = quote + + if include_unsettled_quote: + assets += frame["QuoteUnsettled"].sum() + + spot_value_key = f"Spot{weighting_name}Value" + perp_value_key = f"Perp{weighting_name}HealthBaseValue" + + liabilities += Account.__sum_neg(non_quote, spot_value_key) + Account.__sum_neg(non_quote, perp_value_key) + assets += Account.__sum_pos(non_quote, spot_value_key) + Account.__sum_pos(non_quote, perp_value_key) + + return assets, liabilities + + def unweighted_assets(self, frame: pandas.DataFrame) -> typing.Tuple[Decimal, Decimal]: + non_quote = frame.loc[frame["Symbol"] != self.shared_quote_token.symbol] + quote = frame.loc[frame["Symbol"] == self.shared_quote_token.symbol, "SpotValue"].sum() + + assets = Decimal(0) + liabilities = Decimal(0) + if quote > 0: + assets = quote + else: + liabilities = quote + + liabilities += Account.__sum_neg(non_quote, "SpotValue") + non_quote['PerpLiability'].sum() + + assets += Account.__sum_pos(non_quote, "SpotValue") + \ + non_quote['PerpAsset'].sum() + \ + Account.__sum_pos(non_quote, "QuoteUnsettled") + + return assets, liabilities + + def init_health(self, frame: pandas.DataFrame) -> Decimal: + assets, liabilities = self.weighted_assets(frame, "Init", include_unsettled_quote=False) + return assets + liabilities + + def maint_health(self, frame: pandas.DataFrame) -> Decimal: + assets, liabilities = self.weighted_assets(frame, "Maint", include_unsettled_quote=False) + return assets + liabilities + + def init_health_ratio(self, frame: pandas.DataFrame) -> Decimal: + assets, liabilities = self.weighted_assets(frame, "Init", include_unsettled_quote=False) + if liabilities == 0: + return Decimal(100) + + return ((assets / -liabilities) - 1) * 100 + + def maint_health_ratio(self, frame: pandas.DataFrame) -> Decimal: + assets, liabilities = self.weighted_assets(frame, "Maint", include_unsettled_quote=False) + if liabilities == 0: + return Decimal(100) + + return ((assets / -liabilities) - 1) * 100 + + def total_value(self, frame: pandas.DataFrame) -> Decimal: + assets, liabilities = self.unweighted_assets(frame) + + return assets + liabilities + + def is_liquidatable(self, frame: pandas.DataFrame) -> bool: + if self.being_liquidated and self.init_health(frame) < 0: + return True + elif self.init_health(frame) < 0: + return True + return False + + def leverage(self, frame: pandas.DataFrame) -> Decimal: + assets, liabilities = self.unweighted_assets(frame) + if assets <= 0: + return Decimal(0) + return -liabilities / (assets + liabilities) + def __str__(self) -> str: info = f"'{self.info}'" if self.info else "(un-named)" shared_quote: str = f"{self.shared_quote}".replace("\n", "\n ") diff --git a/mango/group.py b/mango/group.py index c2eeeecd..3026b7bb 100644 --- a/mango/group.py +++ b/mango/group.py @@ -293,9 +293,13 @@ def from_layout(layout: typing.Any, name: str, account_info: AccountInfo, versio raise Exception(f"Cannot find base token or perp market info for index {index}") perp_market = market_lookup.find_by_address(perp_market_info.address) if perp_market is None: - logging.warning(f"Group cannot find base token or perp market for index {index}") - else: - base_instrument = perp_market.base + in_slots += [False] + logging.warning( + f"Group cannot find base token or perp market for index {index} - {perp_market_info}") + continue + + base_instrument = perp_market.base + if perp_market_info is not None: perp_lot_size_converter = LotSizeConverter( base_instrument, perp_market_info.base_lot_size, quote_token_bank.token, perp_market_info.quote_lot_size) @@ -391,11 +395,19 @@ def perp_market_cache_from_cache(self, cache: Cache, token: Instrument) -> typin market_cache: MarketCache = self.market_cache_from_cache(cache, token) return market_cache.perp_market - def market_cache_from_cache(self, cache: Cache, instrument: Instrument) -> MarketCache: - slot: GroupSlot = self.slot_by_instrument(instrument) + def market_cache_from_cache_or_none(self, cache: Cache, instrument: Instrument) -> typing.Optional[MarketCache]: + slot: typing.Optional[GroupSlot] = self.slot_by_instrument_or_none(instrument) + if slot is None: + return None instrument_index: int = slot.index return cache.market_cache_for_index(instrument_index) + def market_cache_from_cache(self, cache: Cache, instrument: Instrument) -> MarketCache: + market_cache: typing.Optional[MarketCache] = self.market_cache_from_cache_or_none(cache, instrument) + if market_cache is not None: + return market_cache + raise Exception(f"Could not find market cache for instrument {instrument.symbol}") + def fetch_cache(self, context: Context) -> Cache: return Cache.load(context, self.cache) diff --git a/mango/lotsizeconverter.py b/mango/lotsizeconverter.py index af93f616..0cf0a571 100644 --- a/mango/lotsizeconverter.py +++ b/mango/lotsizeconverter.py @@ -35,10 +35,17 @@ def lot_size(self) -> Decimal: def tick_size(self) -> Decimal: return self.price_lots_to_number(Decimal(1)) - def price_lots_to_number(self, price_lots: Decimal) -> Decimal: + def adjust_to_base_decimals(self, value: Decimal) -> Decimal: adjusted = 10 ** (self.base.decimals - self.quote.decimals) + return value * adjusted + + def adjust_to_quote_decimals(self, value: Decimal) -> Decimal: + adjusted = 10 ** (self.quote.decimals - self.base.decimals) + return value * adjusted + + def price_lots_to_number(self, price_lots: Decimal) -> Decimal: lots_to_native = self.quote_lot_size / self.base_lot_size - return (price_lots * lots_to_native) * adjusted + return self.adjust_to_base_decimals(price_lots * lots_to_native) def price_number_to_lots(self, price: Decimal) -> int: base_factor: Decimal = 10 ** self.base.decimals diff --git a/mango/openorders.py b/mango/openorders.py index 58b17359..f84abd41 100644 --- a/mango/openorders.py +++ b/mango/openorders.py @@ -77,6 +77,7 @@ def from_layout(layout: typing.Any, account_info: AccountInfo, base_token_total: Decimal = layout.base_token_total / base_divisor quote_token_free: Decimal = layout.quote_token_free / quote_divisor quote_token_total: Decimal = layout.quote_token_total / quote_divisor + referrer_rebate_accrued: Decimal = layout.referrer_rebate_accrued / quote_divisor placed_orders: typing.Sequence[PlacedOrder] = [] if account_flags.initialized: @@ -84,7 +85,7 @@ def from_layout(layout: typing.Any, account_info: AccountInfo, layout.free_slot_bits, layout.is_bid_bits, layout.orders, layout.client_ids) return OpenOrders(account_info, Version.UNSPECIFIED, program_address, account_flags, layout.market, layout.owner, base_token_free, base_token_total, quote_token_free, - quote_token_total, placed_orders, layout.referrer_rebate_accrued) + quote_token_total, placed_orders, referrer_rebate_accrued) @staticmethod def parse(account_info: AccountInfo, base_decimals: Decimal, quote_decimals: Decimal) -> "OpenOrders": @@ -148,7 +149,7 @@ def __str__(self) -> str: Owner: {self.owner} Base Token: {self.base_token_free:,.8f} of {self.base_token_total:,.8f} Quote Token: {self.quote_token_free:,.8f} of {self.quote_token_total:,.8f} - Referrer Rebate Accrued: {self.referrer_rebate_accrued} + Referrer Rebate Accrued: {self.referrer_rebate_accrued:,.8f} Orders: {placed_orders} »""" diff --git a/mango/perpaccount.py b/mango/perpaccount.py index 9fd52ca2..00b22ec2 100644 --- a/mango/perpaccount.py +++ b/mango/perpaccount.py @@ -77,42 +77,52 @@ def empty(self) -> bool: return False def unsettled_funding(self, perp_market_cache: PerpMarketCache) -> Decimal: - if self.base_position < 0: - return self.base_position * (perp_market_cache.short_funding - self.short_settled_funding) + base_position: Decimal = self.base_position + unsettled: Decimal + if base_position < 0: + unsettled = base_position * (perp_market_cache.short_funding - self.short_settled_funding) else: - return self.base_position * (perp_market_cache.long_funding - self.long_settled_funding) + unsettled = base_position * (perp_market_cache.long_funding - self.long_settled_funding) + return - self.lot_size_converter.quote.shift_to_decimals(unsettled) def asset_value(self, perp_market_cache: PerpMarketCache, price: Decimal) -> Decimal: + base_position: Decimal = self.lot_size_converter.adjust_to_quote_decimals(self.base_position) value: Decimal = Decimal(0) - if self.base_position > 0: - value = self.base_position * self.lot_size_converter.base_lot_size * price - - quote_position: Decimal = self.quote_position - if self.base_position > 0: - quote_position -= (perp_market_cache.long_funding - self.long_settled_funding) * self.base_position - elif self.base_position < 0: - quote_position -= (perp_market_cache.short_funding - self.short_settled_funding) * self.base_position + if base_position > 0: + value = base_position * self.lot_size_converter.base_lot_size * price + value = self.lot_size_converter.quote.shift_to_decimals(value) + quote_position: Decimal = self.lot_size_converter.quote.shift_to_decimals(self.quote_position) + quote_position += self.unsettled_funding(perp_market_cache) if quote_position > 0: value += quote_position - return self.lot_size_converter.quote.shift_to_decimals(value) + return value def liability_value(self, perp_market_cache: PerpMarketCache, price: Decimal) -> Decimal: + base_position: Decimal = self.lot_size_converter.adjust_to_quote_decimals(self.base_position) value: Decimal = Decimal(0) - if self.base_position < 0: - value = self.base_position * self.lot_size_converter.base_lot_size * price - - quote_position: Decimal = self.quote_position - if self.base_position > 0: - quote_position -= (perp_market_cache.long_funding - self.long_settled_funding) * self.base_position - elif self.base_position < 0: - quote_position -= (perp_market_cache.short_funding - self.short_settled_funding) * self.base_position + if base_position < 0: + value = base_position * self.lot_size_converter.base_lot_size * price + value = self.lot_size_converter.quote.shift_to_decimals(value) + quote_position: Decimal = self.lot_size_converter.quote.shift_to_decimals(self.quote_position) + quote_position += self.unsettled_funding(perp_market_cache) if quote_position < 0: value += quote_position - return self.lot_size_converter.quote.shift_to_decimals(-value) + return value + + def current_value(self, perp_market_cache: PerpMarketCache, price: Decimal) -> Decimal: + base_position: Decimal = self.lot_size_converter.adjust_to_quote_decimals(self.base_position) + value: Decimal = base_position * self.lot_size_converter.base_lot_size * price + + quote_position: Decimal = self.lot_size_converter.quote.shift_to_decimals(self.quote_position) + quote_position += self.unsettled_funding(perp_market_cache) + + value += quote_position + + return self.lot_size_converter.quote.shift_to_decimals(value) def __str__(self) -> str: if self.empty: diff --git a/tests/calculations/test_healthcalculator.py b/tests/calculations/test_healthcalculator.py index 0407f686..d5aa5ddb 100644 --- a/tests/calculations/test_healthcalculator.py +++ b/tests/calculations/test_healthcalculator.py @@ -25,47 +25,46 @@ def test_1deposit() -> None: assert health == Decimal("37904.2600000591928892771752953600134") -def test_perp_account_no_spot_openorders() -> None: +def test_account1() -> None: context = fake_context() - group, cache, account, open_orders = load_data_from_directory("tests/testdata/perp_account_no_spot_openorders") + group, cache, account, open_orders = load_data_from_directory("tests/testdata/account1") actual = HealthCalculator(context, HealthType.INITIAL) health = actual.calculate(account, open_orders, group, cache) - - # Typescript says: 341025333625.51856223547208912805 + # Typescript says: 454884281.15520619643754685058 # TODO: This is significantly different from Typescript answer - assert health == Decimal("7036880.69722812395986194177339495613") + assert health == Decimal("2578453.62435039273978679178827388534") -def test_perp_account_no_spot_openorders_unhealthy() -> None: +def test_account2() -> None: context = fake_context() - group, cache, account, open_orders = load_data_from_directory( - "tests/testdata/perp_account_no_spot_openorders_unhealthy") + group, cache, account, open_orders = load_data_from_directory("tests/testdata/account2") actual = HealthCalculator(context, HealthType.INITIAL) health = actual.calculate(account, open_orders, group, cache) - # Typescript says: -848086876487.04950427436299875694 - # TODO: This is significantly different from Typescript answer - assert health == Decimal("1100318.49506000114695611699892507857") + # Typescript says: 7516159604.84918334545095675026 + # TODO: This is slightly different from Typescript answer + assert health == Decimal("-34471.8822627460347363357247598728190") -def test_account1() -> None: +def test_account3() -> None: context = fake_context() - group, cache, account, open_orders = load_data_from_directory("tests/testdata/account1") + group, cache, account, open_orders = load_data_from_directory("tests/testdata/account3") actual = HealthCalculator(context, HealthType.INITIAL) health = actual.calculate(account, open_orders, group, cache) - # Typescript says: 454884281.15520619643754685058 + + # Typescript says: 341025333625.51856223547208912805 # TODO: This is significantly different from Typescript answer - assert health == Decimal("2578453.62435039273978679178827388534") + assert health == Decimal("7036880.69722812395986194177339495613") -def test_account2() -> None: +def test_account4() -> None: context = fake_context() - group, cache, account, open_orders = load_data_from_directory("tests/testdata/account2") + group, cache, account, open_orders = load_data_from_directory("tests/testdata/account4") actual = HealthCalculator(context, HealthType.INITIAL) health = actual.calculate(account, open_orders, group, cache) - # Typescript says: 7516159604.84918334545095675026 - # TODO: This is slightly different from Typescript answer - assert health == Decimal("-34471.8822627460347363357247598728190") + # Typescript says: -848086876487.04950427436299875694 + # TODO: This is significantly different from Typescript answer + assert health == Decimal("1100318.49506000114695611699892507857") diff --git a/tests/data.py b/tests/data.py index 0abc0d66..f277d79c 100644 --- a/tests/data.py +++ b/tests/data.py @@ -9,9 +9,13 @@ def load_group(filename: str) -> mango.Group: account_info: mango.AccountInfo = mango.AccountInfo.load_json(filename) mainnet_token_lookup: mango.InstrumentLookup = mango.IdsJsonTokenLookup("mainnet", "mainnet.1") devnet_token_lookup: mango.InstrumentLookup = mango.IdsJsonTokenLookup("devnet", "devnet.2") + devnet_non_spl_instrument_lookup: mango.InstrumentLookup = mango.NonSPLInstrumentLookup.load( + mango.NonSPLInstrumentLookup.DefaultDevnetDataFilepath) instrument_lookup: mango.InstrumentLookup = mango.CompoundInstrumentLookup( - [mainnet_token_lookup, devnet_token_lookup]) - market_lookup: mango.MarketLookup = mango.NullMarketLookup() + [mainnet_token_lookup, devnet_token_lookup, devnet_non_spl_instrument_lookup]) + mainnet_market_lookup: mango.MarketLookup = mango.IdsJsonMarketLookup("mainnet", instrument_lookup) + devnet_market_lookup: mango.MarketLookup = mango.IdsJsonMarketLookup("devnet", instrument_lookup) + market_lookup: mango.MarketLookup = mango.CompoundMarketLookup([mainnet_market_lookup, devnet_market_lookup]) return mango.Group.parse(account_info, "devnet.2", instrument_lookup, market_lookup) diff --git a/tests/test_account.py b/tests/test_account.py index 9a87d6e7..e4ceb141 100644 --- a/tests/test_account.py +++ b/tests/test_account.py @@ -1,6 +1,7 @@ import pytest from .context import mango +from .data import load_data_from_directory from .fakes import fake_account_info, fake_seeded_public_key, fake_token_bank, fake_instrument, fake_instrument_value, fake_perp_account, fake_token from decimal import Decimal @@ -214,3 +215,64 @@ def test_slot_lookups() -> None: assert actual.slot_by_instrument(fake_instrument("slot3")) == slots[2] with pytest.raises(Exception): assert actual.slot_by_instrument(fake_instrument()) + + +def test_loaded_account_slot_lookups() -> None: + group, cache, account, open_orders = load_data_from_directory("tests/testdata/account5") + assert len(account.slots) == 14 + + # « GroupSlot[0] « Token [MNGO] 'MNGO' [Bb9bsTQa1bGEtQ5KagGkvSHyuLqDWumFUcRqFusFNJWC (6 decimals)] » + assert account.slots_by_index[0] is not None + assert account.slots_by_index[0].base_instrument.symbol == "MNGO" + + # « GroupSlot[1] « Token [BTC] 'BTC' [3UNBZ6o52WTWwjac2kPUb4FyodhU1vFkRJheu1Sh2TvU (6 decimals)] » + assert account.slots_by_index[1] is not None + assert account.slots_by_index[1].base_instrument.symbol == "BTC" + + # « GroupSlot[2] « Token [ETH] 'ETH' [Cu84KB3tDL6SbFgToHMLYVDJJXdJjenNzSKikeAvzmkA (6 decimals)] » + assert account.slots_by_index[2] is not None + assert account.slots_by_index[2].base_instrument.symbol == "ETH" + + # « GroupSlot[3] « Token [SOL] 'SOL' [So11111111111111111111111111111111111111112 (9 decimals)] » + assert account.slots_by_index[3] is not None + assert account.slots_by_index[3].base_instrument.symbol == "SOL" + + # « GroupSlot[4] « Token [SRM] 'SRM' [AvtB6w9xboLwA145E221vhof5TddhqsChYcx7Fy3xVMH (6 decimals)] » + assert account.slots_by_index[4] is not None + assert account.slots_by_index[4].base_instrument.symbol == "SRM" + + # « GroupSlot[5] « Token [RAY] 'RAY' [3YFQ7UYJ7sNGpXTKBxM3bYLVxKpzVudXAe4gLExh5b3n (6 decimals)] » + assert account.slots_by_index[5] is not None + assert account.slots_by_index[5].base_instrument.symbol == "RAY" + + # « GroupSlot[6] « Token [USDT] 'USDT' [DAwBSXe6w9g37wdE2tCrFbho3QHKZi4PjuBytQCULap2 (6 decimals)] » + assert account.slots_by_index[6] is not None + assert account.slots_by_index[6].base_instrument.symbol == "USDT" + + # « GroupSlot[7] « Instrument [ADA] 'Cardano' » + assert account.slots_by_index[7] is not None + assert account.slots_by_index[7].base_instrument.symbol == "ADA" + + # « GroupSlot[8] « Token [FTT] 'FTT' [Fxh4bpZnRCnpg2vcH11ttmSTDSEeC5qWbPRZNZWnRnqY (6 decimals)] » + assert account.slots_by_index[8] is not None + assert account.slots_by_index[8].base_instrument.symbol == "FTT" + + # « GroupSlot[9] « Instrument [AVAX] 'Avalanche' » + assert account.slots_by_index[9] is not None + assert account.slots_by_index[9].base_instrument.symbol == "AVAX" + + # « GroupSlot[10] « Instrument [LUNA] 'Terra' » + assert account.slots_by_index[10] is not None + assert account.slots_by_index[10].base_instrument.symbol == "LUNA" + + # « GroupSlot[11] « Instrument [BNB] 'Binance Coin' » + assert account.slots_by_index[11] is not None + assert account.slots_by_index[11].base_instrument.symbol == "BNB" + + # « GroupSlot[12] « Instrument [MATIC] 'Polygon' » + assert account.slots_by_index[12] is not None + assert account.slots_by_index[12].base_instrument.symbol == "MATIC" + assert account.slots_by_index[13] is None + assert account.slots_by_index[14] is None + assert account.slots_by_index[15] is not None + assert account.slots_by_index[15].base_instrument.symbol == "USDC" diff --git a/tests/test_group.py b/tests/test_group.py index 98a705d5..493eb497 100644 --- a/tests/test_group.py +++ b/tests/test_group.py @@ -2,6 +2,7 @@ import typing from .context import mango +from .data import load_group from .fakes import fake_account_info, fake_seeded_public_key, fake_token_bank, fake_instrument from decimal import Decimal @@ -195,3 +196,62 @@ def test_slot_lookups() -> None: assert actual.slot_by_instrument(fake_instrument("slot3")) == slot3 with pytest.raises(Exception): assert actual.slot_by_instrument(fake_instrument()) + + +def test_loaded_group_slot_lookups() -> None: + group = load_group("tests/testdata/account5/group.json") + assert len(group.slots) == 13 + + # « GroupSlot[0] « Token [MNGO] 'MNGO' [Bb9bsTQa1bGEtQ5KagGkvSHyuLqDWumFUcRqFusFNJWC (6 decimals)] » + assert group.slots_by_index[0] is not None + assert group.slots_by_index[0].base_instrument.symbol == "MNGO" + + # « GroupSlot[1] « Token [BTC] 'BTC' [3UNBZ6o52WTWwjac2kPUb4FyodhU1vFkRJheu1Sh2TvU (6 decimals)] » + assert group.slots_by_index[1] is not None + assert group.slots_by_index[1].base_instrument.symbol == "BTC" + + # « GroupSlot[2] « Token [ETH] 'ETH' [Cu84KB3tDL6SbFgToHMLYVDJJXdJjenNzSKikeAvzmkA (6 decimals)] » + assert group.slots_by_index[2] is not None + assert group.slots_by_index[2].base_instrument.symbol == "ETH" + + # « GroupSlot[3] « Token [SOL] 'SOL' [So11111111111111111111111111111111111111112 (9 decimals)] » + assert group.slots_by_index[3] is not None + assert group.slots_by_index[3].base_instrument.symbol == "SOL" + + # « GroupSlot[4] « Token [SRM] 'SRM' [AvtB6w9xboLwA145E221vhof5TddhqsChYcx7Fy3xVMH (6 decimals)] » + assert group.slots_by_index[4] is not None + assert group.slots_by_index[4].base_instrument.symbol == "SRM" + + # « GroupSlot[5] « Token [RAY] 'RAY' [3YFQ7UYJ7sNGpXTKBxM3bYLVxKpzVudXAe4gLExh5b3n (6 decimals)] » + assert group.slots_by_index[5] is not None + assert group.slots_by_index[5].base_instrument.symbol == "RAY" + + # « GroupSlot[6] « Token [USDT] 'USDT' [DAwBSXe6w9g37wdE2tCrFbho3QHKZi4PjuBytQCULap2 (6 decimals)] » + assert group.slots_by_index[6] is not None + assert group.slots_by_index[6].base_instrument.symbol == "USDT" + + # « GroupSlot[7] « Instrument [ADA] 'Cardano' » + assert group.slots_by_index[7] is not None + assert group.slots_by_index[7].base_instrument.symbol == "ADA" + + # « GroupSlot[8] « Token [FTT] 'FTT' [Fxh4bpZnRCnpg2vcH11ttmSTDSEeC5qWbPRZNZWnRnqY (6 decimals)] » + assert group.slots_by_index[8] is not None + assert group.slots_by_index[8].base_instrument.symbol == "FTT" + + # « GroupSlot[9] « Instrument [AVAX] 'Avalanche' » + assert group.slots_by_index[9] is not None + assert group.slots_by_index[9].base_instrument.symbol == "AVAX" + + # « GroupSlot[10] « Instrument [LUNA] 'Terra' » + assert group.slots_by_index[10] is not None + assert group.slots_by_index[10].base_instrument.symbol == "LUNA" + + # « GroupSlot[11] « Instrument [BNB] 'Binance Coin' » + assert group.slots_by_index[11] is not None + assert group.slots_by_index[11].base_instrument.symbol == "BNB" + + # « GroupSlot[12] « Instrument [MATIC] 'Polygon' » + assert group.slots_by_index[12] is not None + assert group.slots_by_index[12].base_instrument.symbol == "MATIC" + assert group.slots_by_index[13] is None + assert group.slots_by_index[14] is None diff --git a/tests/test_healthcalculator.py b/tests/test_healthcalculator.py new file mode 100644 index 00000000..96d8606f --- /dev/null +++ b/tests/test_healthcalculator.py @@ -0,0 +1,203 @@ +from .data import load_data_from_directory + +from decimal import Decimal + + +def test_empty() -> None: + group, cache, account, open_orders = load_data_from_directory("tests/testdata/empty") + frame = account.to_dataframe(group, open_orders, cache) + + # Typescript says: 0 + assert account.init_health(frame) == Decimal("0") + + # Typescript says: 0 + assert account.maint_health(frame) == Decimal("0") + + # Typescript says: 100 + assert account.init_health_ratio(frame) == Decimal("100") + + # Typescript says: 100 + assert account.maint_health_ratio(frame) == Decimal("100") + + # Typescript says: 0 + assert account.total_value(frame) == Decimal("0") + + # Typescript says: 0 + assert account.leverage(frame) == Decimal("0") + + assert not account.is_liquidatable(frame) + + +def test_1deposit() -> None: + group, cache, account, open_orders = load_data_from_directory("tests/testdata/1deposit") + frame = account.to_dataframe(group, open_orders, cache) + + # Typescript says: 37904260000.05905822642118252475 + assert account.init_health(frame) == Decimal("37904.2600000591928892771752953600134") + + # Typescript says: 42642292500.06652466908819931746 + assert account.maint_health(frame) == Decimal("42642.2925000665920004368222072800150") + + # Typescript says: 100 + assert account.init_health_ratio(frame) == Decimal("100") + + # Typescript says: 100 + assert account.maint_health_ratio(frame) == Decimal("100") + + # Typescript says: 47380.32499999999999928946 + assert account.total_value(frame) == Decimal("47380.3250000739911115964691192000167") + + # Typescript says: 0 + assert account.leverage(frame) == Decimal("0") + + assert not account.is_liquidatable(frame) + + +def test_account1() -> None: + group, cache, account, open_orders = load_data_from_directory("tests/testdata/account1") + frame = account.to_dataframe(group, open_orders, cache) + + # Typescript says: 454884281.15520619643754685058 + assert account.init_health(frame) == Decimal("454.88428115521887496581258174978975") + + # Typescript says: 901472688.63722587052636470162 + assert account.maint_health(frame) == Decimal("901.47268863723220971375597908220329") + + # Typescript says: 10.48860467608925262084 + assert account.init_health_ratio(frame) == Decimal("10.4886046760897514671034971997305770") + + # Typescript says: 20.785925232226531989 + assert account.maint_health_ratio(frame) == Decimal("20.7859252322269328739250898812969450") + + # Typescript says: 1348.25066158888197520582 + assert account.total_value(frame) == Decimal("1348.25066711924554446169937641461683") + + # Typescript says: 3.21671490144456129201 + assert account.leverage(frame) == Decimal("3.21671488765457268128834463982425497") + + assert not account.is_liquidatable(frame) + + +def test_account2() -> None: + group, cache, account, open_orders = load_data_from_directory("tests/testdata/account2") + frame = account.to_dataframe(group, open_orders, cache) + + # Typescript says: 7516159604.84918334545095675026 + assert account.init_health(frame) == Decimal("7516.1596048492430563556697582309637") + + # Typescript says: 9618709877.45119083596852505025 + assert account.maint_health(frame) == Decimal("9618.7098774512206992595893853316522") + + # Typescript says: 24.80680004365716229131 + assert account.init_health_ratio(frame) == Decimal("24.8068000436574936267384623925241840") + + # Typescript says: 31.74618756817508824497 + assert account.maint_health_ratio(frame) == Decimal("31.7461875681752057505441268626950890") + + # Typescript says: 11721.35669142618275273549 + assert account.total_value(frame) == Decimal("11721.3566920531983421635090124323407") + + # Typescript says: 3.56338611204225585993 + assert account.leverage(frame) == Decimal("3.56338611185164025806595342485346312") + + assert not account.is_liquidatable(frame) + + +def test_account3() -> None: + group, cache, account, open_orders = load_data_from_directory("tests/testdata/account3") + frame = account.to_dataframe(group, open_orders, cache) + + # Typescript says: 341025333625.51856223547208912805 + assert account.init_health(frame) == Decimal("341025.33362550396263557255539801613") + + # Typescript says: 683477170424.20340250929429970483 + assert account.maint_health(frame) == Decimal("683477.17042418393637609525383421613") + + # Typescript says: 4.52652018845647319267 + assert account.init_health_ratio(frame) == Decimal("4.52652018845639596719637165673707200") + + # Typescript says: 9.50397353076404272088 + assert account.maint_health_ratio(frame) == Decimal("9.50397353076384339420572268801026600") + + # Typescript says: 1025929.00722205438034961844 + assert account.total_value(frame) == Decimal("1025929.00722286391011661795227041613") + + # Typescript says: 6.50157472788435697453 + assert account.leverage(frame) == Decimal("6.50157472787922998475118662978475117") + + assert not account.is_liquidatable(frame) + + +def test_account4() -> None: + group, cache, account, open_orders = load_data_from_directory("tests/testdata/account4") + frame = account.to_dataframe(group, open_orders, cache) + + # Typescript says: -848086876487.04950427436299875694 + assert account.init_health(frame) == Decimal("-848086.87648706716344229365643382143") + + # Typescript says: -433869053006.07361789143756070075 + assert account.maint_health(frame) == Decimal("-433869.05300609716344867811565222143") + + # Typescript says: -9.30655353087566084014 + assert account.init_health_ratio(frame) == Decimal("-9.30655353087574422134411842983207950") + + # Typescript says: -4.98781798472691662028 + assert account.maint_health_ratio(frame) == Decimal("-4.98781798472697013664621930744313090") + + # Typescript says: -19651.22952604663374742699 + assert account.total_value(frame) == Decimal("-19651.22952512716345506257487062143") + + # Typescript says: -421.56937094643044972031 + assert account.leverage(frame) == Decimal("-421.569370966155451390856326152441566") + + assert account.is_liquidatable(frame) + + +def test_account5() -> None: + group, cache, account, open_orders = load_data_from_directory("tests/testdata/account5") + frame = account.to_dataframe(group, open_orders, cache) + + # Typescript says: 15144959918141.09175135195858530324 + assert account.init_health(frame) == Decimal("15144959.9164410924496111317578727438") + + # Typescript says: 15361719060997.68276021614036608298 + assert account.maint_health(frame) == Decimal("15361719.0592976820704356689151633723") + + # Typescript says: 878.88913077823325181726 + assert account.init_health_ratio(frame) == Decimal("878.88913067957806527629904156619986") + + # Typescript says: 946.44498820888003365326 + assert account.maint_health_ratio(frame) == Decimal("946.444988104139788226922265421512950") + + # Typescript says: 15578478.17337437202354522015 + assert account.total_value(frame) == Decimal("15578478.2038542716912602060724540009") + + # Typescript says: 0.09884076560217636143 + assert account.leverage(frame) == Decimal("0.0988407635236814851193291170841739152") + + assert not account.is_liquidatable(frame) + + +def test_account6() -> None: + group, cache, account, open_orders = load_data_from_directory("tests/testdata/account6") + frame = account.to_dataframe(group, open_orders, cache) + + # Typescript says: 14480970069238.33686487450164648294 + assert account.init_health(frame) == Decimal("14480970.0634253312566073701425189089") + + # Typescript says: 15030566251990.17026082618337312624 + assert account.maint_health(frame) == Decimal("15030566.2461771615291113644851708626") + + # Typescript says: 215.03167137712999590349 + assert account.init_health_ratio(frame) == Decimal("215.031671290810990079530587432245126") + + # Typescript says: 236.77769605824430243501 + assert account.maint_health_ratio(frame) == Decimal("236.777695966671229330674244231095279") + + # Typescript says: 15580162.40781940827396567784 + assert account.total_value(frame) == Decimal("15580162.4347419918016153588278228163") + + # Typescript says: 0.07913870989902704878 + assert account.leverage(frame) == Decimal("0.0791387081247153498553556005902933099") + + assert not account.is_liquidatable(frame) diff --git a/tests/testdata/account1/openorders0.json b/tests/testdata/account1/openorders3.json similarity index 100% rename from tests/testdata/account1/openorders0.json rename to tests/testdata/account1/openorders3.json diff --git a/tests/testdata/account1/openorders1.json b/tests/testdata/account1/openorders6.json similarity index 100% rename from tests/testdata/account1/openorders1.json rename to tests/testdata/account1/openorders6.json diff --git a/tests/testdata/account1/openorders2.json b/tests/testdata/account1/openorders7.json similarity index 100% rename from tests/testdata/account1/openorders2.json rename to tests/testdata/account1/openorders7.json diff --git a/tests/testdata/account2/openorders0.json b/tests/testdata/account2/openorders2.json similarity index 100% rename from tests/testdata/account2/openorders0.json rename to tests/testdata/account2/openorders2.json diff --git a/tests/testdata/account2/openorders1.json b/tests/testdata/account2/openorders3.json similarity index 100% rename from tests/testdata/account2/openorders1.json rename to tests/testdata/account2/openorders3.json diff --git a/tests/testdata/perp_account_no_spot_openorders/account.json b/tests/testdata/account3/account.json similarity index 100% rename from tests/testdata/perp_account_no_spot_openorders/account.json rename to tests/testdata/account3/account.json diff --git a/tests/testdata/perp_account_no_spot_openorders/cache.json b/tests/testdata/account3/cache.json similarity index 100% rename from tests/testdata/perp_account_no_spot_openorders/cache.json rename to tests/testdata/account3/cache.json diff --git a/tests/testdata/perp_account_no_spot_openorders/group.json b/tests/testdata/account3/group.json similarity index 100% rename from tests/testdata/perp_account_no_spot_openorders/group.json rename to tests/testdata/account3/group.json diff --git a/tests/testdata/perp_account_no_spot_openorders/regenerate b/tests/testdata/account3/regenerate similarity index 100% rename from tests/testdata/perp_account_no_spot_openorders/regenerate rename to tests/testdata/account3/regenerate diff --git a/tests/testdata/perp_account_no_spot_openorders_unhealthy/AccountPanel.png b/tests/testdata/account4/AccountPanel.png similarity index 100% rename from tests/testdata/perp_account_no_spot_openorders_unhealthy/AccountPanel.png rename to tests/testdata/account4/AccountPanel.png diff --git a/tests/testdata/perp_account_no_spot_openorders_unhealthy/account.json b/tests/testdata/account4/account.json similarity index 100% rename from tests/testdata/perp_account_no_spot_openorders_unhealthy/account.json rename to tests/testdata/account4/account.json diff --git a/tests/testdata/perp_account_no_spot_openorders_unhealthy/cache.json b/tests/testdata/account4/cache.json similarity index 100% rename from tests/testdata/perp_account_no_spot_openorders_unhealthy/cache.json rename to tests/testdata/account4/cache.json diff --git a/tests/testdata/perp_account_no_spot_openorders_unhealthy/group.json b/tests/testdata/account4/group.json similarity index 100% rename from tests/testdata/perp_account_no_spot_openorders_unhealthy/group.json rename to tests/testdata/account4/group.json diff --git a/tests/testdata/perp_account_no_spot_openorders_unhealthy/regenerate b/tests/testdata/account4/regenerate similarity index 100% rename from tests/testdata/perp_account_no_spot_openorders_unhealthy/regenerate rename to tests/testdata/account4/regenerate diff --git a/tests/testdata/account5/account.json b/tests/testdata/account5/account.json new file mode 100644 index 00000000..1571e14e --- /dev/null +++ b/tests/testdata/account5/account.json @@ -0,0 +1,11 @@ +{ + "address": "DRUZRfLQtki4ZYvRXhi5yGmyqCf6iMfTzxtBpxo6rbHu", + "executable": false, + "lamports": "30791040", + "owner": "4skJ85cdxQAFVKbcGgfun8iZPL7BadVYXG3kGEGkufqA", + "rent_epoch": "243", + "data": [ + "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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "base64" + ] +} \ No newline at end of file diff --git a/tests/testdata/account5/cache.json b/tests/testdata/account5/cache.json new file mode 100644 index 00000000..003e4672 --- /dev/null +++ b/tests/testdata/account5/cache.json @@ -0,0 +1,11 @@ +{ + "address": "8mFQbdXsFXt3R3cu3oSNS3bDZRwJRP18vyzd9J278J9z", + "executable": false, + "lamports": "12082560", + "owner": "4skJ85cdxQAFVKbcGgfun8iZPL7BadVYXG3kGEGkufqA", + "rent_epoch": "243", + "data": [ + "BwABAAAAAABlGeJYFzcAAAAAAAAAAAAA0NvSYQAAAAB+arx0kxjYuAAAAAAAAAAA0NvSYQAAAACSOgFNhF39DgAAAAAAAAAA0NvSYQAAAACtwJDVrSwAAAAAAAAAAAAA0NvSYQAAAACO5PIf0r8DAAAAAAAAAAAA0NvSYQAAAAAAAAAAAAABAAAAAAAAAAAA0NvSYQAAAADHuriNBgABAAAAAAAAAAAA0NvSYQAAAADKoUW2810BAAAAAAAAAAAA0NvSYQAAAABd3EYDeAMoAAAAAAAAAAAA0NvSYQAAAABqFE+LgxwAAAAAAAAAAAAA0NvSYQAAAAC9e2tToe8AAAAAAAAAAAAA0NvSYQAAAACTh4Va00wFAAAAAAAAAAAA0NvSYQAAAACMpBxNZwYAAAAAAAAAAAAA0NvSYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACr/bgr9pWKcg8AAAAAAAAAfW/KTOt5fn4PAAAAAAAAANDb0mEAAAAAYZZhSQrgaEIPAAAAAAAAADdFDYM84p1EDwAAAAAAAADQ29JhAAAAAIUYCms10rh3EAAAAAAAAABjeR6HoOFslhAAAAAAAAAA0NvSYQAAAACN6Klk1bUJWg8AAAAAAAAAsOB5MgF2tmQPAAAAAAAAANDb0mEAAAAA2JIjqa0IQEIPAAAAAAAAAEODgb9UekRCDwAAAAAAAADQ29JhAAAAADReISl/WkBCDwAAAAAAAAAsEmw4065AQg8AAAAAAAAA0NvSYQAAAAADJd1j+JAZRA8AAAAAAAAAV7iai6ZVnkQPAAAAAAAAANDb0mEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADssTaSyHEBCDwAAAAAAAAAP2SfBW5xPQg8AAAAAAAAA0NvSYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgTGPoWvFwQw8AAAAAAAAAhfEwf8vCB0gPAAAAAAAAANDb0mEAAAAA2UCudSuTs976/////////9lArnUrk7Pe+v/////////Q29JhAAAAAHyXYGjVpjHDAgAAAAAAAAC8QAFoi7CH3wEAAAAAAAAA0NvSYQAAAABQGTn1zyDwfe//////////UBk59c8g8H3v/////////9Db0mEAAAAA13/fY15IeV71/////////5MV9jBit0i88v/////////Q29JhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPqbMtP2S19s9P/////////01TffyJFd1/P/////////0NvSYQAAAAANm/JrQVRTu/f/////////DZvya0FUU7v3/////////9Db0mEAAAAABnxCgzEAYu0BAAAAAAAAAAZ8QoMxAGLtAQAAAAAAAADQ29JhAAAAAHJjA10cH88P9/////////9yYwNdHB/PD/f/////////0NvSYQAAAADHIR5z5iUwjf//////////xyEec+YlMI3//////////9Db0mEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ29JhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "base64" + ] +} \ No newline at end of file diff --git a/tests/testdata/account5/group.json b/tests/testdata/account5/group.json new file mode 100644 index 00000000..44c08837 --- /dev/null +++ b/tests/testdata/account5/group.json @@ -0,0 +1,11 @@ +{ + "address": "Ec2enZyoC4nGpEfu2sUNAa2nUGJHWxoUWYSEJ2hNTWTA", + "executable": false, + "lamports": "42873600", + "owner": "4skJ85cdxQAFVKbcGgfun8iZPL7BadVYXG3kGEGkufqA", + "rent_epoch": "242", + "data": [ + "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", + "base64" + ] +} \ No newline at end of file diff --git a/tests/testdata/account5/openorders0.json b/tests/testdata/account5/openorders0.json new file mode 100644 index 00000000..593bfa65 --- /dev/null +++ b/tests/testdata/account5/openorders0.json @@ -0,0 +1,11 @@ +{ + "address": "5NaBydPDJuVAixVkANhWEA4AiAdNgBqeB2AySeHJMdUv", + "executable": false, + "lamports": "23357760", + "owner": "DESVgJVGajEgKGXhb6XmqDHGz3VjdgP7rEVESBgxmroY", + "rent_epoch": "243", + "data": [ + "c2VydW0FAAAAAAAAAG935T/Ftgtcs97HgRQ9EVj/Sc85XrjWzZmKjQcBCOm3pzAQMOpaoJNf9hiwuhkibj8A6O127ngUxXLBL5pgo4EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKgAAAAAAAABwYWRkaW5n", + "base64" + ] +} \ No newline at end of file diff --git a/tests/testdata/account5/openorders1.json b/tests/testdata/account5/openorders1.json new file mode 100644 index 00000000..86e22233 --- /dev/null +++ b/tests/testdata/account5/openorders1.json @@ -0,0 +1,11 @@ +{ + "address": "FhNicR8YxjaMjH3r1BEh5V11JxHH7sbkjBL6tnAu3hYr", + "executable": false, + "lamports": "23357760", + "owner": "DESVgJVGajEgKGXhb6XmqDHGz3VjdgP7rEVESBgxmroY", + "rent_epoch": "243", + "data": [ + "c2VydW0FAAAAAAAAALnCC44pRlRHQf0W2V86OCqGpUdAZOolaykWYZjqdoIupzAQMOpaoJNf9hiwuhkibj8A6O127ngUxXLBL5pgo4EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAMAAAAAAABwYWRkaW5n", + "base64" + ] +} \ No newline at end of file diff --git a/tests/testdata/account5/openorders2.json b/tests/testdata/account5/openorders2.json new file mode 100644 index 00000000..b79a2715 --- /dev/null +++ b/tests/testdata/account5/openorders2.json @@ -0,0 +1,11 @@ +{ + "address": "5AEiYQLPZEBUj85tTXp38bkb8tkoJTYSnGoL3qDi4DpG", + "executable": false, + "lamports": "23357760", + "owner": "DESVgJVGajEgKGXhb6XmqDHGz3VjdgP7rEVESBgxmroY", + "rent_epoch": "243", + "data": [ + "c2VydW0FAAAAAAAAAJ+j/J672SbA52cHeipr43T2cbnh+ZSLAbp5qE72JRKppzAQMOpaoJNf9hiwuhkibj8A6O127ngUxXLBL5pgo4EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gIAAAAAAABwYWRkaW5n", + "base64" + ] +} \ No newline at end of file diff --git a/tests/testdata/account5/openorders3.json b/tests/testdata/account5/openorders3.json new file mode 100644 index 00000000..9c482f7b --- /dev/null +++ b/tests/testdata/account5/openorders3.json @@ -0,0 +1,11 @@ +{ + "address": "GzmCp2ke9AQJTvUJ9MJD1hJLvyqBhmBgSsP3iMsHvEuV", + "executable": false, + "lamports": "23357760", + "owner": "DESVgJVGajEgKGXhb6XmqDHGz3VjdgP7rEVESBgxmroY", + "rent_epoch": "243", + "data": [ + "c2VydW0FAAAAAAAAAEmnaoE/owmoOSrNJAggDkGSNpQEzcFKVtGs7saLSwrOpzAQMOpaoJNf9hiwuhkibj8A6O127ngUxXLBL5pgo4EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwYWRkaW5n", + "base64" + ] +} \ No newline at end of file diff --git a/tests/testdata/account5/openorders8.json b/tests/testdata/account5/openorders8.json new file mode 100644 index 00000000..dcffc48a --- /dev/null +++ b/tests/testdata/account5/openorders8.json @@ -0,0 +1,11 @@ +{ + "address": "8HtU9HRZcrBZaFL1Rs7tVuFJsKMPs37SAwTNx5Co95Xv", + "executable": false, + "lamports": "23357760", + "owner": "DESVgJVGajEgKGXhb6XmqDHGz3VjdgP7rEVESBgxmroY", + "rent_epoch": "243", + "data": [ + "c2VydW0FAAAAAAAAAK4JIye+t4Cls/eN9rrSY18YDyeJzUpHfCer2IpoHZl0pzAQMOpaoJNf9hiwuhkibj8A6O127ngUxXLBL5pgo4EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwYWRkaW5n", + "base64" + ] +} \ No newline at end of file diff --git a/tests/testdata/account5/regenerate b/tests/testdata/account5/regenerate new file mode 100755 index 00000000..f9aa8c28 --- /dev/null +++ b/tests/testdata/account5/regenerate @@ -0,0 +1,13 @@ +#! /usr/bin/env bash + +export CLUSTER_NAME=devnet +show-account-info --address Ec2enZyoC4nGpEfu2sUNAa2nUGJHWxoUWYSEJ2hNTWTA --filename group.json +show-account-info --address 8mFQbdXsFXt3R3cu3oSNS3bDZRwJRP18vyzd9J278J9z --filename cache.json +show-account-info --address 5NaBydPDJuVAixVkANhWEA4AiAdNgBqeB2AySeHJMdUv --filename openorders0.json +show-account-info --address FhNicR8YxjaMjH3r1BEh5V11JxHH7sbkjBL6tnAu3hYr --filename openorders1.json +show-account-info --address 5AEiYQLPZEBUj85tTXp38bkb8tkoJTYSnGoL3qDi4DpG --filename openorders2.json +show-account-info --address GzmCp2ke9AQJTvUJ9MJD1hJLvyqBhmBgSsP3iMsHvEuV --filename openorders3.json +show-account-info --address 8HtU9HRZcrBZaFL1Rs7tVuFJsKMPs37SAwTNx5Co95Xv --filename openorders8.json + +# Devnet perp marketmaker +show-account-info --address DRUZRfLQtki4ZYvRXhi5yGmyqCf6iMfTzxtBpxo6rbHu --filename account.json diff --git a/tests/testdata/account6/account.json b/tests/testdata/account6/account.json new file mode 100644 index 00000000..3266689a --- /dev/null +++ b/tests/testdata/account6/account.json @@ -0,0 +1,11 @@ +{ + "address": "DRUZRfLQtki4ZYvRXhi5yGmyqCf6iMfTzxtBpxo6rbHu", + "executable": false, + "lamports": "30791040", + "owner": "4skJ85cdxQAFVKbcGgfun8iZPL7BadVYXG3kGEGkufqA", + "rent_epoch": "245", + "data": [ + "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AAAAAFcvAAAAAAAAzAne//////8rLgAAAAAAADT2IQAAAAAAky8AAAAAAABLR+D//////5MHAAAAAAAAo7gfAAAAAAABCAAAAAAAAEpH4P//////kwcAAAAAAACluB8AAAAAAAwIAAAAAAAASUfg//////+TBwAAAAAAAKe4HwAAAAAAFggAAAAAAACDx+D//////26TAAAAAAAAfTgfAAAAAADplAAAAAAAAIHH4P//////sJIAAAAAAAB/OB8AAAAAAKeVAAAAAAAAf8fg///////ykQAAAAAAAIE4HwAAAAAAZJYAAAAAAADjf/z//////4JRAAAAAAAAHYADAAAAAAAsYwAAAAAAAOF//P//////GlEAAAAAAAAfgAMAAAAAACxjAAAAAAAA33/8//////+xUAAAAAAAACGAAwAAAAAALGMAAAAAAABt89///////3ARBQAAAAAAkwwgAAAAAAB6HgUAAAAAAGvz3///////3AoFAAAAAACVDCAAAAAAAPAkBQAAAAAAafPf//////9OBAUAAAAAAJcMIAAAAAAAbCsFAAAAAABqBr3//////+B+BgAAAAAAlvlCAAAAAACXjwYAAAAAAGgGvf//////nXYGAAAAAACY+UIAAAAAAAqYBgAAAAAAZga9//////9PbgYAAAAAAJr5QgAAAAAAc6AGAAAAAAAA9+3//////6AjAAAAAAAAAAkSAAAAAAD8IwAAAAAAAP727f//////ciMAAAAAAAACCRIAAAAAACokAAAAAAAA/Pbt//////9EIwAAAAAAAAQJEgAAAAAAVyQAAAAAAAAzqr7//////yI5AAAAAAAAzVVBAAAAAAC1OQAAAAAAADGqvv//////2DgAAAAAAADPVUEAAAAAAP45AAAAAAAAL6q+//////+OOAAAAAAAANFVQQAAAAAARzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgts1L34BAACD2zUvfgEAAITbNS9+AQAAhds1L34BAACG2zUvfgEAAJHbNS9+AQAABeU1L34BAABpITUvfgEAAAblNS9+AQAAbCE1L34BAAAH5TUvfgEAAG4hNS9+AQAAhOA1L34BAACF4DUvfgEAAIbgNS9+AQAAh+A1L34BAACI4DUvfgEAAIngNS9+AQAAD881L34BAAAQzzUvfgEAABHPNS9+AQAAEs81L34BAAATzzUvfgEAABTPNS9+AQAAJtQ1L34BAAAn1DUvfgEAACjUNS9+AQAAKdQ1L34BAAAq1DUvfgEAACvUNS9+AQAACcs1L34BAAAKyzUvfgEAAAvLNS9+AQAADMs1L34BAAANyzUvfgEAAA7LNS9+AQAAtOg1L34BAAC16DUvfgEAALboNS9+AQAAt+g1L34BAAC46DUvfgEAALnoNS9+AQAA1NA1L34BAADV0DUvfgEAANbQNS9+AQAA19A1L34BAADY0DUvfgEAANnQNS9+AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "base64" + ] +} \ No newline at end of file diff --git a/tests/testdata/account6/cache.json b/tests/testdata/account6/cache.json new file mode 100644 index 00000000..fc1d884f --- /dev/null +++ b/tests/testdata/account6/cache.json @@ -0,0 +1,11 @@ +{ + "address": "8mFQbdXsFXt3R3cu3oSNS3bDZRwJRP18vyzd9J278J9z", + "executable": false, + "lamports": "12082560", + "owner": "4skJ85cdxQAFVKbcGgfun8iZPL7BadVYXG3kGEGkufqA", + "rent_epoch": "245", + "data": [ + "BwABAAAAAAA51sVtNDQAAAAAAAAAAAAAetbWYQAAAAC6SQwCK6cSpwAAAAAAAAAAetbWYQAAAAAD54wo7b0LDQAAAAAAAAAAetbWYQAAAACJsyJqoiUAAAAAAAAAAAAAetbWYQAAAACMKO0NvjADAAAAAAAAAAAAetbWYQAAAAAAAAAAAAABAAAAAAAAAAAAetbWYQAAAAA4RUdy+f8AAAAAAAAAAAAAetbWYQAAAAAW2c73UzMBAAAAAAAAAAAAetbWYQAAAAC6uI0G8PYlAAAAAAAAAAAAetbWYQAAAADg21FrfBcAAAAAAAAAAAAAetbWYQAAAADqZYJDor8AAAAAAAAAAAAAetbWYQAAAACTGARWDp0EAAAAAAAAAAAAetbWYQAAAACo1vBkXwUAAAAAAAAAAAAAetbWYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACr/bgr9pWKcg8AAAAAAAAAfW/KTOt5fn4PAAAAAAAAAHzW1mEAAAAAvttQwWyYbUIPAAAAAAAAAFjMse7KwtdEDwAAAAAAAAB81tZhAAAAAB7PdKQvQCabEAAAAAAAAAALpm+fDGBXvRAAAAAAAAAAfNbWYQAAAAAe9g7LkpKaWg8AAAAAAAAA5kD52dq2+GUPAAAAAAAAAHzW1mEAAAAAFssqHa4IQEIPAAAAAAAAANmR0TdBjERCDwAAAAAAAAB81tZhAAAAADReISl/WkBCDwAAAAAAAAAsEmw4065AQg8AAAAAAAAAfNbWYQAAAAAzoyaapZMZRA8AAAAAAAAA8VB1z9AOoUQPAAAAAAAAAHzW1mEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHGAaS20IkBCDwAAAAAAAAD5L/jri35SQg8AAAAAAAAAfNbWYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFwTPIWihxQw8AAAAAAAAAsGCNQusXFEgPAAAAAAAAAHzW1mEAAAAAqRjqbTY671n6/////////6kY6m02Ou9Z+v////////981tZhAAAAAMbbFM+yhJtpAgAAAAAAAAAGhbXOaI7xhQEAAAAAAAAAfNbWYQAAAAALGiWHGZdqee//////////CxolhxmXannv/////////3zW1mEAAAAAOVnTA79l3hL2//////////Xu6dDC1K1w8/////////981tZhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMSDJcxswx9s9P////////++vSrYPgke1/P/////////fNbWYQAAAABngWsBSRigu/f/////////Z4FrAUkYoLv3/////////3zW1mEAAAAAKlBZ4XgRAe4BAAAAAAAAACpQWeF4EQHuAQAAAAAAAAB81tZhAAAAACv805m29/X69v////////8r/NOZtvf1+vb/////////fNbWYQAAAADHIR5z5iUwjf//////////xyEec+YlMI3//////////3zW1mEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB61tZhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "base64" + ] +} \ No newline at end of file diff --git a/tests/testdata/account6/group.json b/tests/testdata/account6/group.json new file mode 100644 index 00000000..a6f2c694 --- /dev/null +++ b/tests/testdata/account6/group.json @@ -0,0 +1,11 @@ +{ + "address": "Ec2enZyoC4nGpEfu2sUNAa2nUGJHWxoUWYSEJ2hNTWTA", + "executable": false, + "lamports": "42873600", + "owner": "4skJ85cdxQAFVKbcGgfun8iZPL7BadVYXG3kGEGkufqA", + "rent_epoch": "244", + "data": [ + "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", + "base64" + ] +} \ No newline at end of file diff --git a/tests/testdata/account6/openorders0.json b/tests/testdata/account6/openorders0.json new file mode 100644 index 00000000..b0ba051a --- /dev/null +++ b/tests/testdata/account6/openorders0.json @@ -0,0 +1,11 @@ +{ + "address": "5NaBydPDJuVAixVkANhWEA4AiAdNgBqeB2AySeHJMdUv", + "executable": false, + "lamports": "23357760", + "owner": "DESVgJVGajEgKGXhb6XmqDHGz3VjdgP7rEVESBgxmroY", + "rent_epoch": "245", + "data": [ + "c2VydW0FAAAAAAAAAG935T/Ftgtcs97HgRQ9EVj/Sc85XrjWzZmKjQcBCOm3pzAQMOpaoJNf9hiwuhkibj8A6O127ngUxXLBL5pgo4EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKgAAAAAAAABwYWRkaW5n", + "base64" + ] +} \ No newline at end of file diff --git a/tests/testdata/account6/openorders1.json b/tests/testdata/account6/openorders1.json new file mode 100644 index 00000000..47fbe3ee --- /dev/null +++ b/tests/testdata/account6/openorders1.json @@ -0,0 +1,11 @@ +{ + "address": "FhNicR8YxjaMjH3r1BEh5V11JxHH7sbkjBL6tnAu3hYr", + "executable": false, + "lamports": "23357760", + "owner": "DESVgJVGajEgKGXhb6XmqDHGz3VjdgP7rEVESBgxmroY", + "rent_epoch": "245", + "data": [ + "c2VydW0FAAAAAAAAALnCC44pRlRHQf0W2V86OCqGpUdAZOolaykWYZjqdoIupzAQMOpaoJNf9hiwuhkibj8A6O127ngUxXLBL5pgo4EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8hMAAAAAAABwYWRkaW5n", + "base64" + ] +} \ No newline at end of file diff --git a/tests/testdata/account6/openorders2.json b/tests/testdata/account6/openorders2.json new file mode 100644 index 00000000..650ce1de --- /dev/null +++ b/tests/testdata/account6/openorders2.json @@ -0,0 +1,11 @@ +{ + "address": "5AEiYQLPZEBUj85tTXp38bkb8tkoJTYSnGoL3qDi4DpG", + "executable": false, + "lamports": "23357760", + "owner": "DESVgJVGajEgKGXhb6XmqDHGz3VjdgP7rEVESBgxmroY", + "rent_epoch": "245", + "data": [ + "c2VydW0FAAAAAAAAAJ+j/J672SbA52cHeipr43T2cbnh+ZSLAbp5qE72JRKppzAQMOpaoJNf9hiwuhkibj8A6O127ngUxXLBL5pgo4EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmQIAAAAAAABwYWRkaW5n", + "base64" + ] +} \ No newline at end of file diff --git a/tests/testdata/account6/openorders3.json b/tests/testdata/account6/openorders3.json new file mode 100644 index 00000000..34b38ed2 --- /dev/null +++ b/tests/testdata/account6/openorders3.json @@ -0,0 +1,11 @@ +{ + "address": "GzmCp2ke9AQJTvUJ9MJD1hJLvyqBhmBgSsP3iMsHvEuV", + "executable": false, + "lamports": "23357760", + "owner": "DESVgJVGajEgKGXhb6XmqDHGz3VjdgP7rEVESBgxmroY", + "rent_epoch": "245", + "data": [ + "c2VydW0FAAAAAAAAAEmnaoE/owmoOSrNJAggDkGSNpQEzcFKVtGs7saLSwrOpzAQMOpaoJNf9hiwuhkibj8A6O127ngUxXLBL5pgo4EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///////////////////8BAAAAAAAAAAAAAAAAAAAAyJfD///////hWgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN2TUvfgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwYWRkaW5n", + "base64" + ] +} \ No newline at end of file diff --git a/tests/testdata/account6/openorders8.json b/tests/testdata/account6/openorders8.json new file mode 100644 index 00000000..799bd2a1 --- /dev/null +++ b/tests/testdata/account6/openorders8.json @@ -0,0 +1,11 @@ +{ + "address": "8HtU9HRZcrBZaFL1Rs7tVuFJsKMPs37SAwTNx5Co95Xv", + "executable": false, + "lamports": "23357760", + "owner": "DESVgJVGajEgKGXhb6XmqDHGz3VjdgP7rEVESBgxmroY", + "rent_epoch": "245", + "data": [ + "c2VydW0FAAAAAAAAAK4JIye+t4Cls/eN9rrSY18YDyeJzUpHfCer2IpoHZl0pzAQMOpaoJNf9hiwuhkibj8A6O127ngUxXLBL5pgo4EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwYWRkaW5n", + "base64" + ] +} \ No newline at end of file diff --git a/tests/testdata/account6/regenerate b/tests/testdata/account6/regenerate new file mode 100755 index 00000000..f9aa8c28 --- /dev/null +++ b/tests/testdata/account6/regenerate @@ -0,0 +1,13 @@ +#! /usr/bin/env bash + +export CLUSTER_NAME=devnet +show-account-info --address Ec2enZyoC4nGpEfu2sUNAa2nUGJHWxoUWYSEJ2hNTWTA --filename group.json +show-account-info --address 8mFQbdXsFXt3R3cu3oSNS3bDZRwJRP18vyzd9J278J9z --filename cache.json +show-account-info --address 5NaBydPDJuVAixVkANhWEA4AiAdNgBqeB2AySeHJMdUv --filename openorders0.json +show-account-info --address FhNicR8YxjaMjH3r1BEh5V11JxHH7sbkjBL6tnAu3hYr --filename openorders1.json +show-account-info --address 5AEiYQLPZEBUj85tTXp38bkb8tkoJTYSnGoL3qDi4DpG --filename openorders2.json +show-account-info --address GzmCp2ke9AQJTvUJ9MJD1hJLvyqBhmBgSsP3iMsHvEuV --filename openorders3.json +show-account-info --address 8HtU9HRZcrBZaFL1Rs7tVuFJsKMPs37SAwTNx5Co95Xv --filename openorders8.json + +# Devnet perp marketmaker +show-account-info --address DRUZRfLQtki4ZYvRXhi5yGmyqCf6iMfTzxtBpxo6rbHu --filename account.json