mirror of
https://github.com/Chia-Network/chia-blockchain.git
synced 2024-09-21 00:24:37 +03:00
add test coverage for driver dict in RPC
This commit is contained in:
parent
20aa9b3476
commit
2d8d5c785d
@ -920,24 +920,26 @@ class WalletRpcApi:
|
||||
offer: Dict[str, int] = request["offer"]
|
||||
fee: uint64 = uint64(request.get("fee", 0))
|
||||
validate_only: bool = request.get("validate_only", False)
|
||||
driver_dict_str: Optional[Dict[str, str]] = request.get("driver_dict", None)
|
||||
driver_dict_str: Optional[Dict[str, Any]] = request.get("driver_dict", None)
|
||||
|
||||
# This driver_dict construction is to maintain backward compatibility where everything is assumed to be a CAT
|
||||
driver_dict: Dict[bytes32, PuzzleInfo] = {}
|
||||
if driver_dict_str is None:
|
||||
for key in offer:
|
||||
if len(key) == 64:
|
||||
asset_id = bytes32.from_hexstr(key)
|
||||
driver_dict[asset_id] = PuzzleInfo({"type": AssetType.CAT, "tail": asset_id})
|
||||
driver_dict[bytes32.from_hexstr(key)] = PuzzleInfo(
|
||||
{"type": AssetType.CAT.value, "tail": "0x" + key}
|
||||
)
|
||||
else:
|
||||
for key, value in driver_dict_str:
|
||||
cast_type_driver_dict = driver_dict_str[key]
|
||||
cast_type_driver_dict["type"] = AssetType(cast_type_driver_dict["type"])
|
||||
driver_dict[bytes32.from_hexstr(key)] = PuzzleInfo(cast_type_driver_dict)
|
||||
for key, value in driver_dict_str.items():
|
||||
driver_dict[bytes32.from_hexstr(key)] = PuzzleInfo(value)
|
||||
|
||||
modified_offer = {}
|
||||
for key in offer:
|
||||
modified_offer[int(key)] = offer[key]
|
||||
if len(key) == 64:
|
||||
modified_offer[bytes32.from_hexstr(key)] = offer[key]
|
||||
else:
|
||||
modified_offer[int(key)] = offer[key]
|
||||
|
||||
async with self.service.wallet_state_manager.lock:
|
||||
(
|
||||
|
@ -420,13 +420,24 @@ class WalletRpcClient(RpcClient):
|
||||
|
||||
# Offers
|
||||
async def create_offer_for_ids(
|
||||
self, offer_dict: Dict[uint32, int], fee=uint64(0), validate_only: bool = False
|
||||
self,
|
||||
offer_dict: Dict[uint32, int],
|
||||
driver_dict: Dict[str, Any] = None,
|
||||
fee=uint64(0),
|
||||
validate_only: bool = False,
|
||||
) -> Tuple[Optional[Offer], TradeRecord]:
|
||||
send_dict: Dict[str, int] = {}
|
||||
for key in offer_dict:
|
||||
send_dict[str(key)] = offer_dict[key]
|
||||
|
||||
res = await self.fetch("create_offer_for_ids", {"offer": send_dict, "validate_only": validate_only, "fee": fee})
|
||||
req = {
|
||||
"offer": send_dict,
|
||||
"validate_only": validate_only,
|
||||
"fee": fee,
|
||||
}
|
||||
if driver_dict is not None:
|
||||
req["driver_dict"] = driver_dict
|
||||
res = await self.fetch("create_offer_for_ids", req)
|
||||
offer: Optional[Offer] = None if validate_only else Offer.from_bech32(res["offer"])
|
||||
offer_str: str = "" if offer is None else bytes(offer).hex()
|
||||
return offer, TradeRecord.from_json_dict_convenience(res["trade_record"], offer_str)
|
||||
|
@ -677,12 +677,16 @@ async def test_offer_endpoints(wallet_rpc_environment: WalletRpcTestEnvironment)
|
||||
await farm_transaction(full_node_api, wallet_node, spend_bundle)
|
||||
|
||||
# Create an offer of 5 chia for one CAT
|
||||
offer, trade_record = await client.create_offer_for_ids({uint32(1): -5, cat_0_id: 1}, validate_only=True)
|
||||
offer, trade_record = await client.create_offer_for_ids({uint32(1): -5, col.hex(): 1}, validate_only=True)
|
||||
all_offers = await client.get_all_offers()
|
||||
assert len(all_offers) == 0
|
||||
assert offer is None
|
||||
|
||||
offer, trade_record = await client.create_offer_for_ids({uint32(1): -5, cat_0_id: 1}, fee=uint64(1))
|
||||
offer, trade_record = await client.create_offer_for_ids(
|
||||
{uint32(1): -5, col.hex(): 1},
|
||||
driver_dict={col.hex(): {"type": "CAT", "tail": "0x" + col.hex()}},
|
||||
fee=uint64(1),
|
||||
)
|
||||
assert offer is not None
|
||||
|
||||
col = await client.get_cat_asset_id(cat_0_id)
|
||||
|
Loading…
Reference in New Issue
Block a user