diff --git a/Makefile b/Makefile index 0714a77..f5c2d31 100644 --- a/Makefile +++ b/Makefile @@ -17,7 +17,7 @@ notebook: publish: make clean python setup.py sdist bdist_wheel - pipenv run twine upload -u serum-community dist/* + pipenv run twine upload dist/* test-publish: make clean diff --git a/pyserum/examples/markets.py b/pyserum/examples/markets.py index e7b6083..2221b0c 100644 --- a/pyserum/examples/markets.py +++ b/pyserum/examples/markets.py @@ -14,11 +14,15 @@ async def main(): connection = AsyncClient('https://mango.rpcpool.com/0f9acc0d45173b51bf7d7e09c1e5') serum_markets = await asyncio.gather(*[ - AsyncMarket.load(connection, Publ(serum_market_config['serumMarketExternal']), Pubkey(serum_market_config['serumProgram'])) + AsyncMarket.load(connection, PublicKey(serum_market_config['serumMarketExternal']), PublicKey(serum_market_config['serumProgram'])) for serum_market_config in group['serum3Markets'] ]) - print(serum_markets) + serum_market: AsyncMarket = serum_markets[0] + + fills = await serum_market.load_fills(9999) + + print([fill._asdict() for fill in fills]) if __name__ == '__main__': diff --git a/pyserum/market/core.py b/pyserum/market/core.py index 5696a75..b167bc9 100644 --- a/pyserum/market/core.py +++ b/pyserum/market/core.py @@ -92,30 +92,37 @@ class MarketCore: def parse_fill_event(self, event: t.Event) -> t.FilledOrder: if event.event_flags.bid: - side = Side.BUY + side = 'bids' + price_before_fees = ( - event.native_quantity_released + event.native_fee_or_rebate + event.native_quantity_paid + event.native_fee_or_rebate if event.event_flags.maker - else event.native_quantity_released - event.native_fee_or_rebate + else event.native_quantity_paid - event.native_fee_or_rebate ) + + price = (price_before_fees * self.state.base_spl_token_multiplier()) / (self.state.quote_spl_token_multiplier() * event.native_quantity_released) + + size = event.native_quantity_released / self.state.base_spl_token_multiplier() else: - side = Side.SELL + side = 'asks' + price_before_fees = ( event.native_quantity_released - event.native_fee_or_rebate if event.event_flags.maker else event.native_quantity_released + event.native_fee_or_rebate ) - price = (price_before_fees * self.state.base_spl_token_multiplier()) / ( - self.state.quote_spl_token_multiplier() * event.native_quantity_paid - ) - size = event.native_quantity_paid / self.state.base_spl_token_multiplier() + price = (price_before_fees * self.state.base_spl_token_multiplier()) / (self.state.quote_spl_token_multiplier() * event.native_quantity_paid) + + size = event.native_quantity_paid / self.state.base_spl_token_multiplier() return t.FilledOrder( - order_id=event.order_id, side=side, + type='maker' if event.event_flags.maker else 'taker', price=price, size=size, - fee_cost=event.native_fee_or_rebate * (1 if event.event_flags.maker else -1), + fee=self.state.quote_spl_size_to_number(event.native_fee_or_rebate) * (-1 if event.event_flags.maker else 1), + open_orders=event.public_key, + client_order_id=event.order_id, ) def _prepare_new_oo_account( diff --git a/pyserum/market/types.py b/pyserum/market/types.py index 2844701..895a805 100644 --- a/pyserum/market/types.py +++ b/pyserum/market/types.py @@ -39,16 +39,13 @@ class AccountFlags(NamedTuple): class FilledOrder(NamedTuple): - client_order_id: int - """""" side: str - """""" + type: str price: float - """""" size: float - """""" - fee_cost: float - """""" + fee: float + open_orders: PublicKey + client_order_id: int class OrderInfo(NamedTuple): diff --git a/setup.py b/setup.py index b8e181a..63260d5 100644 --- a/setup.py +++ b/setup.py @@ -3,13 +3,8 @@ from setuptools import find_packages, setup setup( -<<<<<<< Updated upstream - name="pyserum", - version="0.6.0a", -======= name="pyopenbook", - version="0.7.0a", ->>>>>>> Stashed changes + version="0.7.3a", author="serum-community", description="""Python client library for interacting with the Project Serum DEX.""", install_requires=[