Skip to content

Commit 2e8ac70

Browse files
committed
Port cancel_offers to @marshal
1 parent 1c05532 commit 2e8ac70

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,
@@ -2431,23 +2433,20 @@ async def cancel_offer(
24312433
return CancelOfferResponse([], []) # tx_endpoint will fill in default values here
24322434

24332435
@tx_endpoint(push=True, merge_spends=False)
2436+
@marshal
24342437
async def cancel_offers(
24352438
self,
2436-
request: dict[str, Any],
2439+
request: CancelOffers,
24372440
action_scope: WalletActionScope,
24382441
extra_conditions: tuple[Condition, ...] = tuple(),
2439-
) -> EndpointResult:
2440-
secure = request["secure"]
2441-
batch_fee: uint64 = uint64(request.get("batch_fee", 0))
2442-
batch_size = request.get("batch_size", 5)
2443-
cancel_all = request.get("cancel_all", False)
2444-
if cancel_all:
2445-
asset_id = None
2442+
) -> CancelOffersResponse:
2443+
if request.cancel_all:
2444+
asset_id: Optional[str] = None
24462445
else:
2447-
asset_id = request.get("asset_id", "xch")
2446+
asset_id = request.asset_id
24482447

24492448
start: int = 0
2450-
end: int = start + batch_size
2449+
end: int = start + request.batch_size
24512450
trade_mgr = self.service.wallet_state_manager.trade_manager
24522451
log.info(f"Start cancelling offers for {'asset_id: ' + asset_id if asset_id is not None else 'all'} ...")
24532452
# Traverse offers page by page
@@ -2465,7 +2464,7 @@ async def cancel_offers(
24652464
include_completed=False,
24662465
)
24672466
for trade in trades:
2468-
if cancel_all:
2467+
if request.cancel_all:
24692468
records[trade.trade_id] = trade
24702469
continue
24712470
if trade.offer and trade.offer != b"":
@@ -2481,20 +2480,20 @@ async def cancel_offers(
24812480
await trade_mgr.cancel_pending_offers(
24822481
list(records.keys()),
24832482
action_scope,
2484-
batch_fee,
2485-
secure,
2483+
request.batch_fee,
2484+
request.secure,
24862485
records,
24872486
extra_conditions=extra_conditions,
24882487
)
24892488

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

2497-
return {"transactions": None} # tx_endpoint wrapper will take care of this
2496+
return CancelOffersResponse([], []) # tx_endpoint wrapper will take care of this
24982497

24992498
##########################################################################################
25002499
# 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)