Updated Account layout for v3.3.

This commit is contained in:
Geoff Taylor 2022-01-18 14:35:01 +00:00
parent ad8f8efd47
commit f9b7d7b03f
5 changed files with 48 additions and 8 deletions

View File

@ -100,7 +100,8 @@ class Account(AddressableAccount):
in_margin_basket: typing.Sequence[bool],
slot_indices: typing.Sequence[bool],
base_slots: typing.Sequence[AccountSlot],
msrm_amount: Decimal, being_liquidated: bool, is_bankrupt: bool) -> None:
msrm_amount: Decimal, being_liquidated: bool, is_bankrupt: bool,
advanced_orders: PublicKey, not_upgradable: bool, delegate: PublicKey) -> None:
super().__init__(account_info)
self.version: Version = version
@ -116,6 +117,9 @@ class Account(AddressableAccount):
self.msrm_amount: Decimal = msrm_amount
self.being_liquidated: bool = being_liquidated
self.is_bankrupt: bool = is_bankrupt
self.advanced_orders: PublicKey = advanced_orders
self.not_upgradable: bool = not_upgradable
self.delegate: PublicKey = delegate
@property
def shared_quote_token(self) -> Token:
@ -263,8 +267,13 @@ class Account(AddressableAccount):
msrm_amount: Decimal = layout.msrm_amount
being_liquidated: bool = bool(layout.being_liquidated)
is_bankrupt: bool = bool(layout.is_bankrupt)
advanced_orders: PublicKey = layout.advanced_orders
not_upgradable: bool = bool(layout.not_upgradable)
delegate: PublicKey = layout.delegate
return Account(account_info, version, meta_data, group.name, group.address, owner, info, quote, in_margin_basket, active_in_basket, slots, msrm_amount, being_liquidated, is_bankrupt)
return Account(account_info, version, meta_data, group.name, group.address, owner, info, quote,
in_margin_basket, active_in_basket, slots, msrm_amount, being_liquidated, is_bankrupt,
advanced_orders, not_upgradable, delegate)
@staticmethod
def parse(account_info: AccountInfo, group: Group, cache: Cache) -> "Account":
@ -715,9 +724,12 @@ class Account(AddressableAccount):
return f"""« Account {info}, {self.version} [{self.address}]
{self.meta_data}
Owner: {self.owner}
Delegated To: {self.delegate}
Group: « Group '{self.group_name}' [{self.group_address}] »
Advanced Orders Account: {self.advanced_orders}
MSRM: {self.msrm_amount}
Bankrupt? {self.is_bankrupt}
Upgradable? {not self.not_upgradable}
Being Liquidated? {self.being_liquidated}
Shared Quote Token:
{shared_quote}

View File

@ -683,8 +683,21 @@ PERP_ACCOUNT = construct.Struct(
# /// This account cannot do anything except go through `resolve_bankruptcy`
# pub is_bankrupt: bool,
# pub info: [u8; INFO_LEN],
#
# /// Starts off as zero pubkey and points to the AdvancedOrders account
# pub advanced_orders_key: Pubkey,
#
# /// Can this account be upgraded to v1 so it can be closed
# pub not_upgradable: bool,
#
# // Alternative authority/signer of transactions for a mango account
# pub delegate: Pubkey,
#
# /// padding for expansions
# pub padding: [u8; 70],
# /// Note: future expansion can also be just done via isolated PDAs
# /// which can be computed independently and dont need to be linked from
# /// this account
# pub padding: [u8; 5],
# }
# ```
MANGO_ACCOUNT = construct.Struct(
@ -703,9 +716,12 @@ MANGO_ACCOUNT = construct.Struct(
"client_order_ids" / construct.Array(MAX_PERP_OPEN_ORDERS, DecimalAdapter()),
"msrm_amount" / DecimalAdapter(),
"being_liquidated" / DecimalAdapter(1),
"is_bankrupt" / DecimalAdapter(1),
"is_bankrupt" / construct.Flag,
"info" / construct.PaddedString(32, "utf8"),
construct.Padding(70)
"advanced_orders" / PublicKeyAdapter(),
"not_upgradable" / construct.Flag,
"delegate" / PublicKeyAdapter(),
construct.Padding(5)
)
# # 🥭 LIQUIDITY_MINING_INFO

View File

@ -175,7 +175,8 @@ def fake_account() -> mango.Account:
quote = fake_account_slot()
return mango.Account(fake_account_info(), mango.Version.V1, meta_data, "GROUPNAME",
fake_seeded_public_key("group"), fake_seeded_public_key("owner"), "INFO",
quote, [], [], [], Decimal(1), False, False)
quote, [], [], [], Decimal(1), False, False, fake_seeded_public_key("advanced_orders"),
False, fake_seeded_public_key("delegate"))
def fake_root_bank() -> mango.RootBank:

View File

@ -48,10 +48,13 @@ def test_construction() -> None:
msrm_amount = Decimal(0)
being_liquidated = False
is_bankrupt = False
advanced_orders = fake_seeded_public_key("advanced_orders")
not_upgradable = False
delegate = fake_seeded_public_key("delegate")
actual = mango.Account(account_info, mango.Version.V1, meta_data, "Test Group", group, owner, info, quote,
in_margin_basket, active_in_basket, basket, msrm_amount, being_liquidated,
is_bankrupt)
is_bankrupt, advanced_orders, not_upgradable, delegate)
assert actual is not None
assert actual.version == mango.Version.V1
@ -69,6 +72,9 @@ def test_construction() -> None:
assert actual.msrm_amount == msrm_amount
assert actual.being_liquidated == being_liquidated
assert actual.is_bankrupt == is_bankrupt
assert actual.advanced_orders == advanced_orders
assert actual.not_upgradable == not_upgradable
assert actual.delegate == delegate
def test_slot_lookups() -> None:
@ -100,10 +106,13 @@ def test_slot_lookups() -> None:
msrm_amount = Decimal(0)
being_liquidated = False
is_bankrupt = False
advanced_orders = fake_seeded_public_key("advanced_orders")
not_upgradable = False
delegate = fake_seeded_public_key("delegate")
actual = mango.Account(account_info, mango.Version.V1, meta_data, "Test Group", group, owner, info, quote_slot,
in_margin_basket, active_in_basket, slots, msrm_amount, being_liquidated,
is_bankrupt)
is_bankrupt, advanced_orders, not_upgradable, delegate)
assert actual.shared_quote == quote_slot
assert actual.shared_quote_token == quote_slot.base_instrument

View File

@ -51,6 +51,8 @@ def test_construction() -> None:
assert actual.srm_vault == srm_vault
assert actual.msrm_vault == msrm_vault
assert actual.fees_vault == fees_vault
assert actual.max_mango_accounts == max_mango_accounts
assert actual.num_mango_accounts == num_mango_accounts
def test_slot_lookups() -> None: