mirror of
https://github.com/Chia-Network/chia-blockchain.git
synced 2026-08-24 02:24:23 -05:00
[LABS-489] Generate Wallet RPC (#21141)
* Generate Wallet RPC * Comment by @cursor * fix test * executable bit * Comments by @cursor & fix tests * Fix tests * Fix tests * Comments by @cursor * test coverage * Add pre-commit build for wallet stubs * Comments by @cursor * Comments by @cursor * Comments by @cursor * Comments by @cursor * Port `get_coin_records` and `get_height_info` to `@marshal` decorator * Remove executable bits? * Comments by @cursor * Comments by @cursor * Add comment at top of .pyi file
This commit is contained in:
@@ -13,6 +13,13 @@ repos:
|
||||
entry: ./activated.py python chia/_tests/build-init-files.py -v --root .
|
||||
language: system
|
||||
pass_filenames: false
|
||||
- repo: local
|
||||
hooks:
|
||||
- id: generate_wallet_rpc_client_stubs
|
||||
name: Generate wallet RPC client stubs
|
||||
entry: ./activated.py python tools/generate_wallet_rpc_client_stub.py
|
||||
language: system
|
||||
pass_filenames: false
|
||||
- repo: local
|
||||
hooks:
|
||||
- id: ruff_format
|
||||
|
||||
@@ -16,7 +16,7 @@ from copy import deepcopy
|
||||
from dataclasses import dataclass
|
||||
from enum import IntEnum
|
||||
from pathlib import Path
|
||||
from typing import Any, cast
|
||||
from typing import Any
|
||||
from unittest.mock import AsyncMock, MagicMock
|
||||
|
||||
import aiohttp
|
||||
@@ -78,7 +78,6 @@ from chia.util.task_referencer import create_referenced_task
|
||||
from chia.util.timing import adjusted_timeout, backoff_times
|
||||
from chia.wallet.lineage_proof import LineageProof
|
||||
from chia.wallet.trading.offer import Offer as TradingOffer
|
||||
from chia.wallet.transaction_record import TransactionRecord
|
||||
from chia.wallet.util.tx_config import DEFAULT_TX_CONFIG
|
||||
from chia.wallet.wallet_node import WalletNode
|
||||
from chia.wallet.wallet_request_types import (
|
||||
@@ -88,6 +87,9 @@ from chia.wallet.wallet_request_types import (
|
||||
DLOwnedSingletonsResponse,
|
||||
DLStopTracking,
|
||||
DLTrackNew,
|
||||
Empty,
|
||||
GetTransaction,
|
||||
LogIn,
|
||||
)
|
||||
from chia.wallet.wallet_rpc_api import WalletRpcApi
|
||||
from chia.wallet.wallet_service import WalletService
|
||||
@@ -202,11 +204,11 @@ async def farm_block_check_singleton(
|
||||
|
||||
async def is_transaction_confirmed(api: WalletRpcApi, tx_id: bytes32) -> bool:
|
||||
try:
|
||||
val = await api.get_transaction({"transaction_id": tx_id.hex()})
|
||||
val = await api.get_transaction(GetTransaction(transaction_id=tx_id))
|
||||
except ValueError: # pragma: no cover
|
||||
return False
|
||||
|
||||
return True if TransactionRecord.from_json_dict(val["transaction"]).confirmed else False # mypy
|
||||
return val.transaction.confirmed
|
||||
|
||||
|
||||
async def check_mempool_spend_count_or_fail(
|
||||
@@ -214,9 +216,8 @@ async def check_mempool_spend_count_or_fail(
|
||||
) -> bool:
|
||||
"""Poll mempool count but raise immediately if the transaction was rejected."""
|
||||
try:
|
||||
val = await wallet_rpc_api.get_transaction({"transaction_id": tx_id.hex()})
|
||||
tx_record = TransactionRecord.from_json_dict(val["transaction"])
|
||||
for _, status, error in tx_record.sent_to:
|
||||
val = await wallet_rpc_api.get_transaction(GetTransaction(transaction_id=tx_id))
|
||||
for _, status, error in val.transaction.sent_to:
|
||||
if status == MempoolInclusionStatus.FAILED.value:
|
||||
raise RuntimeError(f"Transaction {tx_id} rejected by mempool: {error}") # pragma: no cover
|
||||
except ValueError: # pragma: no cover
|
||||
@@ -2449,16 +2450,17 @@ async def test_wallet_log_in_changes_active_fingerprint(
|
||||
wallet_rpc_api, _full_node_api, wallet_rpc_port, _ph, bt = await init_wallet_and_node(
|
||||
self_hostname, one_wallet_and_one_simulator_services
|
||||
)
|
||||
primary_fingerprint = cast(int, (await wallet_rpc_api.get_logged_in_fingerprint(request={}))["fingerprint"])
|
||||
primary_fingerprint = (await wallet_rpc_api.get_logged_in_fingerprint(Empty())).fingerprint
|
||||
assert primary_fingerprint is not None
|
||||
|
||||
mnemonic = create_mnemonic()
|
||||
assert wallet_rpc_api.service.local_keychain is not None
|
||||
private_key = wallet_rpc_api.service.local_keychain.add_key(mnemonic_or_pk=mnemonic)
|
||||
secondary_fingerprint: int = private_key.get_g1().get_fingerprint()
|
||||
|
||||
await wallet_rpc_api.log_in(request={"fingerprint": primary_fingerprint})
|
||||
await wallet_rpc_api.log_in(LogIn(fingerprint=primary_fingerprint))
|
||||
|
||||
active_fingerprint = cast(int, (await wallet_rpc_api.get_logged_in_fingerprint(request={}))["fingerprint"])
|
||||
active_fingerprint = (await wallet_rpc_api.get_logged_in_fingerprint(Empty())).fingerprint
|
||||
assert active_fingerprint == primary_fingerprint
|
||||
|
||||
async with init_data_layer_service(wallet_rpc_port=wallet_rpc_port, bt=bt) as data_layer_service:
|
||||
@@ -2496,7 +2498,7 @@ async def test_wallet_log_in_changes_active_fingerprint(
|
||||
else: # pragma: no cover
|
||||
assert False, "unhandled parametrization"
|
||||
|
||||
active_fingerprint = cast(int, (await wallet_rpc_api.get_logged_in_fingerprint(request={}))["fingerprint"])
|
||||
active_fingerprint = (await wallet_rpc_api.get_logged_in_fingerprint(Empty())).fingerprint
|
||||
assert active_fingerprint == secondary_fingerprint
|
||||
|
||||
|
||||
|
||||
@@ -57,9 +57,12 @@ from chia.wallet.wallet_node import WalletNode
|
||||
from chia.wallet.wallet_request_types import (
|
||||
CreateNewWallet,
|
||||
CreateNewWalletType,
|
||||
DIDFindLostDID,
|
||||
DIDGetCurrentCoinInfo,
|
||||
DIDGetInfo,
|
||||
DIDType,
|
||||
SetWalletResyncOnStartup,
|
||||
SignMessageByID,
|
||||
)
|
||||
from chia.wallet.wallet_rpc_api import WalletRpcApi
|
||||
from chia.wallet.wallet_spend_bundle import WalletSpendBundle
|
||||
@@ -695,7 +698,7 @@ async def test_did_auto_transfer_limit(
|
||||
backup_data,
|
||||
)
|
||||
assert did_wallet_10.did_info.origin_coin is not None
|
||||
await api_1.did_find_lost_did({"coin_id": did_wallet_10.did_info.origin_coin.name().hex()})
|
||||
await api_1.did_find_lost_did(DIDFindLostDID(coin_id=did_wallet_10.did_info.origin_coin.name().hex()))
|
||||
await time_out_assert(15, did_wallet_10.get_confirmed_balance, 101)
|
||||
await time_out_assert(15, did_wallet_10.get_unconfirmed_balance, 101)
|
||||
|
||||
@@ -718,7 +721,7 @@ async def test_did_auto_transfer_limit(
|
||||
|
||||
# Try and find lost coin
|
||||
assert did_wallet_9.did_info.origin_coin is not None
|
||||
await api_1.did_find_lost_did({"coin_id": did_wallet_9.did_info.origin_coin.name().hex()})
|
||||
await api_1.did_find_lost_did(DIDFindLostDID(coin_id=did_wallet_9.did_info.origin_coin.name().hex()))
|
||||
did_wallets = list(
|
||||
filter(
|
||||
lambda w: w.type == WalletType.DECENTRALIZED_ID.value,
|
||||
@@ -1103,44 +1106,71 @@ async def test_did_sign_message(wallet_environments: WalletTestFramework, capsys
|
||||
await DidSignMessageCMD(
|
||||
rpc_info=wallet_environments.cmd_tx_endpoint_args(env)["rpc_info"],
|
||||
did_id=CliAddress(did_wallet_1.did_info.origin_coin.name(), did_id, AddressType.DID),
|
||||
hex_message=message.encode().hex(),
|
||||
hex_message=message,
|
||||
).run()
|
||||
output = capsys.readouterr().out
|
||||
assert f"Message: {message.encode().hex()}" in output
|
||||
assert f"Message: {message}" in output
|
||||
assert "Public Key:" in output
|
||||
assert "Signature:" in output
|
||||
|
||||
response = await api_0.sign_message_by_id({"id": did_id, "message": message})
|
||||
pubkey = G1Element.from_bytes(bytes.fromhex(output.split("Public Key:")[1].split("\n")[0].strip()))
|
||||
signature = G2Element.from_bytes(bytes.fromhex(output.split("Signature:")[1].split("\n")[0].strip()))
|
||||
|
||||
puzzle: Program = Program.to((CHIP_0002_SIGN_MESSAGE_PREFIX, message))
|
||||
assert AugSchemeMPL.verify(
|
||||
G1Element.from_bytes(hexstr_to_bytes(response["pubkey"])),
|
||||
pubkey,
|
||||
puzzle.get_tree_hash(),
|
||||
G2Element.from_bytes(hexstr_to_bytes(response["signature"])),
|
||||
signature,
|
||||
)
|
||||
|
||||
# Test hex string
|
||||
message = "0123456789ABCDEF"
|
||||
response = await api_0.sign_message_by_id({"id": did_id, "message": message, "is_hex": True})
|
||||
response = await api_0.sign_message_by_id(
|
||||
SignMessageByID(
|
||||
id=encode_puzzle_hash(did_wallet_1.did_info.origin_coin.name(), AddressType.DID.value),
|
||||
message=message,
|
||||
is_hex=True,
|
||||
)
|
||||
)
|
||||
puzzle = Program.to((CHIP_0002_SIGN_MESSAGE_PREFIX, bytes.fromhex(message)))
|
||||
puzzle = Program.to((CHIP_0002_SIGN_MESSAGE_PREFIX, bytes.fromhex(message)))
|
||||
assert AugSchemeMPL.verify(
|
||||
G1Element.from_bytes(hexstr_to_bytes(response["pubkey"])),
|
||||
response.pubkey,
|
||||
puzzle.get_tree_hash(),
|
||||
G2Element.from_bytes(hexstr_to_bytes(response["signature"])),
|
||||
response.signature,
|
||||
)
|
||||
|
||||
message = "Hello World"
|
||||
response = await api_0.sign_message_by_id({"id": did_id, "message": message, "is_hex": False, "safe_mode": False})
|
||||
assert AugSchemeMPL.verify(
|
||||
G1Element.from_bytes(hexstr_to_bytes(response["pubkey"])),
|
||||
bytes(message, "utf-8"),
|
||||
G2Element.from_bytes(hexstr_to_bytes(response["signature"])),
|
||||
assert did_wallet_1.did_info.origin_coin is not None
|
||||
response = await api_0.sign_message_by_id(
|
||||
SignMessageByID(
|
||||
id=encode_puzzle_hash(did_wallet_1.did_info.origin_coin.name(), AddressType.DID.value),
|
||||
message=message,
|
||||
is_hex=False,
|
||||
safe_mode=False,
|
||||
)
|
||||
)
|
||||
|
||||
message = "0123456789ABCDEF"
|
||||
response = await api_0.sign_message_by_id({"id": did_id, "message": message, "is_hex": True, "safe_mode": False})
|
||||
assert AugSchemeMPL.verify(
|
||||
G1Element.from_bytes(hexstr_to_bytes(response["pubkey"])),
|
||||
response.pubkey,
|
||||
bytes(message, "utf-8"),
|
||||
response.signature,
|
||||
)
|
||||
# Test BLS sign hex
|
||||
message = "0123456789ABCDEF"
|
||||
assert did_wallet_1.did_info.origin_coin is not None
|
||||
response = await api_0.sign_message_by_id(
|
||||
SignMessageByID(
|
||||
id=encode_puzzle_hash(did_wallet_1.did_info.origin_coin.name(), AddressType.DID.value),
|
||||
message=message,
|
||||
is_hex=True,
|
||||
safe_mode=False,
|
||||
)
|
||||
)
|
||||
|
||||
assert AugSchemeMPL.verify(
|
||||
response.pubkey,
|
||||
hexstr_to_bytes(message),
|
||||
G2Element.from_bytes(hexstr_to_bytes(response["signature"])),
|
||||
response.signature,
|
||||
)
|
||||
|
||||
|
||||
@@ -1414,9 +1444,9 @@ async def test_did_resync(
|
||||
did_wallet_2 = wallet_node_2.wallet_state_manager.get_wallet(uint32(2), DIDWallet)
|
||||
did_info = did_wallet_2.did_info
|
||||
# set flag to reset wallet sync data on start
|
||||
await wallet_api_1.set_wallet_resync_on_startup({"enable": True})
|
||||
await wallet_api_1.set_wallet_resync_on_startup(SetWalletResyncOnStartup(enable=True))
|
||||
fingerprint_1 = wallet_node_1.logged_in_fingerprint
|
||||
await wallet_api_2.set_wallet_resync_on_startup({"enable": True})
|
||||
await wallet_api_2.set_wallet_resync_on_startup(SetWalletResyncOnStartup(enable=True))
|
||||
fingerprint_2 = wallet_node_2.logged_in_fingerprint
|
||||
# 2 reward coins
|
||||
assert len(await wallet_node_1.wallet_state_manager.coin_store.get_all_unspent_coins()) == 2
|
||||
|
||||
@@ -401,7 +401,7 @@ class TestWalletRpc:
|
||||
wallet_service.config,
|
||||
) as client:
|
||||
with pytest.raises(ValueError, match="No peer connected"):
|
||||
await wallet_service.rpc_server.rpc_api.dl_verify_proof(fake_gpr.to_json_dict())
|
||||
await wallet_service.rpc_server.rpc_api.dl_verify_proof(fake_gpr)
|
||||
|
||||
await wallet_node.server.start_client(PeerInfo(self_hostname, full_node_server.get_port()), None)
|
||||
await validate_get_routes(client, wallet_service.rpc_server.rpc_api)
|
||||
|
||||
@@ -7,7 +7,7 @@ import logging
|
||||
import re
|
||||
from operator import attrgetter
|
||||
from types import SimpleNamespace
|
||||
from typing import Any
|
||||
from typing import Any, cast
|
||||
from unittest.mock import AsyncMock, MagicMock, patch
|
||||
|
||||
import aiosqlite
|
||||
@@ -65,6 +65,7 @@ from chia.util.bech32m import decode_puzzle_hash, encode_puzzle_hash
|
||||
from chia.util.config import load_config, lock_and_load_config, save_config
|
||||
from chia.util.db_wrapper import DBWrapper2
|
||||
from chia.util.hash import std_hash
|
||||
from chia.util.streamable import Streamable, streamable
|
||||
from chia.wallet.cat_wallet.cat_constants import DEFAULT_CATS
|
||||
from chia.wallet.cat_wallet.cat_utils import CAT_MOD, construct_cat_puzzle
|
||||
from chia.wallet.cat_wallet.cat_wallet import CATWallet
|
||||
@@ -180,6 +181,8 @@ from chia.wallet.wallet_request_types import (
|
||||
SpendClawbackCoins,
|
||||
SplitCoins,
|
||||
TakeOffer,
|
||||
TransactionEndpointRequest,
|
||||
TransactionEndpointResponse,
|
||||
VCSpend,
|
||||
VerifySignature,
|
||||
VerifySignatureResponse,
|
||||
@@ -188,6 +191,7 @@ from chia.wallet.wallet_request_types import (
|
||||
)
|
||||
from chia.wallet.wallet_rpc_api import WalletRpcApi
|
||||
from chia.wallet.wallet_rpc_client import WalletRpcClient
|
||||
from chia.wallet.wallet_rpc_metadata import WalletRpcMetadata
|
||||
from chia.wallet.wallet_spend_bundle import WalletSpendBundle
|
||||
from chia.wallet.wallet_state_manager import SyncStatus
|
||||
|
||||
@@ -2667,7 +2671,7 @@ async def test_get_height_info_response_variants(
|
||||
api_self = SimpleNamespace(
|
||||
service=SimpleNamespace(wallet_state_manager=SimpleNamespace(blockchain=mock_blockchain))
|
||||
)
|
||||
response = GetHeightInfoResponse.from_json_dict(await WalletRpcApi.get_height_info(api_self, {}))
|
||||
response = await WalletRpcApi.get_height_info(cast(WalletRpcApi, api_self), GetHeightInfo())
|
||||
assert isinstance(response, GetHeightInfoResponse)
|
||||
assert response.height == sync_height
|
||||
assert response.is_transaction_block == expected_is_tx
|
||||
@@ -5135,3 +5139,29 @@ def test_miscellaneous_wallet_rpc_errors() -> None:
|
||||
spent_height=uint32(0),
|
||||
coinbase=False,
|
||||
)
|
||||
|
||||
@streamable
|
||||
@dataclasses.dataclass(frozen=True)
|
||||
class NotATXRequest(Streamable):
|
||||
pass
|
||||
|
||||
@streamable
|
||||
@dataclasses.dataclass(frozen=True)
|
||||
class NotATXResponse(Streamable):
|
||||
pass
|
||||
|
||||
class YesATXRequest(TransactionEndpointRequest):
|
||||
pass
|
||||
|
||||
class YesATXResponse(TransactionEndpointResponse):
|
||||
pass
|
||||
|
||||
with pytest.raises(TypeError, match="tx_endpoint request type must subclass TransactionEndpointRequest"):
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="foo", tx_endpoint=True, request_type=NotATXRequest, response_type=YesATXResponse
|
||||
)
|
||||
|
||||
with pytest.raises(TypeError, match="tx_endpoint response type must subclass TransactionEndpointResponse"):
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="foo", tx_endpoint=True, request_type=YesATXRequest, response_type=NotATXResponse
|
||||
)
|
||||
|
||||
@@ -5,7 +5,7 @@ from pathlib import Path
|
||||
from typing import Any
|
||||
|
||||
import pytest
|
||||
from chia_rs import AugSchemeMPL, Coin, CoinSpend, G1Element, G2Element
|
||||
from chia_rs import AugSchemeMPL, Coin, CoinSpend
|
||||
from chia_rs.sized_bytes import bytes32
|
||||
from chia_rs.sized_ints import uint8, uint16, uint32, uint64
|
||||
|
||||
@@ -37,6 +37,7 @@ from chia.wallet.wallet_request_types import (
|
||||
GetTransactionMemo,
|
||||
GetTransactions,
|
||||
SendTransaction,
|
||||
SignMessageByAddress,
|
||||
SpendClawbackCoins,
|
||||
)
|
||||
|
||||
@@ -2153,59 +2154,61 @@ class TestWalletSimulator:
|
||||
|
||||
async with env.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=True) as action_scope:
|
||||
ph = await action_scope.get_puzzle_hash(env.wallet_state_manager)
|
||||
response = await api_0.sign_message_by_address({"address": encode_puzzle_hash(ph, "xch"), "message": message})
|
||||
response = await api_0.sign_message_by_address(
|
||||
SignMessageByAddress(address=encode_puzzle_hash(ph, "xch"), message=message)
|
||||
)
|
||||
puzzle: Program = Program.to((CHIP_0002_SIGN_MESSAGE_PREFIX, message))
|
||||
|
||||
assert AugSchemeMPL.verify(
|
||||
G1Element.from_bytes(hexstr_to_bytes(response["pubkey"])),
|
||||
response.pubkey,
|
||||
puzzle.get_tree_hash(),
|
||||
G2Element.from_bytes(hexstr_to_bytes(response["signature"])),
|
||||
response.signature,
|
||||
)
|
||||
# Test hex string
|
||||
message = "0123456789ABCDEF"
|
||||
response = await api_0.sign_message_by_address(
|
||||
{"address": encode_puzzle_hash(ph, "xch"), "message": message, "is_hex": True}
|
||||
SignMessageByAddress(address=encode_puzzle_hash(ph, "xch"), message=message, is_hex=True)
|
||||
)
|
||||
puzzle = Program.to((CHIP_0002_SIGN_MESSAGE_PREFIX, bytes.fromhex(message)))
|
||||
|
||||
assert AugSchemeMPL.verify(
|
||||
G1Element.from_bytes(hexstr_to_bytes(response["pubkey"])),
|
||||
response.pubkey,
|
||||
puzzle.get_tree_hash(),
|
||||
G2Element.from_bytes(hexstr_to_bytes(response["signature"])),
|
||||
response.signature,
|
||||
)
|
||||
# Test informal input
|
||||
message = "0123456789ABCDEF"
|
||||
response = await api_0.sign_message_by_address(
|
||||
{"address": encode_puzzle_hash(ph, "xch"), "message": message, "is_hex": "true", "safe_mode": "true"}
|
||||
SignMessageByAddress(address=encode_puzzle_hash(ph, "xch"), message=message, is_hex=True, safe_mode=True)
|
||||
)
|
||||
puzzle = Program.to((CHIP_0002_SIGN_MESSAGE_PREFIX, bytes.fromhex(message)))
|
||||
|
||||
assert AugSchemeMPL.verify(
|
||||
G1Element.from_bytes(hexstr_to_bytes(response["pubkey"])),
|
||||
response.pubkey,
|
||||
puzzle.get_tree_hash(),
|
||||
G2Element.from_bytes(hexstr_to_bytes(response["signature"])),
|
||||
response.signature,
|
||||
)
|
||||
# Test BLS sign string
|
||||
message = "Hello World"
|
||||
response = await api_0.sign_message_by_address(
|
||||
{"address": encode_puzzle_hash(ph, "xch"), "message": message, "is_hex": False, "safe_mode": False}
|
||||
SignMessageByAddress(address=encode_puzzle_hash(ph, "xch"), message=message, is_hex=False, safe_mode=False)
|
||||
)
|
||||
|
||||
assert AugSchemeMPL.verify(
|
||||
G1Element.from_bytes(hexstr_to_bytes(response["pubkey"])),
|
||||
response.pubkey,
|
||||
bytes(message, "utf-8"),
|
||||
G2Element.from_bytes(hexstr_to_bytes(response["signature"])),
|
||||
response.signature,
|
||||
)
|
||||
# Test BLS sign hex
|
||||
message = "0123456789ABCDEF"
|
||||
response = await api_0.sign_message_by_address(
|
||||
{"address": encode_puzzle_hash(ph, "xch"), "message": message, "is_hex": True, "safe_mode": False}
|
||||
SignMessageByAddress(address=encode_puzzle_hash(ph, "xch"), message=message, is_hex=True, safe_mode=False)
|
||||
)
|
||||
|
||||
assert AugSchemeMPL.verify(
|
||||
G1Element.from_bytes(hexstr_to_bytes(response["pubkey"])),
|
||||
response.pubkey,
|
||||
hexstr_to_bytes(message),
|
||||
G2Element.from_bytes(hexstr_to_bytes(response["signature"])),
|
||||
response.signature,
|
||||
)
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
|
||||
@@ -149,6 +149,7 @@ class RpcServer(Generic[_T_RpcApiProtocol]):
|
||||
"""
|
||||
|
||||
rpc_api: _T_RpcApiProtocol
|
||||
rpc_api_routes: dict[str, Endpoint]
|
||||
stop_cb: Callable[[], None]
|
||||
service_name: str
|
||||
ssl_context: SSLContext
|
||||
@@ -183,6 +184,7 @@ class RpcServer(Generic[_T_RpcApiProtocol]):
|
||||
ssl_client_context = ssl_context_for_client(ca_cert_path, ca_key_path, crt_path, key_path, log=log)
|
||||
return cls(
|
||||
rpc_api,
|
||||
rpc_api.get_routes(),
|
||||
stop_cb,
|
||||
service_name,
|
||||
ssl_context,
|
||||
@@ -261,7 +263,7 @@ class RpcServer(Generic[_T_RpcApiProtocol]):
|
||||
|
||||
def _get_routes(self) -> dict[str, Endpoint]:
|
||||
return {
|
||||
**self.rpc_api.get_routes(),
|
||||
**self.rpc_api_routes,
|
||||
**{path: MethodType(handler, self) for path, handler in self._routes.items()},
|
||||
}
|
||||
|
||||
@@ -381,7 +383,7 @@ class RpcServer(Generic[_T_RpcApiProtocol]):
|
||||
f_internal: Endpoint | None = getattr(self, command, None)
|
||||
if f_internal is not None:
|
||||
return await f_internal(data)
|
||||
f_rpc_api: Endpoint | None = getattr(self.rpc_api, command, None)
|
||||
f_rpc_api: Endpoint | None = self.rpc_api_routes.get("/" + command)
|
||||
if f_rpc_api is not None:
|
||||
return await f_rpc_api(data)
|
||||
|
||||
|
||||
+27
-308
File diff suppressed because it is too large
Load Diff
+108
-1027
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,565 @@
|
||||
# This file is generated by tools/generate_wallet_rpc_client_stub.py
|
||||
from chia.data_layer.data_layer_util import DLProof, VerifyProofResponse
|
||||
from chia.rpc.rpc_client import RpcClient
|
||||
from chia.wallet import wallet_request_types
|
||||
from chia.wallet.conditions import Condition, ConditionValidTimes
|
||||
from chia.wallet.puzzles.clawback.metadata import AutoClaimSettings
|
||||
from chia.wallet.util.tx_config import TXConfig
|
||||
|
||||
def client_method_name(endpoint_name: str) -> str: ...
|
||||
|
||||
class WalletRpcClient(RpcClient):
|
||||
async def log_in(
|
||||
self,
|
||||
request: wallet_request_types.LogIn,
|
||||
) -> wallet_request_types.LogInResponse: ...
|
||||
async def get_logged_in_fingerprint(self) -> wallet_request_types.GetLoggedInFingerprintResponse: ...
|
||||
async def get_public_keys(self) -> wallet_request_types.GetPublicKeysResponse: ...
|
||||
async def get_private_key(
|
||||
self,
|
||||
request: wallet_request_types.GetPrivateKey,
|
||||
) -> wallet_request_types.GetPrivateKeyResponse: ...
|
||||
async def generate_mnemonic(self) -> wallet_request_types.GenerateMnemonicResponse: ...
|
||||
async def add_key(
|
||||
self,
|
||||
request: wallet_request_types.AddKey,
|
||||
) -> wallet_request_types.AddKeyResponse: ...
|
||||
async def delete_key(
|
||||
self,
|
||||
request: wallet_request_types.DeleteKey,
|
||||
) -> None: ...
|
||||
async def check_delete_key(
|
||||
self,
|
||||
request: wallet_request_types.CheckDeleteKey,
|
||||
) -> wallet_request_types.CheckDeleteKeyResponse: ...
|
||||
async def delete_all_keys(self) -> None: ...
|
||||
async def set_wallet_resync_on_startup(
|
||||
self,
|
||||
request: wallet_request_types.SetWalletResyncOnStartup,
|
||||
) -> None: ...
|
||||
async def get_sync_status(self) -> wallet_request_types.GetSyncStatusResponse: ...
|
||||
async def get_full_node_peer_count(self) -> wallet_request_types.GetFullNodePeerCountResponse: ...
|
||||
async def get_height_info(
|
||||
self,
|
||||
request: wallet_request_types.GetHeightInfo,
|
||||
) -> wallet_request_types.GetHeightInfoResponse: ...
|
||||
async def push_tx(
|
||||
self,
|
||||
request: wallet_request_types.PushTX,
|
||||
) -> None: ...
|
||||
async def push_transactions(
|
||||
self,
|
||||
request: wallet_request_types.PushTransactions,
|
||||
tx_config: TXConfig,
|
||||
extra_conditions: tuple[Condition, ...] = ...,
|
||||
timelock_info: ConditionValidTimes = ...,
|
||||
) -> wallet_request_types.PushTransactionsResponse: ...
|
||||
async def get_timestamp_for_height(
|
||||
self,
|
||||
request: wallet_request_types.GetTimestampForHeight,
|
||||
) -> wallet_request_types.GetTimestampForHeightResponse: ...
|
||||
async def get_fee_estimate(self) -> wallet_request_types.GetFeeEstimateResponse: ...
|
||||
async def set_auto_claim(
|
||||
self,
|
||||
request: AutoClaimSettings,
|
||||
) -> AutoClaimSettings: ...
|
||||
async def get_auto_claim(self) -> AutoClaimSettings: ...
|
||||
async def get_wallets(
|
||||
self,
|
||||
request: wallet_request_types.GetWallets,
|
||||
) -> wallet_request_types.GetWalletsResponse: ...
|
||||
async def create_new_wallet(
|
||||
self,
|
||||
request: wallet_request_types.CreateNewWallet,
|
||||
tx_config: TXConfig,
|
||||
extra_conditions: tuple[Condition, ...] = ...,
|
||||
timelock_info: ConditionValidTimes = ...,
|
||||
) -> wallet_request_types.CreateNewWalletResponse: ...
|
||||
async def get_wallet_balance(
|
||||
self,
|
||||
request: wallet_request_types.GetWalletBalance,
|
||||
) -> wallet_request_types.GetWalletBalanceResponse: ...
|
||||
async def get_wallet_balances(
|
||||
self,
|
||||
request: wallet_request_types.GetWalletBalances,
|
||||
) -> wallet_request_types.GetWalletBalancesResponse: ...
|
||||
async def get_transaction(
|
||||
self,
|
||||
request: wallet_request_types.GetTransaction,
|
||||
) -> wallet_request_types.GetTransactionResponse: ...
|
||||
async def get_transactions(
|
||||
self,
|
||||
request: wallet_request_types.GetTransactions,
|
||||
) -> wallet_request_types.GetTransactionsResponse: ...
|
||||
async def get_transaction_count(
|
||||
self,
|
||||
request: wallet_request_types.GetTransactionCount,
|
||||
) -> wallet_request_types.GetTransactionCountResponse: ...
|
||||
async def get_next_address(
|
||||
self,
|
||||
request: wallet_request_types.GetNextAddress,
|
||||
) -> wallet_request_types.GetNextAddressResponse: ...
|
||||
async def send_transaction(
|
||||
self,
|
||||
request: wallet_request_types.SendTransaction,
|
||||
tx_config: TXConfig,
|
||||
extra_conditions: tuple[Condition, ...] = ...,
|
||||
timelock_info: ConditionValidTimes = ...,
|
||||
) -> wallet_request_types.SendTransactionResponse: ...
|
||||
async def send_transaction_multi(
|
||||
self,
|
||||
request: wallet_request_types.SendTransactionMulti,
|
||||
tx_config: TXConfig,
|
||||
extra_conditions: tuple[Condition, ...] = ...,
|
||||
timelock_info: ConditionValidTimes = ...,
|
||||
) -> wallet_request_types.SendTransactionMultiResponse: ...
|
||||
async def spend_clawback_coins(
|
||||
self,
|
||||
request: wallet_request_types.SpendClawbackCoins,
|
||||
tx_config: TXConfig,
|
||||
extra_conditions: tuple[Condition, ...] = ...,
|
||||
timelock_info: ConditionValidTimes = ...,
|
||||
) -> wallet_request_types.SpendClawbackCoinsResponse: ...
|
||||
async def get_farmed_amount(
|
||||
self,
|
||||
request: wallet_request_types.GetFarmedAmount,
|
||||
) -> wallet_request_types.GetFarmedAmountResponse: ...
|
||||
async def create_signed_transactions(
|
||||
self,
|
||||
request: wallet_request_types.CreateSignedTransaction,
|
||||
tx_config: TXConfig,
|
||||
extra_conditions: tuple[Condition, ...] = ...,
|
||||
timelock_info: ConditionValidTimes = ...,
|
||||
) -> wallet_request_types.CreateSignedTransactionsResponse: ...
|
||||
async def delete_unconfirmed_transactions(
|
||||
self,
|
||||
request: wallet_request_types.DeleteUnconfirmedTransactions,
|
||||
) -> None: ...
|
||||
async def select_coins(
|
||||
self,
|
||||
request: wallet_request_types.SelectCoins,
|
||||
) -> wallet_request_types.SelectCoinsResponse: ...
|
||||
async def get_spendable_coins(
|
||||
self,
|
||||
request: wallet_request_types.GetSpendableCoins,
|
||||
) -> wallet_request_types.GetSpendableCoinsResponse: ...
|
||||
async def get_coin_records_by_names(
|
||||
self,
|
||||
request: wallet_request_types.GetCoinRecordsByNames,
|
||||
) -> wallet_request_types.GetCoinRecordsByNamesResponse: ...
|
||||
async def get_puzzle_and_solution(
|
||||
self,
|
||||
request: wallet_request_types.GetPuzzleAndSolution,
|
||||
) -> wallet_request_types.GetPuzzleAndSolutionResponse: ...
|
||||
async def get_current_derivation_index(self) -> wallet_request_types.GetCurrentDerivationIndexResponse: ...
|
||||
async def extend_derivation_index(
|
||||
self,
|
||||
request: wallet_request_types.ExtendDerivationIndex,
|
||||
) -> wallet_request_types.ExtendDerivationIndexResponse: ...
|
||||
async def get_notifications(
|
||||
self,
|
||||
request: wallet_request_types.GetNotifications,
|
||||
) -> wallet_request_types.GetNotificationsResponse: ...
|
||||
async def delete_notifications(
|
||||
self,
|
||||
request: wallet_request_types.DeleteNotifications,
|
||||
) -> None: ...
|
||||
async def send_notification(
|
||||
self,
|
||||
request: wallet_request_types.SendNotification,
|
||||
tx_config: TXConfig,
|
||||
extra_conditions: tuple[Condition, ...] = ...,
|
||||
timelock_info: ConditionValidTimes = ...,
|
||||
) -> wallet_request_types.SendNotificationResponse: ...
|
||||
async def sign_message_by_address(
|
||||
self,
|
||||
request: wallet_request_types.SignMessageByAddress,
|
||||
) -> wallet_request_types.SignMessageByAddressResponse: ...
|
||||
async def sign_message_by_id(
|
||||
self,
|
||||
request: wallet_request_types.SignMessageByID,
|
||||
) -> wallet_request_types.SignMessageByIDResponse: ...
|
||||
async def verify_signature(
|
||||
self,
|
||||
request: wallet_request_types.VerifySignature,
|
||||
) -> wallet_request_types.VerifySignatureResponse: ...
|
||||
async def get_transaction_memo(
|
||||
self,
|
||||
request: wallet_request_types.GetTransactionMemo,
|
||||
) -> wallet_request_types.GetTransactionMemoResponse: ...
|
||||
async def split_coins(
|
||||
self,
|
||||
request: wallet_request_types.SplitCoins,
|
||||
tx_config: TXConfig,
|
||||
extra_conditions: tuple[Condition, ...] = ...,
|
||||
timelock_info: ConditionValidTimes = ...,
|
||||
) -> wallet_request_types.SplitCoinsResponse: ...
|
||||
async def combine_coins(
|
||||
self,
|
||||
request: wallet_request_types.CombineCoins,
|
||||
tx_config: TXConfig,
|
||||
extra_conditions: tuple[Condition, ...] = ...,
|
||||
timelock_info: ConditionValidTimes = ...,
|
||||
) -> wallet_request_types.CombineCoinsResponse: ...
|
||||
async def set_cat_name(
|
||||
self,
|
||||
request: wallet_request_types.CATSetName,
|
||||
) -> wallet_request_types.CATSetNameResponse: ...
|
||||
async def cat_asset_id_to_name(
|
||||
self,
|
||||
request: wallet_request_types.CATAssetIDToName,
|
||||
) -> wallet_request_types.CATAssetIDToNameResponse: ...
|
||||
async def get_cat_name(
|
||||
self,
|
||||
request: wallet_request_types.CATGetName,
|
||||
) -> wallet_request_types.CATGetNameResponse: ...
|
||||
async def get_stray_cats(self) -> wallet_request_types.GetStrayCATsResponse: ...
|
||||
async def cat_spend(
|
||||
self,
|
||||
request: wallet_request_types.CATSpend,
|
||||
tx_config: TXConfig,
|
||||
extra_conditions: tuple[Condition, ...] = ...,
|
||||
timelock_info: ConditionValidTimes = ...,
|
||||
) -> wallet_request_types.CATSpendResponse: ...
|
||||
async def get_cat_asset_id(
|
||||
self,
|
||||
request: wallet_request_types.CATGetAssetID,
|
||||
) -> wallet_request_types.CATGetAssetIDResponse: ...
|
||||
async def create_offer_for_ids(
|
||||
self,
|
||||
request: wallet_request_types.CreateOfferForIDs,
|
||||
tx_config: TXConfig,
|
||||
extra_conditions: tuple[Condition, ...] = ...,
|
||||
timelock_info: ConditionValidTimes = ...,
|
||||
) -> wallet_request_types.CreateOfferForIDsResponse: ...
|
||||
async def get_offer_summary(
|
||||
self,
|
||||
request: wallet_request_types.GetOfferSummary,
|
||||
) -> wallet_request_types.GetOfferSummaryResponse: ...
|
||||
async def check_offer_validity(
|
||||
self,
|
||||
request: wallet_request_types.CheckOfferValidity,
|
||||
) -> wallet_request_types.CheckOfferValidityResponse: ...
|
||||
async def take_offer(
|
||||
self,
|
||||
request: wallet_request_types.TakeOffer,
|
||||
tx_config: TXConfig,
|
||||
extra_conditions: tuple[Condition, ...] = ...,
|
||||
timelock_info: ConditionValidTimes = ...,
|
||||
) -> wallet_request_types.TakeOfferResponse: ...
|
||||
async def get_offer(
|
||||
self,
|
||||
request: wallet_request_types.GetOffer,
|
||||
) -> wallet_request_types.GetOfferResponse: ...
|
||||
async def get_all_offers(
|
||||
self,
|
||||
request: wallet_request_types.GetAllOffers,
|
||||
) -> wallet_request_types.GetAllOffersResponse: ...
|
||||
async def get_offers_count(self) -> wallet_request_types.GetOffersCountResponse: ...
|
||||
async def cancel_offer(
|
||||
self,
|
||||
request: wallet_request_types.CancelOffer,
|
||||
tx_config: TXConfig,
|
||||
extra_conditions: tuple[Condition, ...] = ...,
|
||||
timelock_info: ConditionValidTimes = ...,
|
||||
) -> wallet_request_types.CancelOfferResponse: ...
|
||||
async def cancel_offers(
|
||||
self,
|
||||
request: wallet_request_types.CancelOffers,
|
||||
tx_config: TXConfig,
|
||||
extra_conditions: tuple[Condition, ...] = ...,
|
||||
timelock_info: ConditionValidTimes = ...,
|
||||
) -> wallet_request_types.CancelOffersResponse: ...
|
||||
async def get_cat_list(self) -> wallet_request_types.GetCATListResponse: ...
|
||||
async def did_set_wallet_name(
|
||||
self,
|
||||
request: wallet_request_types.DIDSetWalletName,
|
||||
) -> wallet_request_types.DIDSetWalletNameResponse: ...
|
||||
async def did_get_wallet_name(
|
||||
self,
|
||||
request: wallet_request_types.DIDGetWalletName,
|
||||
) -> wallet_request_types.DIDGetWalletNameResponse: ...
|
||||
async def update_did_metadata(
|
||||
self,
|
||||
request: wallet_request_types.DIDUpdateMetadata,
|
||||
tx_config: TXConfig,
|
||||
extra_conditions: tuple[Condition, ...] = ...,
|
||||
timelock_info: ConditionValidTimes = ...,
|
||||
) -> wallet_request_types.DIDUpdateMetadataResponse: ...
|
||||
async def get_did_pubkey(
|
||||
self,
|
||||
request: wallet_request_types.DIDGetPubkey,
|
||||
) -> wallet_request_types.DIDGetPubkeyResponse: ...
|
||||
async def get_did_id(
|
||||
self,
|
||||
request: wallet_request_types.DIDGetDID,
|
||||
) -> wallet_request_types.DIDGetDIDResponse: ...
|
||||
async def get_did_metadata(
|
||||
self,
|
||||
request: wallet_request_types.DIDGetMetadata,
|
||||
) -> wallet_request_types.DIDGetMetadataResponse: ...
|
||||
async def did_get_current_coin_info(
|
||||
self,
|
||||
request: wallet_request_types.DIDGetCurrentCoinInfo,
|
||||
) -> wallet_request_types.DIDGetCurrentCoinInfoResponse: ...
|
||||
async def create_did_backup_file(
|
||||
self,
|
||||
request: wallet_request_types.DIDCreateBackupFile,
|
||||
) -> wallet_request_types.DIDCreateBackupFileResponse: ...
|
||||
async def did_transfer_did(
|
||||
self,
|
||||
request: wallet_request_types.DIDTransferDID,
|
||||
tx_config: TXConfig,
|
||||
extra_conditions: tuple[Condition, ...] = ...,
|
||||
timelock_info: ConditionValidTimes = ...,
|
||||
) -> wallet_request_types.DIDTransferDIDResponse: ...
|
||||
async def did_message_spend(
|
||||
self,
|
||||
request: wallet_request_types.DIDMessageSpend,
|
||||
tx_config: TXConfig,
|
||||
extra_conditions: tuple[Condition, ...] = ...,
|
||||
timelock_info: ConditionValidTimes = ...,
|
||||
) -> wallet_request_types.DIDMessageSpendResponse: ...
|
||||
async def get_did_info(
|
||||
self,
|
||||
request: wallet_request_types.DIDGetInfo,
|
||||
) -> wallet_request_types.DIDGetInfoResponse: ...
|
||||
async def find_lost_did(
|
||||
self,
|
||||
request: wallet_request_types.DIDFindLostDID,
|
||||
) -> wallet_request_types.DIDFindLostDIDResponse: ...
|
||||
async def mint_nft(
|
||||
self,
|
||||
request: wallet_request_types.NFTMintNFTRequest,
|
||||
tx_config: TXConfig,
|
||||
extra_conditions: tuple[Condition, ...] = ...,
|
||||
timelock_info: ConditionValidTimes = ...,
|
||||
) -> wallet_request_types.NFTMintNFTResponse: ...
|
||||
async def count_nfts(
|
||||
self,
|
||||
request: wallet_request_types.NFTCountNFTs,
|
||||
) -> wallet_request_types.NFTCountNFTsResponse: ...
|
||||
async def list_nfts(
|
||||
self,
|
||||
request: wallet_request_types.NFTGetNFTs,
|
||||
) -> wallet_request_types.NFTGetNFTsResponse: ...
|
||||
async def get_nft_wallet_by_did(
|
||||
self,
|
||||
request: wallet_request_types.NFTGetByDID,
|
||||
) -> wallet_request_types.NFTGetByDIDResponse: ...
|
||||
async def set_nft_did(
|
||||
self,
|
||||
request: wallet_request_types.NFTSetNFTDID,
|
||||
tx_config: TXConfig,
|
||||
extra_conditions: tuple[Condition, ...] = ...,
|
||||
timelock_info: ConditionValidTimes = ...,
|
||||
) -> wallet_request_types.NFTSetNFTDIDResponse: ...
|
||||
async def set_nft_status(
|
||||
self,
|
||||
request: wallet_request_types.NFTSetNFTStatus,
|
||||
) -> None: ...
|
||||
async def get_nft_wallet_did(
|
||||
self,
|
||||
request: wallet_request_types.NFTGetWalletDID,
|
||||
) -> wallet_request_types.NFTGetWalletDIDResponse: ...
|
||||
async def get_nft_wallets_with_dids(self) -> wallet_request_types.NFTGetWalletsWithDIDsResponse: ...
|
||||
async def get_nft_info(
|
||||
self,
|
||||
request: wallet_request_types.NFTGetInfo,
|
||||
) -> wallet_request_types.NFTGetInfoResponse: ...
|
||||
async def transfer_nft(
|
||||
self,
|
||||
request: wallet_request_types.NFTTransferNFT,
|
||||
tx_config: TXConfig,
|
||||
extra_conditions: tuple[Condition, ...] = ...,
|
||||
timelock_info: ConditionValidTimes = ...,
|
||||
) -> wallet_request_types.NFTTransferNFTResponse: ...
|
||||
async def add_uri_to_nft(
|
||||
self,
|
||||
request: wallet_request_types.NFTAddURI,
|
||||
tx_config: TXConfig,
|
||||
extra_conditions: tuple[Condition, ...] = ...,
|
||||
timelock_info: ConditionValidTimes = ...,
|
||||
) -> wallet_request_types.NFTAddURIResponse: ...
|
||||
async def nft_calculate_royalties(
|
||||
self,
|
||||
request: wallet_request_types.NFTCalculateRoyalties,
|
||||
) -> wallet_request_types.NFTCalculateRoyaltiesResponse: ...
|
||||
async def nft_mint_bulk(
|
||||
self,
|
||||
request: wallet_request_types.NFTMintBulk,
|
||||
tx_config: TXConfig,
|
||||
extra_conditions: tuple[Condition, ...] = ...,
|
||||
timelock_info: ConditionValidTimes = ...,
|
||||
) -> wallet_request_types.NFTMintBulkResponse: ...
|
||||
async def set_nft_did_bulk(
|
||||
self,
|
||||
request: wallet_request_types.NFTSetDIDBulk,
|
||||
tx_config: TXConfig,
|
||||
extra_conditions: tuple[Condition, ...] = ...,
|
||||
timelock_info: ConditionValidTimes = ...,
|
||||
) -> wallet_request_types.NFTSetDIDBulkResponse: ...
|
||||
async def transfer_nft_bulk(
|
||||
self,
|
||||
request: wallet_request_types.NFTTransferBulk,
|
||||
tx_config: TXConfig,
|
||||
extra_conditions: tuple[Condition, ...] = ...,
|
||||
timelock_info: ConditionValidTimes = ...,
|
||||
) -> wallet_request_types.NFTTransferBulkResponse: ...
|
||||
async def register_remote_coins(
|
||||
self,
|
||||
request: wallet_request_types.RegisterRemoteCoins,
|
||||
) -> None: ...
|
||||
async def get_coin_records(
|
||||
self,
|
||||
request: wallet_request_types.GetCoinRecords,
|
||||
) -> wallet_request_types.GetCoinRecordsResponse: ...
|
||||
async def pw_join_pool(
|
||||
self,
|
||||
request: wallet_request_types.PWJoinPool,
|
||||
tx_config: TXConfig,
|
||||
extra_conditions: tuple[Condition, ...] = ...,
|
||||
timelock_info: ConditionValidTimes = ...,
|
||||
) -> wallet_request_types.PWJoinPoolResponse: ...
|
||||
async def pw_self_pool(
|
||||
self,
|
||||
request: wallet_request_types.PWSelfPool,
|
||||
tx_config: TXConfig,
|
||||
extra_conditions: tuple[Condition, ...] = ...,
|
||||
timelock_info: ConditionValidTimes = ...,
|
||||
) -> wallet_request_types.PWSelfPoolResponse: ...
|
||||
async def pw_absorb_rewards(
|
||||
self,
|
||||
request: wallet_request_types.PWAbsorbRewards,
|
||||
tx_config: TXConfig,
|
||||
extra_conditions: tuple[Condition, ...] = ...,
|
||||
timelock_info: ConditionValidTimes = ...,
|
||||
) -> wallet_request_types.PWAbsorbRewardsResponse: ...
|
||||
async def pw_status(
|
||||
self,
|
||||
request: wallet_request_types.PWStatus,
|
||||
) -> wallet_request_types.PWStatusResponse: ...
|
||||
async def create_new_dl(
|
||||
self,
|
||||
request: wallet_request_types.CreateNewDL,
|
||||
tx_config: TXConfig,
|
||||
extra_conditions: tuple[Condition, ...] = ...,
|
||||
timelock_info: ConditionValidTimes = ...,
|
||||
) -> wallet_request_types.CreateNewDLResponse: ...
|
||||
async def dl_track_new(
|
||||
self,
|
||||
request: wallet_request_types.DLTrackNew,
|
||||
) -> None: ...
|
||||
async def dl_stop_tracking(
|
||||
self,
|
||||
request: wallet_request_types.DLStopTracking,
|
||||
) -> None: ...
|
||||
async def dl_latest_singleton(
|
||||
self,
|
||||
request: wallet_request_types.DLLatestSingleton,
|
||||
) -> wallet_request_types.DLLatestSingletonResponse: ...
|
||||
async def dl_singletons_by_root(
|
||||
self,
|
||||
request: wallet_request_types.DLSingletonsByRoot,
|
||||
) -> wallet_request_types.DLSingletonsByRootResponse: ...
|
||||
async def dl_update_root(
|
||||
self,
|
||||
request: wallet_request_types.DLUpdateRoot,
|
||||
tx_config: TXConfig,
|
||||
extra_conditions: tuple[Condition, ...] = ...,
|
||||
timelock_info: ConditionValidTimes = ...,
|
||||
) -> wallet_request_types.DLUpdateRootResponse: ...
|
||||
async def dl_update_multiple(
|
||||
self,
|
||||
request: wallet_request_types.DLUpdateMultiple,
|
||||
tx_config: TXConfig,
|
||||
extra_conditions: tuple[Condition, ...] = ...,
|
||||
timelock_info: ConditionValidTimes = ...,
|
||||
) -> wallet_request_types.DLUpdateMultipleResponse: ...
|
||||
async def dl_history(
|
||||
self,
|
||||
request: wallet_request_types.DLHistory,
|
||||
) -> wallet_request_types.DLHistoryResponse: ...
|
||||
async def dl_owned_singletons(self) -> wallet_request_types.DLOwnedSingletonsResponse: ...
|
||||
async def dl_get_mirrors(
|
||||
self,
|
||||
request: wallet_request_types.DLGetMirrors,
|
||||
) -> wallet_request_types.DLGetMirrorsResponse: ...
|
||||
async def dl_new_mirror(
|
||||
self,
|
||||
request: wallet_request_types.DLNewMirror,
|
||||
tx_config: TXConfig,
|
||||
extra_conditions: tuple[Condition, ...] = ...,
|
||||
timelock_info: ConditionValidTimes = ...,
|
||||
) -> wallet_request_types.DLNewMirrorResponse: ...
|
||||
async def dl_delete_mirror(
|
||||
self,
|
||||
request: wallet_request_types.DLDeleteMirror,
|
||||
tx_config: TXConfig,
|
||||
extra_conditions: tuple[Condition, ...] = ...,
|
||||
timelock_info: ConditionValidTimes = ...,
|
||||
) -> wallet_request_types.DLDeleteMirrorResponse: ...
|
||||
async def dl_verify_proof(
|
||||
self,
|
||||
request: DLProof,
|
||||
) -> VerifyProofResponse: ...
|
||||
async def vc_mint(
|
||||
self,
|
||||
request: wallet_request_types.VCMint,
|
||||
tx_config: TXConfig,
|
||||
extra_conditions: tuple[Condition, ...] = ...,
|
||||
timelock_info: ConditionValidTimes = ...,
|
||||
) -> wallet_request_types.VCMintResponse: ...
|
||||
async def vc_get(
|
||||
self,
|
||||
request: wallet_request_types.VCGet,
|
||||
) -> wallet_request_types.VCGetResponse: ...
|
||||
async def vc_get_list(
|
||||
self,
|
||||
request: wallet_request_types.VCGetList,
|
||||
) -> wallet_request_types.VCGetListResponse: ...
|
||||
async def vc_spend(
|
||||
self,
|
||||
request: wallet_request_types.VCSpend,
|
||||
tx_config: TXConfig,
|
||||
extra_conditions: tuple[Condition, ...] = ...,
|
||||
timelock_info: ConditionValidTimes = ...,
|
||||
) -> wallet_request_types.VCSpendResponse: ...
|
||||
async def vc_add_proofs(
|
||||
self,
|
||||
request: wallet_request_types.VCAddProofs,
|
||||
) -> None: ...
|
||||
async def vc_get_proofs_for_root(
|
||||
self,
|
||||
request: wallet_request_types.VCGetProofsForRoot,
|
||||
) -> wallet_request_types.VCGetProofsForRootResponse: ...
|
||||
async def vc_revoke(
|
||||
self,
|
||||
request: wallet_request_types.VCRevoke,
|
||||
tx_config: TXConfig,
|
||||
extra_conditions: tuple[Condition, ...] = ...,
|
||||
timelock_info: ConditionValidTimes = ...,
|
||||
) -> wallet_request_types.VCRevokeResponse: ...
|
||||
async def crcat_approve_pending(
|
||||
self,
|
||||
request: wallet_request_types.CRCATApprovePending,
|
||||
tx_config: TXConfig,
|
||||
extra_conditions: tuple[Condition, ...] = ...,
|
||||
timelock_info: ConditionValidTimes = ...,
|
||||
) -> wallet_request_types.CRCATApprovePendingResponse: ...
|
||||
async def gather_signing_info(
|
||||
self,
|
||||
request: wallet_request_types.GatherSigningInfo,
|
||||
) -> wallet_request_types.GatherSigningInfoResponse: ...
|
||||
async def apply_signatures(
|
||||
self,
|
||||
request: wallet_request_types.ApplySignatures,
|
||||
) -> wallet_request_types.ApplySignaturesResponse: ...
|
||||
async def submit_transactions(
|
||||
self,
|
||||
request: wallet_request_types.SubmitTransactions,
|
||||
) -> wallet_request_types.SubmitTransactionsResponse: ...
|
||||
async def execute_signing_instructions(
|
||||
self,
|
||||
request: wallet_request_types.ExecuteSigningInstructions,
|
||||
) -> wallet_request_types.ExecuteSigningInstructionsResponse: ...
|
||||
@@ -0,0 +1,724 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from dataclasses import dataclass
|
||||
|
||||
from chia.data_layer.data_layer_util import DLProof, VerifyProofResponse
|
||||
from chia.util.streamable import Streamable
|
||||
from chia.wallet import wallet_request_types
|
||||
from chia.wallet.puzzles.clawback.metadata import AutoClaimSettings
|
||||
|
||||
|
||||
@dataclass(frozen=True, kw_only=True)
|
||||
class RpcMetadata:
|
||||
endpoint_name: str
|
||||
request_type: type[Streamable]
|
||||
response_type: type[Streamable]
|
||||
|
||||
|
||||
@dataclass(frozen=True, kw_only=True)
|
||||
class WalletRpcMetadata(RpcMetadata):
|
||||
tx_endpoint: bool = False
|
||||
auto_push: bool = False
|
||||
auto_merge_spends: bool = True
|
||||
|
||||
def __post_init__(self) -> None:
|
||||
if self.tx_endpoint and not issubclass(self.request_type, wallet_request_types.TransactionEndpointRequest):
|
||||
raise TypeError("tx_endpoint request type must subclass TransactionEndpointRequest")
|
||||
if self.tx_endpoint and not issubclass(self.response_type, wallet_request_types.TransactionEndpointResponse):
|
||||
raise TypeError("tx_endpoint response type must subclass TransactionEndpointResponse")
|
||||
|
||||
|
||||
WALLET_RPC_ENDPOINT_METADATA: list[WalletRpcMetadata] = [
|
||||
# Key management
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="log_in",
|
||||
request_type=wallet_request_types.LogIn,
|
||||
response_type=wallet_request_types.LogInResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="get_logged_in_fingerprint",
|
||||
request_type=wallet_request_types.Empty,
|
||||
response_type=wallet_request_types.GetLoggedInFingerprintResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="get_public_keys",
|
||||
request_type=wallet_request_types.Empty,
|
||||
response_type=wallet_request_types.GetPublicKeysResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="get_private_key",
|
||||
request_type=wallet_request_types.GetPrivateKey,
|
||||
response_type=wallet_request_types.GetPrivateKeyResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="generate_mnemonic",
|
||||
request_type=wallet_request_types.Empty,
|
||||
response_type=wallet_request_types.GenerateMnemonicResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="add_key",
|
||||
request_type=wallet_request_types.AddKey,
|
||||
response_type=wallet_request_types.AddKeyResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="delete_key",
|
||||
request_type=wallet_request_types.DeleteKey,
|
||||
response_type=wallet_request_types.Empty,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="check_delete_key",
|
||||
request_type=wallet_request_types.CheckDeleteKey,
|
||||
response_type=wallet_request_types.CheckDeleteKeyResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="delete_all_keys",
|
||||
request_type=wallet_request_types.Empty,
|
||||
response_type=wallet_request_types.Empty,
|
||||
),
|
||||
# Wallet node
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="set_wallet_resync_on_startup",
|
||||
request_type=wallet_request_types.SetWalletResyncOnStartup,
|
||||
response_type=wallet_request_types.Empty,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="get_sync_status",
|
||||
request_type=wallet_request_types.Empty,
|
||||
response_type=wallet_request_types.GetSyncStatusResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="get_full_node_peer_count",
|
||||
request_type=wallet_request_types.Empty,
|
||||
response_type=wallet_request_types.GetFullNodePeerCountResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="get_height_info",
|
||||
request_type=wallet_request_types.GetHeightInfo,
|
||||
response_type=wallet_request_types.GetHeightInfoResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="push_tx",
|
||||
request_type=wallet_request_types.PushTX,
|
||||
response_type=wallet_request_types.Empty,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="push_transactions",
|
||||
request_type=wallet_request_types.PushTransactions,
|
||||
response_type=wallet_request_types.PushTransactionsResponse,
|
||||
tx_endpoint=True,
|
||||
auto_push=True,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="get_timestamp_for_height",
|
||||
request_type=wallet_request_types.GetTimestampForHeight,
|
||||
response_type=wallet_request_types.GetTimestampForHeightResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="get_fee_estimate",
|
||||
request_type=wallet_request_types.Empty,
|
||||
response_type=wallet_request_types.GetFeeEstimateResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="set_auto_claim",
|
||||
request_type=AutoClaimSettings,
|
||||
response_type=AutoClaimSettings,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="get_auto_claim",
|
||||
request_type=wallet_request_types.Empty,
|
||||
response_type=AutoClaimSettings,
|
||||
),
|
||||
# Wallet management
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="get_wallets",
|
||||
request_type=wallet_request_types.GetWallets,
|
||||
response_type=wallet_request_types.GetWalletsResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="create_new_wallet",
|
||||
request_type=wallet_request_types.CreateNewWallet,
|
||||
response_type=wallet_request_types.CreateNewWalletResponse,
|
||||
tx_endpoint=True,
|
||||
auto_push=True,
|
||||
),
|
||||
# Wallet
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="get_wallet_balance",
|
||||
request_type=wallet_request_types.GetWalletBalance,
|
||||
response_type=wallet_request_types.GetWalletBalanceResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="get_wallet_balances",
|
||||
request_type=wallet_request_types.GetWalletBalances,
|
||||
response_type=wallet_request_types.GetWalletBalancesResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="get_transaction",
|
||||
request_type=wallet_request_types.GetTransaction,
|
||||
response_type=wallet_request_types.GetTransactionResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="get_transactions",
|
||||
request_type=wallet_request_types.GetTransactions,
|
||||
response_type=wallet_request_types.GetTransactionsResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="get_transaction_count",
|
||||
request_type=wallet_request_types.GetTransactionCount,
|
||||
response_type=wallet_request_types.GetTransactionCountResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="get_next_address",
|
||||
request_type=wallet_request_types.GetNextAddress,
|
||||
response_type=wallet_request_types.GetNextAddressResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="send_transaction",
|
||||
request_type=wallet_request_types.SendTransaction,
|
||||
response_type=wallet_request_types.SendTransactionResponse,
|
||||
tx_endpoint=True,
|
||||
auto_push=True,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="send_transaction_multi",
|
||||
request_type=wallet_request_types.SendTransactionMulti,
|
||||
response_type=wallet_request_types.SendTransactionMultiResponse,
|
||||
tx_endpoint=True,
|
||||
auto_push=True,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="spend_clawback_coins",
|
||||
request_type=wallet_request_types.SpendClawbackCoins,
|
||||
response_type=wallet_request_types.SpendClawbackCoinsResponse,
|
||||
tx_endpoint=True,
|
||||
auto_push=True,
|
||||
auto_merge_spends=False,
|
||||
),
|
||||
# get_coin_records remains a legacy untyped endpoint.
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="get_farmed_amount",
|
||||
request_type=wallet_request_types.GetFarmedAmount,
|
||||
response_type=wallet_request_types.GetFarmedAmountResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="create_signed_transaction",
|
||||
request_type=wallet_request_types.CreateSignedTransaction,
|
||||
response_type=wallet_request_types.CreateSignedTransactionsResponse,
|
||||
tx_endpoint=True,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="delete_unconfirmed_transactions",
|
||||
request_type=wallet_request_types.DeleteUnconfirmedTransactions,
|
||||
response_type=wallet_request_types.Empty,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="select_coins",
|
||||
request_type=wallet_request_types.SelectCoins,
|
||||
response_type=wallet_request_types.SelectCoinsResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="get_spendable_coins",
|
||||
request_type=wallet_request_types.GetSpendableCoins,
|
||||
response_type=wallet_request_types.GetSpendableCoinsResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="get_coin_records_by_names",
|
||||
request_type=wallet_request_types.GetCoinRecordsByNames,
|
||||
response_type=wallet_request_types.GetCoinRecordsByNamesResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="get_puzzle_and_solution",
|
||||
request_type=wallet_request_types.GetPuzzleAndSolution,
|
||||
response_type=wallet_request_types.GetPuzzleAndSolutionResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="get_current_derivation_index",
|
||||
request_type=wallet_request_types.Empty,
|
||||
response_type=wallet_request_types.GetCurrentDerivationIndexResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="extend_derivation_index",
|
||||
request_type=wallet_request_types.ExtendDerivationIndex,
|
||||
response_type=wallet_request_types.ExtendDerivationIndexResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="get_notifications",
|
||||
request_type=wallet_request_types.GetNotifications,
|
||||
response_type=wallet_request_types.GetNotificationsResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="delete_notifications",
|
||||
request_type=wallet_request_types.DeleteNotifications,
|
||||
response_type=wallet_request_types.Empty,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="send_notification",
|
||||
request_type=wallet_request_types.SendNotification,
|
||||
response_type=wallet_request_types.SendNotificationResponse,
|
||||
tx_endpoint=True,
|
||||
auto_push=True,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="sign_message_by_address",
|
||||
request_type=wallet_request_types.SignMessageByAddress,
|
||||
response_type=wallet_request_types.SignMessageByAddressResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="sign_message_by_id",
|
||||
request_type=wallet_request_types.SignMessageByID,
|
||||
response_type=wallet_request_types.SignMessageByIDResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="verify_signature",
|
||||
request_type=wallet_request_types.VerifySignature,
|
||||
response_type=wallet_request_types.VerifySignatureResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="get_transaction_memo",
|
||||
request_type=wallet_request_types.GetTransactionMemo,
|
||||
response_type=wallet_request_types.GetTransactionMemoResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="split_coins",
|
||||
request_type=wallet_request_types.SplitCoins,
|
||||
response_type=wallet_request_types.SplitCoinsResponse,
|
||||
tx_endpoint=True,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="combine_coins",
|
||||
request_type=wallet_request_types.CombineCoins,
|
||||
response_type=wallet_request_types.CombineCoinsResponse,
|
||||
tx_endpoint=True,
|
||||
),
|
||||
# CATs and trading
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="cat_set_name",
|
||||
request_type=wallet_request_types.CATSetName,
|
||||
response_type=wallet_request_types.CATSetNameResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="cat_asset_id_to_name",
|
||||
request_type=wallet_request_types.CATAssetIDToName,
|
||||
response_type=wallet_request_types.CATAssetIDToNameResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="cat_get_name",
|
||||
request_type=wallet_request_types.CATGetName,
|
||||
response_type=wallet_request_types.CATGetNameResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="get_stray_cats",
|
||||
request_type=wallet_request_types.Empty,
|
||||
response_type=wallet_request_types.GetStrayCATsResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="cat_spend",
|
||||
request_type=wallet_request_types.CATSpend,
|
||||
response_type=wallet_request_types.CATSpendResponse,
|
||||
tx_endpoint=True,
|
||||
auto_push=True,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="cat_get_asset_id",
|
||||
request_type=wallet_request_types.CATGetAssetID,
|
||||
response_type=wallet_request_types.CATGetAssetIDResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="create_offer_for_ids",
|
||||
request_type=wallet_request_types.CreateOfferForIDs,
|
||||
response_type=wallet_request_types.CreateOfferForIDsResponse,
|
||||
tx_endpoint=True,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="get_offer_summary",
|
||||
request_type=wallet_request_types.GetOfferSummary,
|
||||
response_type=wallet_request_types.GetOfferSummaryResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="check_offer_validity",
|
||||
request_type=wallet_request_types.CheckOfferValidity,
|
||||
response_type=wallet_request_types.CheckOfferValidityResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="take_offer",
|
||||
request_type=wallet_request_types.TakeOffer,
|
||||
response_type=wallet_request_types.TakeOfferResponse,
|
||||
tx_endpoint=True,
|
||||
auto_push=True,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="get_offer",
|
||||
request_type=wallet_request_types.GetOffer,
|
||||
response_type=wallet_request_types.GetOfferResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="get_all_offers",
|
||||
request_type=wallet_request_types.GetAllOffers,
|
||||
response_type=wallet_request_types.GetAllOffersResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="get_offers_count",
|
||||
request_type=wallet_request_types.Empty,
|
||||
response_type=wallet_request_types.GetOffersCountResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="cancel_offer",
|
||||
request_type=wallet_request_types.CancelOffer,
|
||||
response_type=wallet_request_types.CancelOfferResponse,
|
||||
tx_endpoint=True,
|
||||
auto_push=True,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="cancel_offers",
|
||||
request_type=wallet_request_types.CancelOffers,
|
||||
response_type=wallet_request_types.CancelOffersResponse,
|
||||
tx_endpoint=True,
|
||||
auto_push=True,
|
||||
auto_merge_spends=False,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="get_cat_list",
|
||||
request_type=wallet_request_types.Empty,
|
||||
response_type=wallet_request_types.GetCATListResponse,
|
||||
),
|
||||
# DID wallet
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="did_set_wallet_name",
|
||||
request_type=wallet_request_types.DIDSetWalletName,
|
||||
response_type=wallet_request_types.DIDSetWalletNameResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="did_get_wallet_name",
|
||||
request_type=wallet_request_types.DIDGetWalletName,
|
||||
response_type=wallet_request_types.DIDGetWalletNameResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="did_update_metadata",
|
||||
request_type=wallet_request_types.DIDUpdateMetadata,
|
||||
response_type=wallet_request_types.DIDUpdateMetadataResponse,
|
||||
tx_endpoint=True,
|
||||
auto_push=True,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="did_get_pubkey",
|
||||
request_type=wallet_request_types.DIDGetPubkey,
|
||||
response_type=wallet_request_types.DIDGetPubkeyResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="did_get_did",
|
||||
request_type=wallet_request_types.DIDGetDID,
|
||||
response_type=wallet_request_types.DIDGetDIDResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="did_get_metadata",
|
||||
request_type=wallet_request_types.DIDGetMetadata,
|
||||
response_type=wallet_request_types.DIDGetMetadataResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="did_get_current_coin_info",
|
||||
request_type=wallet_request_types.DIDGetCurrentCoinInfo,
|
||||
response_type=wallet_request_types.DIDGetCurrentCoinInfoResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="did_create_backup_file",
|
||||
request_type=wallet_request_types.DIDCreateBackupFile,
|
||||
response_type=wallet_request_types.DIDCreateBackupFileResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="did_transfer_did",
|
||||
request_type=wallet_request_types.DIDTransferDID,
|
||||
response_type=wallet_request_types.DIDTransferDIDResponse,
|
||||
tx_endpoint=True,
|
||||
auto_push=True,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="did_message_spend",
|
||||
request_type=wallet_request_types.DIDMessageSpend,
|
||||
response_type=wallet_request_types.DIDMessageSpendResponse,
|
||||
tx_endpoint=True,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="did_get_info",
|
||||
request_type=wallet_request_types.DIDGetInfo,
|
||||
response_type=wallet_request_types.DIDGetInfoResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="did_find_lost_did",
|
||||
request_type=wallet_request_types.DIDFindLostDID,
|
||||
response_type=wallet_request_types.DIDFindLostDIDResponse,
|
||||
),
|
||||
# NFT wallet
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="nft_mint_nft",
|
||||
request_type=wallet_request_types.NFTMintNFTRequest,
|
||||
response_type=wallet_request_types.NFTMintNFTResponse,
|
||||
tx_endpoint=True,
|
||||
auto_push=True,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="nft_count_nfts",
|
||||
request_type=wallet_request_types.NFTCountNFTs,
|
||||
response_type=wallet_request_types.NFTCountNFTsResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="nft_get_nfts",
|
||||
request_type=wallet_request_types.NFTGetNFTs,
|
||||
response_type=wallet_request_types.NFTGetNFTsResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="nft_get_by_did",
|
||||
request_type=wallet_request_types.NFTGetByDID,
|
||||
response_type=wallet_request_types.NFTGetByDIDResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="nft_set_nft_did",
|
||||
request_type=wallet_request_types.NFTSetNFTDID,
|
||||
response_type=wallet_request_types.NFTSetNFTDIDResponse,
|
||||
tx_endpoint=True,
|
||||
auto_push=True,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="nft_set_nft_status",
|
||||
request_type=wallet_request_types.NFTSetNFTStatus,
|
||||
response_type=wallet_request_types.Empty,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="nft_get_wallet_did",
|
||||
request_type=wallet_request_types.NFTGetWalletDID,
|
||||
response_type=wallet_request_types.NFTGetWalletDIDResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="nft_get_wallets_with_dids",
|
||||
request_type=wallet_request_types.Empty,
|
||||
response_type=wallet_request_types.NFTGetWalletsWithDIDsResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="nft_get_info",
|
||||
request_type=wallet_request_types.NFTGetInfo,
|
||||
response_type=wallet_request_types.NFTGetInfoResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="nft_transfer_nft",
|
||||
request_type=wallet_request_types.NFTTransferNFT,
|
||||
response_type=wallet_request_types.NFTTransferNFTResponse,
|
||||
tx_endpoint=True,
|
||||
auto_push=True,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="nft_add_uri",
|
||||
request_type=wallet_request_types.NFTAddURI,
|
||||
response_type=wallet_request_types.NFTAddURIResponse,
|
||||
tx_endpoint=True,
|
||||
auto_push=True,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="nft_calculate_royalties",
|
||||
request_type=wallet_request_types.NFTCalculateRoyalties,
|
||||
response_type=wallet_request_types.NFTCalculateRoyaltiesResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="nft_mint_bulk",
|
||||
request_type=wallet_request_types.NFTMintBulk,
|
||||
response_type=wallet_request_types.NFTMintBulkResponse,
|
||||
tx_endpoint=True,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="nft_set_did_bulk",
|
||||
request_type=wallet_request_types.NFTSetDIDBulk,
|
||||
response_type=wallet_request_types.NFTSetDIDBulkResponse,
|
||||
tx_endpoint=True,
|
||||
auto_push=True,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="nft_transfer_bulk",
|
||||
request_type=wallet_request_types.NFTTransferBulk,
|
||||
response_type=wallet_request_types.NFTTransferBulkResponse,
|
||||
tx_endpoint=True,
|
||||
auto_push=True,
|
||||
),
|
||||
# Remote wallet
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="register_remote_coins",
|
||||
request_type=wallet_request_types.RegisterRemoteCoins,
|
||||
response_type=wallet_request_types.Empty,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="get_coin_records",
|
||||
request_type=wallet_request_types.GetCoinRecords,
|
||||
response_type=wallet_request_types.GetCoinRecordsResponse,
|
||||
),
|
||||
# Pool wallet
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="pw_join_pool",
|
||||
request_type=wallet_request_types.PWJoinPool,
|
||||
response_type=wallet_request_types.PWJoinPoolResponse,
|
||||
tx_endpoint=True,
|
||||
auto_push=True,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="pw_self_pool",
|
||||
request_type=wallet_request_types.PWSelfPool,
|
||||
response_type=wallet_request_types.PWSelfPoolResponse,
|
||||
tx_endpoint=True,
|
||||
auto_push=True,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="pw_absorb_rewards",
|
||||
request_type=wallet_request_types.PWAbsorbRewards,
|
||||
response_type=wallet_request_types.PWAbsorbRewardsResponse,
|
||||
tx_endpoint=True,
|
||||
auto_push=True,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="pw_status",
|
||||
request_type=wallet_request_types.PWStatus,
|
||||
response_type=wallet_request_types.PWStatusResponse,
|
||||
),
|
||||
# Data layer wallet
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="create_new_dl",
|
||||
request_type=wallet_request_types.CreateNewDL,
|
||||
response_type=wallet_request_types.CreateNewDLResponse,
|
||||
tx_endpoint=True,
|
||||
auto_push=True,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="dl_track_new",
|
||||
request_type=wallet_request_types.DLTrackNew,
|
||||
response_type=wallet_request_types.Empty,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="dl_stop_tracking",
|
||||
request_type=wallet_request_types.DLStopTracking,
|
||||
response_type=wallet_request_types.Empty,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="dl_latest_singleton",
|
||||
request_type=wallet_request_types.DLLatestSingleton,
|
||||
response_type=wallet_request_types.DLLatestSingletonResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="dl_singletons_by_root",
|
||||
request_type=wallet_request_types.DLSingletonsByRoot,
|
||||
response_type=wallet_request_types.DLSingletonsByRootResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="dl_update_root",
|
||||
request_type=wallet_request_types.DLUpdateRoot,
|
||||
response_type=wallet_request_types.DLUpdateRootResponse,
|
||||
tx_endpoint=True,
|
||||
auto_push=True,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="dl_update_multiple",
|
||||
request_type=wallet_request_types.DLUpdateMultiple,
|
||||
response_type=wallet_request_types.DLUpdateMultipleResponse,
|
||||
tx_endpoint=True,
|
||||
auto_push=True,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="dl_history",
|
||||
request_type=wallet_request_types.DLHistory,
|
||||
response_type=wallet_request_types.DLHistoryResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="dl_owned_singletons",
|
||||
request_type=wallet_request_types.Empty,
|
||||
response_type=wallet_request_types.DLOwnedSingletonsResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="dl_get_mirrors",
|
||||
request_type=wallet_request_types.DLGetMirrors,
|
||||
response_type=wallet_request_types.DLGetMirrorsResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="dl_new_mirror",
|
||||
request_type=wallet_request_types.DLNewMirror,
|
||||
response_type=wallet_request_types.DLNewMirrorResponse,
|
||||
tx_endpoint=True,
|
||||
auto_push=True,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="dl_delete_mirror",
|
||||
request_type=wallet_request_types.DLDeleteMirror,
|
||||
response_type=wallet_request_types.DLDeleteMirrorResponse,
|
||||
tx_endpoint=True,
|
||||
auto_push=True,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="dl_verify_proof",
|
||||
request_type=DLProof,
|
||||
response_type=VerifyProofResponse,
|
||||
),
|
||||
# Verified credentials
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="vc_mint",
|
||||
request_type=wallet_request_types.VCMint,
|
||||
response_type=wallet_request_types.VCMintResponse,
|
||||
tx_endpoint=True,
|
||||
auto_push=True,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="vc_get",
|
||||
request_type=wallet_request_types.VCGet,
|
||||
response_type=wallet_request_types.VCGetResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="vc_get_list",
|
||||
request_type=wallet_request_types.VCGetList,
|
||||
response_type=wallet_request_types.VCGetListResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="vc_spend",
|
||||
request_type=wallet_request_types.VCSpend,
|
||||
response_type=wallet_request_types.VCSpendResponse,
|
||||
tx_endpoint=True,
|
||||
auto_push=True,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="vc_add_proofs",
|
||||
request_type=wallet_request_types.VCAddProofs,
|
||||
response_type=wallet_request_types.Empty,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="vc_get_proofs_for_root",
|
||||
request_type=wallet_request_types.VCGetProofsForRoot,
|
||||
response_type=wallet_request_types.VCGetProofsForRootResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="vc_revoke",
|
||||
request_type=wallet_request_types.VCRevoke,
|
||||
response_type=wallet_request_types.VCRevokeResponse,
|
||||
tx_endpoint=True,
|
||||
auto_push=True,
|
||||
),
|
||||
# CR-CATs
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="crcat_approve_pending",
|
||||
request_type=wallet_request_types.CRCATApprovePending,
|
||||
response_type=wallet_request_types.CRCATApprovePendingResponse,
|
||||
tx_endpoint=True,
|
||||
auto_push=True,
|
||||
),
|
||||
# Signer protocol
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="gather_signing_info",
|
||||
request_type=wallet_request_types.GatherSigningInfo,
|
||||
response_type=wallet_request_types.GatherSigningInfoResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="apply_signatures",
|
||||
request_type=wallet_request_types.ApplySignatures,
|
||||
response_type=wallet_request_types.ApplySignaturesResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="submit_transactions",
|
||||
request_type=wallet_request_types.SubmitTransactions,
|
||||
response_type=wallet_request_types.SubmitTransactionsResponse,
|
||||
),
|
||||
WalletRpcMetadata(
|
||||
endpoint_name="execute_signing_instructions",
|
||||
request_type=wallet_request_types.ExecuteSigningInstructions,
|
||||
response_type=wallet_request_types.ExecuteSigningInstructionsResponse,
|
||||
),
|
||||
]
|
||||
Executable
+89
@@ -0,0 +1,89 @@
|
||||
#!/usr/bin/env python3
|
||||
from __future__ import annotations
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
from chia.wallet import wallet_rpc_client
|
||||
from chia.wallet.wallet_request_types import Empty
|
||||
from chia.wallet.wallet_rpc_metadata import WALLET_RPC_ENDPOINT_METADATA
|
||||
|
||||
REPO_ROOT = Path(__file__).resolve().parents[1]
|
||||
OUTPUT_PATH = REPO_ROOT / "chia" / "wallet" / "wallet_rpc_client.pyi"
|
||||
|
||||
|
||||
def _type_name(cls: type) -> str:
|
||||
return cls.__name__
|
||||
|
||||
|
||||
def _import_name(cls: type) -> str:
|
||||
return cls.__module__
|
||||
|
||||
|
||||
def generate() -> str:
|
||||
|
||||
methods: list[str] = []
|
||||
|
||||
for meta in WALLET_RPC_ENDPOINT_METADATA:
|
||||
method_name = wallet_rpc_client.client_method_name(meta.endpoint_name)
|
||||
request_type = meta.request_type
|
||||
response_type = meta.response_type
|
||||
|
||||
if response_type is Empty:
|
||||
response_ann = "None"
|
||||
elif _import_name(response_type) == "chia.wallet.wallet_request_types":
|
||||
response_ann = "wallet_request_types." + _type_name(response_type)
|
||||
else:
|
||||
response_ann = _type_name(response_type)
|
||||
|
||||
if _import_name(request_type) == "chia.wallet.wallet_request_types":
|
||||
request_ann = "wallet_request_types." + _type_name(request_type)
|
||||
else:
|
||||
request_ann = _type_name(request_type)
|
||||
|
||||
if meta.tx_endpoint:
|
||||
methods.append(
|
||||
f" async def {method_name}(\n"
|
||||
f" self,\n"
|
||||
f" request: {request_ann},\n"
|
||||
f" tx_config: TXConfig,\n"
|
||||
f" extra_conditions: tuple[Condition, ...] = ...,\n"
|
||||
f" timelock_info: ConditionValidTimes = ...,\n"
|
||||
f" ) -> {response_ann}: ..."
|
||||
)
|
||||
elif request_type is Empty:
|
||||
methods.append(f" async def {method_name}(self) -> {response_ann}: ...")
|
||||
else:
|
||||
methods.append(
|
||||
f" async def {method_name}(\n"
|
||||
" self,\n"
|
||||
f" request: {request_ann},\n"
|
||||
f" ) -> {response_ann}: ..."
|
||||
)
|
||||
|
||||
body = "\n".join(
|
||||
[
|
||||
"# This file is generated by tools/generate_wallet_rpc_client_stub.py",
|
||||
"from chia.data_layer.data_layer_util import DLProof, VerifyProofResponse",
|
||||
"from chia.rpc.rpc_client import RpcClient",
|
||||
"from chia.wallet import wallet_request_types",
|
||||
"from chia.wallet.conditions import Condition, ConditionValidTimes",
|
||||
"from chia.wallet.puzzles.clawback.metadata import AutoClaimSettings",
|
||||
"from chia.wallet.util.tx_config import TXConfig",
|
||||
"",
|
||||
"def client_method_name(endpoint_name: str) -> str: ...",
|
||||
"",
|
||||
"class WalletRpcClient(RpcClient):",
|
||||
*methods,
|
||||
"",
|
||||
]
|
||||
)
|
||||
return body
|
||||
|
||||
|
||||
def main() -> None:
|
||||
OUTPUT_PATH.write_text(generate(), encoding="utf-8", newline="\n")
|
||||
print(f"Wrote {OUTPUT_PATH}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user