Skip to content

Commit 40940de

Browse files
committed
Port get_wallet_balance(s)
1 parent 9bcbd54 commit 40940de

File tree

9 files changed

+193
-105
lines changed

9 files changed

+193
-105
lines changed

chia/_tests/cmds/wallet/test_wallet.py

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import pytest
1010
from chia_rs import Coin, G2Element
1111
from chia_rs.sized_bytes import bytes32
12-
from chia_rs.sized_ints import uint8, uint16, uint32, uint64
12+
from chia_rs.sized_ints import uint8, uint16, uint32, uint64, uint128
1313
from click.testing import CliRunner
1414

1515
from chia._tests.cmds.cmd_test_utils import TestRpcClients, TestWalletRpcClient, logType, run_cli_command_and_assert
@@ -41,11 +41,14 @@
4141
from chia.wallet.util.wallet_types import WalletType
4242
from chia.wallet.wallet_coin_store import GetCoinRecords
4343
from chia.wallet.wallet_request_types import (
44+
BalanceResponse,
4445
CancelOfferResponse,
4546
CATSpendResponse,
4647
CreateOfferForIDsResponse,
4748
FungibleAsset,
4849
GetHeightInfoResponse,
50+
GetWalletBalance,
51+
GetWalletBalanceResponse,
4952
GetWallets,
5053
GetWalletsResponse,
5154
NFTCalculateRoyalties,
@@ -242,19 +245,23 @@ async def get_height_info(self) -> GetHeightInfoResponse:
242245
self.add_to_log("get_height_info", ())
243246
return GetHeightInfoResponse(uint32(10))
244247

245-
async def get_wallet_balance(self, wallet_id: int) -> dict[str, uint64]:
246-
self.add_to_log("get_wallet_balance", (wallet_id,))
247-
if wallet_id == 1:
248-
amount = uint64(1000000000)
249-
elif wallet_id == 2:
250-
amount = uint64(2000000000)
248+
async def get_wallet_balance(self, request: GetWalletBalance) -> GetWalletBalanceResponse:
249+
self.add_to_log("get_wallet_balance", (request,))
250+
if request.wallet_id == 1:
251+
amount = uint128(1000000000)
252+
elif request.wallet_id == 2:
253+
amount = uint128(2000000000)
251254
else:
252-
amount = uint64(1)
253-
return {
254-
"confirmed_wallet_balance": amount,
255-
"spendable_balance": amount,
256-
"unconfirmed_wallet_balance": uint64(0),
257-
}
255+
amount = uint128(1)
256+
return GetWalletBalanceResponse(
257+
BalanceResponse(
258+
wallet_id=request.wallet_id,
259+
wallet_type=uint8(0), # Doesn't matter
260+
confirmed_wallet_balance=amount,
261+
spendable_balance=amount,
262+
unconfirmed_wallet_balance=uint128(0),
263+
)
264+
)
258265

259266
async def get_nft_wallet_did(self, request: NFTGetWalletDID) -> NFTGetWalletDIDResponse:
260267
self.add_to_log("get_nft_wallet_did", (request.wallet_id,))
@@ -307,7 +314,12 @@ async def get_connections(
307314
],
308315
"get_sync_status": [(), ()],
309316
"get_height_info": [(), ()],
310-
"get_wallet_balance": [(1,), (2,), (3,), (2,)],
317+
"get_wallet_balance": [
318+
(GetWalletBalance(wallet_id=uint32(1)),),
319+
(GetWalletBalance(wallet_id=uint32(2)),),
320+
(GetWalletBalance(wallet_id=uint32(3)),),
321+
(GetWalletBalance(wallet_id=uint32(2)),),
322+
],
311323
"get_nft_wallet_did": [(3,)],
312324
"get_connections": [(None,), (None,)],
313325
}

chia/_tests/environments/wallet.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
from chia.wallet.wallet import Wallet
2626
from chia.wallet.wallet_node import Balance, WalletNode
2727
from chia.wallet.wallet_node_api import WalletNodeAPI
28+
from chia.wallet.wallet_request_types import GetWalletBalance
2829
from chia.wallet.wallet_rpc_api import WalletRpcApi
2930
from chia.wallet.wallet_rpc_client import WalletRpcClient
3031
from chia.wallet.wallet_state_manager import WalletStateManager
@@ -169,7 +170,9 @@ async def check_balances(self, additional_balance_info: dict[Union[int, str], di
169170
else {}
170171
),
171172
}
172-
balance_response: dict[str, int] = await self.rpc_client.get_wallet_balance(wallet_id)
173+
balance_response: dict[str, int] = (
174+
await self.rpc_client.get_wallet_balance(GetWalletBalance(wallet_id))
175+
).wallet_balance.to_json_dict()
173176

174177
if not expected_result.items() <= balance_response.items():
175178
for key, value in expected_result.items():

chia/_tests/pools/test_pool_rpc.py

Lines changed: 36 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,14 @@
4141
from chia.wallet.util.tx_config import DEFAULT_TX_CONFIG
4242
from chia.wallet.util.wallet_types import WalletType
4343
from chia.wallet.wallet_node import WalletNode
44-
from chia.wallet.wallet_request_types import GetWallets, PWAbsorbRewards, PWJoinPool, PWSelfPool, PWStatus
44+
from chia.wallet.wallet_request_types import (
45+
GetWalletBalance,
46+
GetWallets,
47+
PWAbsorbRewards,
48+
PWJoinPool,
49+
PWSelfPool,
50+
PWStatus,
51+
)
4552
from chia.wallet.wallet_rpc_client import WalletRpcClient
4653
from chia.wallet.wallet_state_manager import WalletStateManager
4754

@@ -468,8 +475,8 @@ def mempool_empty() -> bool:
468475
assert len(asset_id) > 0
469476
await full_node_api.process_all_wallet_transactions(wallet=wallet)
470477
await full_node_api.wait_for_wallet_synced(wallet_node=wallet_node, timeout=20)
471-
bal_0 = await client.get_wallet_balance(cat_0_id)
472-
assert bal_0["confirmed_wallet_balance"] == 20
478+
bal_0 = (await client.get_wallet_balance(GetWalletBalance(cat_0_id))).wallet_balance
479+
assert bal_0.confirmed_wallet_balance == 20
473480

