Skip to content

Commit 7fc2f30

Browse files
committed
Port cat_asset_id_to_name
1 parent d8cab98 commit 7fc2f30

File tree

8 files changed

+77
-62
lines changed

8 files changed

+77
-62
lines changed

chia/_tests/cmds/cmd_test_utils.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@
3333
from chia.wallet.util.tx_config import TXConfig
3434
from chia.wallet.util.wallet_types import WalletType
3535
from chia.wallet.wallet_request_types import (
36+
CATAssetIDToName,
37+
CATAssetIDToNameResponse,
3638
CATGetName,
3739
CATGetNameResponse,
3840
GetSyncStatusResponse,
@@ -184,15 +186,15 @@ async def sign_message_by_id(self, request: SignMessageByID) -> SignMessageByIDR
184186
signing_mode = SigningMode.CHIP_0002.value
185187
return SignMessageByIDResponse(pubkey, signature, bytes32.zeros, signing_mode)
186188

187-
async def cat_asset_id_to_name(self, asset_id: bytes32) -> Optional[tuple[Optional[uint32], str]]:
189+
async def cat_asset_id_to_name(self, request: CATAssetIDToName) -> CATAssetIDToNameResponse:
188190
"""
189191
if bytes32([1] * 32), return (uint32(2), "test1"), if bytes32([1] * 32), return (uint32(3), "test2")
190192
"""
191-
self.add_to_log("cat_asset_id_to_name", (asset_id,))
193+
self.add_to_log("cat_asset_id_to_name", (request.asset_id,))
192194
for i in range(256):
193-
if asset_id == get_bytes32(i):
194-
return uint32(i + 1), "test" + str(i)
195-
return None
195+
if request.asset_id == get_bytes32(i):
196+
return CATAssetIDToNameResponse(uint32(i + 1), "test" + str(i))
197+
return CATAssetIDToNameResponse(wallet_id=None, name=None)
196198

197199
async def get_nft_info(self, request: NFTGetInfo) -> NFTGetInfoResponse:
198200
self.add_to_log("get_nft_info", (request.coin_id, request.latest))

chia/_tests/cmds/wallet/test_wallet.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@
4343
from chia.wallet.wallet_request_types import (
4444
BalanceResponse,
4545
CancelOfferResponse,
46+
CATAssetIDToName,
47+
CATAssetIDToNameResponse,
4648
CATSetName,
4749
CATSetNameResponse,
4850
CATSpendResponse,
@@ -1054,14 +1056,14 @@ async def take_offer(
10541056
),
10551057
)
10561058

1057-
async def cat_asset_id_to_name(self, asset_id: bytes32) -> Optional[tuple[Optional[uint32], str]]:
1058-
self.add_to_log("cat_asset_id_to_name", (asset_id,))
1059-
if asset_id == cat_offered_id:
1060-
return uint32(2), "offered cat"
1061-
elif asset_id == cat_requested_id:
1062-
return uint32(3), "requested cat"
1059+
async def cat_asset_id_to_name(self, request: CATAssetIDToName) -> CATAssetIDToNameResponse:
1060+
self.add_to_log("cat_asset_id_to_name", (request.asset_id,))
1061+
if request.asset_id == cat_offered_id:
1062+
return CATAssetIDToNameResponse(uint32(2), "offered cat")
1063+
elif request.asset_id == cat_requested_id:
1064+
return CATAssetIDToNameResponse(uint32(3), "requested cat")
10631065
else:
1064-
return None
1066+
return CATAssetIDToNameResponse(wallet_id=None, name=None)
10651067

10661068
inst_rpc_client = TakeOfferRpcClient()
10671069
test_rpc_clients.wallet_rpc_client = inst_rpc_client

chia/_tests/core/cmds/test_wallet.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
from __future__ import annotations
22

3-
from typing import Any, Optional
3+
from typing import Any
44

55
import pytest
66
from chia_rs.sized_bytes import bytes32
77
from chia_rs.sized_ints import uint32
88

99
from chia.cmds.wallet_funcs import print_offer_summary
10+
from chia.wallet.wallet_request_types import CATAssetIDToName, CATAssetIDToNameResponse
1011

1112
TEST_DUCKSAUCE_ASSET_ID = "1000000000000000000000000000000000000000000000000000000000000001"
1213
TEST_CRUNCHBERRIES_ASSET_ID = "1000000000000000000000000000000000000000000000000000000000000002"
@@ -19,8 +20,8 @@
1920
}
2021

2122

22-
async def cat_name_resolver(asset_id: bytes32) -> Optional[tuple[Optional[uint32], str]]:
23-
return TEST_ASSET_ID_NAME_MAPPING.get(asset_id)
23+
async def cat_name_resolver(request: CATAssetIDToName) -> CATAssetIDToNameResponse:
24+
return CATAssetIDToNameResponse(*TEST_ASSET_ID_NAME_MAPPING.get(request.asset_id, (None, None)))
2425

2526

2627
@pytest.mark.anyio

chia/_tests/wallet/rpc/test_wallet_rpc.py

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@
104104
from chia.wallet.wallet_protocol import WalletProtocol
105105
from chia.wallet.wallet_request_types import (
106106
AddKey,
107+
CATAssetIDToName,
107108
CATGetAssetID,
108109
CATGetName,
109110
CATSetName,
@@ -1212,19 +1213,17 @@ async def test_cat_endpoints(wallet_environments: WalletTestFramework, wallet_ty
12121213
).name == wallet_type.default_wallet_name_for_unknown_cat(asset_id.hex())
12131214
await env_0.rpc_client.set_cat_name(CATSetName(cat_0_id, "My cat"))
12141215
assert (await env_0.rpc_client.get_cat_name(CATGetName(cat_0_id))).name == "My cat"
1215-
result = await env_0.rpc_client.cat_asset_id_to_name(asset_id)
1216-
assert result is not None
1217-
wid, name = result
1218-
assert wid == cat_0_id
1219-
assert name == "My cat"
1220-
result = await env_0.rpc_client.cat_asset_id_to_name(bytes32.zeros)
1221-
assert result is None
1216+
asset_to_name_response = await env_0.rpc_client.cat_asset_id_to_name(CATAssetIDToName(asset_id))
1217+
assert asset_to_name_response.wallet_id == cat_0_id
1218+
assert asset_to_name_response.name == "My cat"
1219+
asset_to_name_response = await env_0.rpc_client.cat_asset_id_to_name(CATAssetIDToName(bytes32.zeros))
1220+
assert asset_to_name_response.name is None
12221221
verified_asset_id = next(iter(DEFAULT_CATS.items()))[1]["asset_id"]
1223-
result = await env_0.rpc_client.cat_asset_id_to_name(bytes32.from_hexstr(verified_asset_id))
1224-
assert result is not None
1225-
should_be_none, name = result
1226-
assert should_be_none is None
1227-
assert name == next(iter(DEFAULT_CATS.items()))[1]["name"]
1222+
asset_to_name_response = await env_0.rpc_client.cat_asset_id_to_name(
1223+
CATAssetIDToName(bytes32.from_hexstr(verified_asset_id))
1224+
)
1225+
assert asset_to_name_response.wallet_id is None
1226+
assert asset_to_name_response.name == next(iter(DEFAULT_CATS.items()))[1]["name"]
12281227

12291228
# Creates a second wallet with the same CAT
12301229
res = await env_1.rpc_client.create_wallet_for_existing_cat(asset_id)

chia/cmds/wallet_funcs.py

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@
4545
from chia.wallet.vc_wallet.vc_store import VCProofs
4646
from chia.wallet.wallet_coin_store import GetCoinRecords
4747
from chia.wallet.wallet_request_types import (
48+
CATAssetIDToName,
49+
CATAssetIDToNameResponse,
4850
CATGetName,
4951
CATSetName,
5052
CATSpendResponse,
@@ -94,7 +96,7 @@
9496
)
9597
from chia.wallet.wallet_rpc_client import WalletRpcClient
9698

97-
CATNameResolver = Callable[[bytes32], Awaitable[Optional[tuple[Optional[uint32], str]]]]
99+
CATNameResolver = Callable[[CATAssetIDToName], Awaitable[CATAssetIDToNameResponse]]
98100

99101
transaction_type_descriptions = {
100102
TransactionType.INCOMING_TX: "received",
@@ -471,21 +473,19 @@ async def add_token(
471473
root_path: pathlib.Path, wallet_rpc_port: Optional[int], fp: Optional[int], asset_id: bytes32, token_name: str
472474
) -> None:
473475
async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, fingerprint, _):
474-
existing_info: Optional[tuple[Optional[uint32], str]] = await wallet_client.cat_asset_id_to_name(asset_id)
475-
if existing_info is None:
476-
wallet_id = None
477-
old_name = None
478-
else:
479-
wallet_id, old_name = existing_info
476+
existing_info = await wallet_client.cat_asset_id_to_name(CATAssetIDToName(asset_id))
480477

481-
if wallet_id is None:
478+
if existing_info.wallet_id is None:
482479
response = await wallet_client.create_wallet_for_existing_cat(asset_id)
483480
wallet_id = response["wallet_id"]
484481
await wallet_client.set_cat_name(CATSetName(wallet_id, token_name))
485482
print(f"Successfully added {token_name} with wallet id {wallet_id} on key {fingerprint}")
486483
else:
487-
await wallet_client.set_cat_name(CATSetName(wallet_id, token_name))
488-
print(f"Successfully renamed {old_name} with wallet_id {wallet_id} on key {fingerprint} to {token_name}")
484+
await wallet_client.set_cat_name(CATSetName(existing_info.wallet_id, token_name))
485+
print(
486+
f"Successfully renamed {existing_info.name} with wallet_id {existing_info.wallet_id}"
487+
f" on key {fingerprint} to {token_name}"
488+
)
489489

490490

491491
async def make_offer(
@@ -514,9 +514,9 @@ async def make_offer(
514514
try:
515515
b32_id = bytes32.from_hexstr(name)
516516
id: Union[uint32, str] = b32_id.hex()
517-
result = await wallet_client.cat_asset_id_to_name(b32_id)
518-
if result is not None:
519-
name = result[1]
517+
result = await wallet_client.cat_asset_id_to_name(CATAssetIDToName(b32_id))
518+
if result.name is not None:
519+
name = result.name
520520
else:
521521
name = "Unknown CAT"
522522
unit = units["cat"]
@@ -680,10 +680,10 @@ async def print_offer_summary(
680680
description = " [Typically represents change returned from the included fee]"
681681
else:
682682
unit = units["cat"]
683-
result = await cat_name_resolver(bytes32.from_hexstr(asset_id))
684-
if result is not None:
685-
wid = str(result[0])
686-
name = result[1]
683+
result = await cat_name_resolver(CATAssetIDToName(bytes32.from_hexstr(asset_id)))
684+
if result.name is not None:
685+
wid = str(result.wallet_id)
686+
name = result.name
687687
output: str = f" - {name}"
688688
mojo_str: str = f"{mojo_amount} {'mojo' if mojo_amount == 1 else 'mojos'}"
689689
if len(wid) > 0:
@@ -846,9 +846,9 @@ async def take_offer(
846846
if fungible_asset_id is None:
847847
nft_royalty_currency = network_xch
848848
else:
849-
result = await wallet_client.cat_asset_id_to_name(fungible_asset_id)
850-
if result is not None:
851-
nft_royalty_currency = result[1]
849+
result = await wallet_client.cat_asset_id_to_name(CATAssetIDToName(fungible_asset_id))
850+
if result.name is not None:
851+
nft_royalty_currency = result.name
852852
fungible_assets.append(
853853
FungibleAsset(nft_royalty_currency, uint64(requested[fungible_asset_id_str]))
854854
)

chia/wallet/wallet_request_types.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -648,6 +648,19 @@ class CATGetAssetIDResponse(Streamable):
648648
asset_id: bytes32
649649

650650

651+
@streamable
652+
@dataclass(frozen=True)
653+
class CATAssetIDToName(Streamable):
654+
asset_id: bytes32
655+
656+
657+
@streamable
658+
@dataclass(frozen=True)
659+
class CATAssetIDToNameResponse(Streamable):
660+
wallet_id: Optional[uint32]
661+
name: Optional[str]
662+
663+
651664
@streamable
652665
@dataclass(frozen=True)
653666
class DIDSetWalletName(Streamable):

chia/wallet/wallet_rpc_api.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,8 @@
112112
ApplySignatures,
113113
ApplySignaturesResponse,
114114
BalanceResponse,
115+
CATAssetIDToName,
116+
CATAssetIDToNameResponse,
115117
CATGetAssetID,
116118
CATGetAssetIDResponse,
117119
CATGetName,
@@ -2226,15 +2228,16 @@ async def cat_get_asset_id(self, request: CATGetAssetID) -> CATGetAssetIDRespons
22262228
asset_id: str = wallet.get_asset_id()
22272229
return CATGetAssetIDResponse(asset_id=bytes32.from_hexstr(asset_id), wallet_id=request.wallet_id)
22282230

2229-
async def cat_asset_id_to_name(self, request: dict[str, Any]) -> EndpointResult:
2230-
wallet = await self.service.wallet_state_manager.get_wallet_for_asset_id(request["asset_id"])
2231+
@marshal
2232+
async def cat_asset_id_to_name(self, request: CATAssetIDToName) -> CATAssetIDToNameResponse:
2233+
wallet = await self.service.wallet_state_manager.get_wallet_for_asset_id(request.asset_id.hex())
22312234
if wallet is None:
2232-
if request["asset_id"] in DEFAULT_CATS:
2233-
return {"wallet_id": None, "name": DEFAULT_CATS[request["asset_id"]]["name"]}
2235+
if request.asset_id.hex() in DEFAULT_CATS:
2236+
return CATAssetIDToNameResponse(wallet_id=None, name=DEFAULT_CATS[request.asset_id.hex()]["name"])
22342237
else:
2235-
raise ValueError("The asset ID specified does not belong to a wallet")
2238+
return CATAssetIDToNameResponse(wallet_id=None, name=None)
22362239
else:
2237-
return {"wallet_id": wallet.id(), "name": (wallet.get_name())}
2240+
return CATAssetIDToNameResponse(wallet_id=wallet.id(), name=wallet.get_name())
22382241

22392242
@tx_endpoint(push=False)
22402243
async def create_offer_for_ids(

chia/wallet/wallet_rpc_client.py

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
ApplySignaturesResponse,
2525
CancelOfferResponse,
2626
CancelOffersResponse,
27+
CATAssetIDToName,
28+
CATAssetIDToNameResponse,
2729
CATGetAssetID,
2830
CATGetAssetIDResponse,
2931
CATGetName,
@@ -637,15 +639,8 @@ async def get_cat_asset_id(self, request: CATGetAssetID) -> CATGetAssetIDRespons
637639
async def get_stray_cats(self) -> GetStrayCATsResponse:
638640
return GetStrayCATsResponse.from_json_dict(await self.fetch("get_stray_cats", {}))
639641

640-
async def cat_asset_id_to_name(self, asset_id: bytes32) -> Optional[tuple[Optional[uint32], str]]:
641-
request = {"asset_id": asset_id.hex()}
642-
try:
643-
res = await self.fetch("cat_asset_id_to_name", request)
644-
except ValueError: # This happens if the asset_id is unknown
645-
return None
646-
647-
wallet_id: Optional[uint32] = None if res["wallet_id"] is None else uint32(res["wallet_id"])
648-
return wallet_id, res["name"]
642+
async def cat_asset_id_to_name(self, request: CATAssetIDToName) -> CATAssetIDToNameResponse:
643+
return CATAssetIDToNameResponse.from_json_dict(await self.fetch("cat_asset_id_to_name", request.to_json_dict()))
649644

650645
async def get_cat_name(self, request: CATGetName) -> CATGetNameResponse:
651646
return CATGetNameResponse.from_json_dict(await self.fetch("cat_get_name", request.to_json_dict()))

0 commit comments

Comments
 (0)