Cleaned up call to PLACE_SPOT_ORDER_2 using fee discount address.

This commit is contained in:
Geoff Taylor 2021-10-19 14:17:55 +01:00
parent 4bcabbffa6
commit 57b7e4e99c
2 changed files with 12 additions and 13 deletions

View File

@ -609,7 +609,7 @@ def build_spot_place_order_instructions(context: Context, wallet: Wallet, group:
market: PySerumMarket,
order_type: OrderType, side: Side, price: Decimal,
quantity: Decimal, client_id: int,
fee_discount_address: typing.Optional[PublicKey]) -> CombinableInstructions:
fee_discount_address: PublicKey) -> CombinableInstructions:
instructions: CombinableInstructions = CombinableInstructions.empty()
spot_market_address = market.state.public_key()
@ -651,9 +651,6 @@ def build_spot_place_order_instructions(context: Context, wallet: Wallet, group:
market.state.program_id(),
)
fee_discount_address_meta: typing.List[AccountMeta] = []
if fee_discount_address is not None:
fee_discount_address_meta = [AccountMeta(is_signer=False, is_writable=False, pubkey=fee_discount_address)]
place_spot_instruction = TransactionInstruction(
keys=[
AccountMeta(is_signer=False, is_writable=False, pubkey=group.address),
@ -677,11 +674,9 @@ def build_spot_place_order_instructions(context: Context, wallet: Wallet, group:
AccountMeta(is_signer=False, is_writable=False, pubkey=TOKEN_PROGRAM_ID),
AccountMeta(is_signer=False, is_writable=False, pubkey=group.signer_key),
AccountMeta(is_signer=False, is_writable=False, pubkey=vault_signer),
AccountMeta(is_signer=False, is_writable=False,
pubkey=fee_discount_address or group.msrm_vault or group.srm_vault or SYSTEM_PROGRAM_ADDRESS),
AccountMeta(is_signer=False, is_writable=False, pubkey=fee_discount_address),
*list([AccountMeta(is_signer=False, is_writable=(oo_address == open_orders_address),
pubkey=oo_address or SYSTEM_PROGRAM_ADDRESS) for oo_address in account.spot_open_orders]),
*fee_discount_address_meta
pubkey=oo_address) for oo_address in account.spot_open_orders if oo_address is not None])
],
program_id=context.mango_program_address,
data=layouts.PLACE_SPOT_ORDER_2.build(

View File

@ -42,7 +42,7 @@ from .wallet import Wallet
#
class SpotMarketInstructionBuilder(MarketInstructionBuilder):
def __init__(self, context: Context, wallet: Wallet, group: Group, account: Account, spot_market: SpotMarket, raw_market: PySerumMarket, market_index: int, fee_discount_token_address: typing.Optional[PublicKey]):
def __init__(self, context: Context, wallet: Wallet, group: Group, account: Account, spot_market: SpotMarket, raw_market: PySerumMarket, market_index: int, fee_discount_token_address: PublicKey):
super().__init__()
self.context: Context = context
self.wallet: Wallet = wallet
@ -51,7 +51,7 @@ class SpotMarketInstructionBuilder(MarketInstructionBuilder):
self.spot_market: SpotMarket = spot_market
self.raw_market: PySerumMarket = raw_market
self.market_index: int = market_index
self.fee_discount_token_address: typing.Optional[PublicKey] = fee_discount_token_address
self.fee_discount_token_address: PublicKey = fee_discount_token_address
self.open_orders_address: typing.Optional[PublicKey] = self.account.spot_open_orders[self.market_index]
@ -61,11 +61,15 @@ class SpotMarketInstructionBuilder(MarketInstructionBuilder):
context.client.compatible_client, spot_market.address, context.serum_program_address)
msrm_balance = context.client.get_token_account_balance(group.msrm_vault)
logging.debug(f"MSRM balance is: {msrm_balance}")
fee_discount_token_address: PublicKey = group.srm_vault
fee_discount_token_address: PublicKey
if msrm_balance > 0:
fee_discount_token_address = group.msrm_vault
logging.debug(f"Using fee discount address {fee_discount_token_address}")
logging.debug(
f"MSRM balance is: {msrm_balance} - using MSRM fee discount address {fee_discount_token_address}")
else:
fee_discount_token_address = group.srm_vault
logging.debug(
f"MSRM balance is: {msrm_balance} - using SRM fee discount address {fee_discount_token_address}")
market_index = group.find_spot_market_index(spot_market.address)