474481
# Test creation of many pool wallets. Use untrusted since that is the more complicated protocol, but don't
475482
# run this code more than once, since it's slow.
@@ -535,8 +542,8 @@ async def test_absorb_self(
535542
await add_blocks_in_batches(blocks[-3:], full_node_api.full_node)
536543
await full_node_api.wait_for_wallet_synced(wallet_node=wallet_node, timeout=20)
537544

538-
bal = await client.get_wallet_balance(2)
539-
assert bal["confirmed_wallet_balance"] == 2 * 1_750_000_000_000
545+
bal = (await client.get_wallet_balance(GetWalletBalance(uint32(2)))).wallet_balance
546+
assert bal.confirmed_wallet_balance == 2 * 1_750_000_000_000
540547

541548
# Claim 2 * 1.75, and farm a new 1.75
542549
absorb_txs = (
@@ -561,8 +568,8 @@ async def test_absorb_self(
561568
new_status: PoolWalletInfo = (await client.pw_status(PWStatus(uint32(2)))).state
562569
assert status.current == new_status.current
563570
assert status.tip_singleton_coin_id != new_status.tip_singleton_coin_id
564-
bal = await client.get_wallet_balance(2)
565-
assert bal["confirmed_wallet_balance"] == 1 * 1_750_000_000_000
571+
bal = (await client.get_wallet_balance(GetWalletBalance(uint32(2)))).wallet_balance
572+
assert bal.confirmed_wallet_balance == 1 * 1_750_000_000_000
566573

567574
# Claim another 1.75
568575
absorb_txs1 = (
@@ -575,8 +582,8 @@ async def test_absorb_self(
575582

576583
await full_node_api.farm_blocks_to_puzzlehash(count=2, farm_to=our_ph, guarantee_transaction_blocks=True)
577584
await full_node_api.wait_for_wallet_synced(wallet_node=wallet_node, timeout=20)
578-
bal = await client.get_wallet_balance(2)
579-
assert bal["confirmed_wallet_balance"] == 0
585+
bal = (await client.get_wallet_balance(GetWalletBalance(uint32(2)))).wallet_balance
586+
assert bal.confirmed_wallet_balance == 0
580587

581588
assert len(await wallet_node.wallet_state_manager.tx_store.get_unconfirmed_for_wallet(2)) == 0
582589

@@ -590,8 +597,8 @@ async def test_absorb_self(
590597
await full_node_api.farm_blocks_to_puzzlehash(count=2, farm_to=our_ph, guarantee_transaction_blocks=True)
591598

592599
# Balance ignores non coinbase TX
593-
bal = await client.get_wallet_balance(2)
594-
assert bal["confirmed_wallet_balance"] == 0
600+
bal = (await client.get_wallet_balance(GetWalletBalance(uint32(2)))).wallet_balance
601+
assert bal.confirmed_wallet_balance == 0
595602

596603
with pytest.raises(ValueError):
597604
await client.pw_absorb_rewards(
@@ -626,8 +633,8 @@ async def test_absorb_self_multiple_coins(
626633
pool_expected_confirmed_balance = 0
627634

628635
await full_node_api.wait_for_wallet_synced(wallet_node=wallet_node, timeout=20)
629-
main_bal = await client.get_wallet_balance(1)
630-
assert main_bal["confirmed_wallet_balance"] == main_expected_confirmed_balance
636+
main_bal = (await client.get_wallet_balance(GetWalletBalance(uint32(1)))).wallet_balance
637+
assert main_bal.confirmed_wallet_balance == main_expected_confirmed_balance
631638

632639
status: PoolWalletInfo = (await client.pw_status(PWStatus(uint32(2)))).state
633640
assert status.current.state == PoolSingletonState.SELF_POOLING.value
@@ -650,10 +657,10 @@ async def test_absorb_self_multiple_coins(
650657
pool_expected_confirmed_balance += block_count * 1_750_000_000_000
651658
main_expected_confirmed_balance += block_count * 250_000_000_000
652659

653-
main_bal = await client.get_wallet_balance(1)
654-
assert main_bal["confirmed_wallet_balance"] == main_expected_confirmed_balance
655-
bal = await client.get_wallet_balance(2)
656-
assert bal["confirmed_wallet_balance"] == pool_expected_confirmed_balance
660+
main_bal = (await client.get_wallet_balance(GetWalletBalance(uint32(1)))).wallet_balance
661+
assert main_bal.confirmed_wallet_balance == main_expected_confirmed_balance
662+
bal = (await client.get_wallet_balance(GetWalletBalance(uint32(2)))).wallet_balance
663+
assert bal.confirmed_wallet_balance == pool_expected_confirmed_balance
657664

658665
# Claim
659666
absorb_txs = (
@@ -671,10 +678,10 @@ async def test_absorb_self_multiple_coins(
671678
new_status: PoolWalletInfo = (await client.pw_status(PWStatus(uint32(2)))).state
672679
assert status.current == new_status.current
673680
assert status.tip_singleton_coin_id != new_status.tip_singleton_coin_id
674-
main_bal = await client.get_wallet_balance(1)
675-
pool_bal = await client.get_wallet_balance(2)
676-
assert pool_bal["confirmed_wallet_balance"] == pool_expected_confirmed_balance
677-
assert main_bal["confirmed_wallet_balance"] == main_expected_confirmed_balance # 10499999999999
681+
main_bal = (await client.get_wallet_balance(GetWalletBalance(uint32(1)))).wallet_balance
682+
pool_bal = (await client.get_wallet_balance(GetWalletBalance(uint32(2)))).wallet_balance
683+
assert pool_bal.confirmed_wallet_balance == pool_expected_confirmed_balance
684+
assert main_bal.confirmed_wallet_balance == main_expected_confirmed_balance # 10499999999999
678685

679686
@pytest.mark.anyio
680687
async def test_absorb_pooling(
@@ -726,8 +733,8 @@ async def farming_to_pool() -> bool:
726733
await full_node_api.wait_for_wallet_synced(wallet_node=wallet_node, timeout=20)
727734
# Pooled plots don't have balance
728735
main_expected_confirmed_balance += block_count * 250_000_000_000
729-
bal = await client.get_wallet_balance(2)
730-
assert bal["confirmed_wallet_balance"] == 0
736+
bal = (await client.get_wallet_balance(GetWalletBalance(uint32(2)))).wallet_balance
737+
assert bal.confirmed_wallet_balance == 0
731738

732739
# Claim block_count * 1.75
733740
ret = await client.pw_absorb_rewards(
@@ -751,12 +758,12 @@ async def status_updated() -> bool:
751758

752759
await time_out_assert(20, status_updated)
753760
new_status = (await client.pw_status(PWStatus(uint32(2)))).state
754-
bal = await client.get_wallet_balance(2)
755-
assert bal["confirmed_wallet_balance"] == 0
761+
bal = (await client.get_wallet_balance(GetWalletBalance(uint32(2)))).wallet_balance
762+
assert bal.confirmed_wallet_balance == 0
756763

757764
await full_node_api.wait_for_wallet_synced(wallet_node=wallet_node, timeout=20)
758-
bal = await client.get_wallet_balance(2)
759-
assert bal["confirmed_wallet_balance"] == 0
765+
bal = (await client.get_wallet_balance(GetWalletBalance(uint32(2)))).wallet_balance
766+
assert bal.confirmed_wallet_balance == 0
760767
assert len(await wallet_node.wallet_state_manager.tx_store.get_unconfirmed_for_wallet(2)) == 0
761768
peak = full_node_api.full_node.blockchain.get_peak()
762769
assert peak is not None
@@ -798,8 +805,8 @@ async def status_updated() -> bool:
798805
status = (await client.pw_status(PWStatus(uint32(2)))).state
799806
assert ret.fee_transaction is None
800807

801-
bal2 = await client.get_wallet_balance(2)
802-
assert bal2["confirmed_wallet_balance"] == 0
808+
bal2 = (await client.get_wallet_balance(GetWalletBalance(uint32(2)))).wallet_balance
809+
assert bal2.confirmed_wallet_balance == 0
803810

804811
@pytest.mark.anyio
805812
async def test_self_pooling_to_pooling(self, setup: Setup, fee: uint64, self_hostname: str) -> None:

0 commit comments

Comments
 (0)