Skip to content

Commit e9f2732

Browse files
committed
Port cancel_offers to @marshal
1 parent db14856 commit e9f2732

File tree

4 files changed

+44
-41
lines changed

4 files changed

+44
-41
lines changed

chia/_tests/wallet/rpc/test_wallet_rpc.py

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@
107107
from chia.wallet.wallet_request_types import (
108108
AddKey,
109109
CancelOffer,
110+
CancelOffers,
110111
CATAssetIDToName,
111112
CATGetAssetID,
112113
CATGetName,
@@ -1783,7 +1784,9 @@ def only_ids(trades: list[TradeRecord]) -> list[bytes32]:
17831784
)
17841785
== 2
17851786
)
1786-
await env_1.rpc_client.cancel_offers(wallet_environments.tx_config, batch_size=1)
1787+
await env_1.rpc_client.cancel_offers(
1788+
CancelOffers(secure=True, batch_size=uint16(1)), tx_config=wallet_environments.tx_config
1789+
)
17871790
assert (
17881791
len(
17891792
[
@@ -1838,7 +1841,9 @@ def only_ids(trades: list[TradeRecord]) -> list[bytes32]:
18381841
)
18391842
== 2
18401843
)
1841-
await env_1.rpc_client.cancel_offers(wallet_environments.tx_config, cancel_all=True)
1844+
await env_1.rpc_client.cancel_offers(
1845+
CancelOffers(secure=True, cancel_all=True), tx_config=wallet_environments.tx_config
1846+
)
18421847
assert (
18431848
len(
18441849
[
@@ -1900,7 +1905,9 @@ def only_ids(trades: list[TradeRecord]) -> list[bytes32]:
19001905
)
19011906
== 1
19021907
)
1903-
await env_1.rpc_client.cancel_offers(wallet_environments.tx_config, asset_id=bytes32.zeros)
1908+
await env_1.rpc_client.cancel_offers(
1909+
CancelOffers(secure=True, asset_id=bytes32.zeros.hex()), tx_config=wallet_environments.tx_config
1910+
)
19041911
assert (
19051912
len(
19061913
[
@@ -1911,7 +1918,9 @@ def only_ids(trades: list[TradeRecord]) -> list[bytes32]:
19111918
)
19121919
== 1
19131920
)
1914-
await env_1.rpc_client.cancel_offers(wallet_environments.tx_config, asset_id=cat_asset_id)
1921+
await env_1.rpc_client.cancel_offers(
1922+
CancelOffers(secure=True, asset_id=cat_asset_id.hex()), tx_config=wallet_environments.tx_config
1923+
)
19151924
assert (
19161925
len(
19171926
[

chia/wallet/wallet_request_types.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2031,6 +2031,16 @@ class CancelOfferResponse(TransactionEndpointResponse):
20312031
pass
20322032

20332033

2034+
@streamable
2035+
@dataclass(frozen=True)
2036+
class CancelOffers(TransactionEndpointRequest):
2037+
secure: bool = field(default_factory=default_raise)
2038+
batch_fee: uint64 = uint64(0)
2039+
batch_size: uint16 = uint16(5)
2040+
cancel_all: bool = False
2041+
asset_id: str = "xch"
2042+
2043+
20342044
@streamable
20352045
@dataclass(frozen=True)
20362046
class CancelOffersResponse(TransactionEndpointResponse):

chia/wallet/wallet_rpc_api.py

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,8 @@
114114
BalanceResponse,
115115
CancelOffer,
116116
CancelOfferResponse,
117+
CancelOffers,
118+
CancelOffersResponse,
117119
CATAssetIDToName,
118120
CATAssetIDToNameResponse,
119121
CATGetAssetID,
@@ -2434,23 +2436,20 @@ async def cancel_offer(
24342436
return CancelOfferResponse([], []) # tx_endpoint will fill in default values here
24352437

24362438
@tx_endpoint(push=True, merge_spends=False)
2439+
@marshal
24372440
async def cancel_offers(
24382441
self,
2439-
request: dict[str, Any],
2442+
request: CancelOffers,
24402443
action_scope: WalletActionScope,
24412444
extra_conditions: tuple[Condition, ...] = tuple(),
2442-
) -> EndpointResult:
2443-
secure = request["secure"]
2444-
batch_fee: uint64 = uint64(request.get("batch_fee", 0))
2445-
batch_size = request.get("batch_size", 5)
2446-
cancel_all = request.get("cancel_all", False)
2447-
if cancel_all:
2448-
asset_id = None
2445+
) -> CancelOffersResponse:
2446+
if request.cancel_all:
2447+
asset_id: Optional[str] = None
24492448
else:
2450-
asset_id = request.get("asset_id", "xch")
2449+
asset_id = request.asset_id
24512450

24522451
start: int = 0
2453-
end: int = start + batch_size
2452+
end: int = start + request.batch_size
24542453
trade_mgr = self.service.wallet_state_manager.trade_manager
24552454
log.info(f"Start cancelling offers for {'asset_id: ' + asset_id if asset_id is not None else 'all'} ...")
24562455
# Traverse offers page by page
@@ -2468,7 +2467,7 @@ async def cancel_offers(
24682467
include_completed=False,
24692468
)
24702469
for trade in trades:
2471-
if cancel_all:
2470+
if request.cancel_all:
24722471
records[trade.trade_id] = trade
24732472
continue
24742473
if trade.offer and trade.offer != b"":
@@ -2484,20 +2483,20 @@ async def cancel_offers(
24842483
await trade_mgr.cancel_pending_offers(
24852484
list(records.keys()),
24862485
action_scope,
2487-
batch_fee,
2488-
secure,
2486+
request.batch_fee,
2487+
request.secure,
24892488
records,
24902489
extra_conditions=extra_conditions,
24912490
)
24922491

24932492
log.info(f"Cancelled offers {start} to {end} ...")
24942493
# If fewer records were returned than requested, we're done
2495-
if len(trades) < batch_size:
2494+
if len(trades) < request.batch_size:
24962495
break
24972496
start = end
2498-
end += batch_size
2497+
end += request.batch_size
24992498

2500-
return {"transactions": None} # tx_endpoint wrapper will take care of this
2499+
return CancelOffersResponse([], []) # tx_endpoint wrapper will take care of this
25012500

25022501
##########################################################################################
25032502
# Distributed Identities

chia/wallet/wallet_rpc_client.py

Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
ApplySignaturesResponse,
2222
CancelOffer,
2323
CancelOfferResponse,
24+
CancelOffers,
2425
CancelOffersResponse,
2526
CATAssetIDToName,
2627
CATAssetIDToNameResponse,
@@ -729,33 +730,17 @@ async def cancel_offer(
729730

730731
async def cancel_offers(
731732
self,
733+
request: CancelOffers,
732734
tx_config: TXConfig,
733-
batch_fee: int = 0,
734-
secure: bool = True,
735-
batch_size: int = 5,
736-
cancel_all: bool = False,
737-
asset_id: Optional[bytes32] = None,
738735
extra_conditions: tuple[Condition, ...] = tuple(),
739736
timelock_info: ConditionValidTimes = ConditionValidTimes(),
740-
push: bool = True,
741737
) -> CancelOffersResponse:
742-
res = await self.fetch(
743-
"cancel_offers",
744-
{
745-
"secure": secure,
746-
"batch_fee": batch_fee,
747-
"batch_size": batch_size,
748-
"cancel_all": cancel_all,
749-
"asset_id": None if asset_id is None else asset_id.hex(),
750-
"extra_conditions": conditions_to_json_dicts(extra_conditions),
751-
"push": push,
752-
**tx_config.to_json_dict(),
753-
**timelock_info.to_json_dict(),
754-
},
738+
return CancelOffersResponse.from_json_dict(
739+
await self.fetch(
740+
"cancel_offers", request.json_serialize_for_transport(tx_config, extra_conditions, timelock_info)
741+
)
755742
)
756743

757-
return json_deserialize_with_clvm_streamable(res, CancelOffersResponse)
758-
759744
async def get_cat_list(self) -> GetCATListResponse:
760745
return GetCATListResponse.from_json_dict(await self.fetch("get_cat_list", {}))
761746

0 commit comments

Comments
 (0)