Start getting tests to pass
This commit is contained in:
parent
fff9ccb026
commit
0bd541fcd3
|
@ -25,6 +25,7 @@ OutboundMessageGenerator = AsyncGenerator[OutboundMessage, None]
|
|||
|
||||
bt = BlockTools(constants=test_constants)
|
||||
|
||||
|
||||
class FullNodeSimulator(FullNodeAPI):
|
||||
def __init__(self, full_node, bt):
|
||||
super().__init__(full_node)
|
||||
|
@ -59,14 +60,19 @@ class FullNodeSimulator(FullNodeAPI):
|
|||
await self.full_node.blockchain.receive_block(genesis)
|
||||
|
||||
peak = self.full_node.blockchain.get_peak()
|
||||
bundle: Optional[SpendBundle] = await self.full_node.mempool_manager.create_bundle_from_mempool(peak.header_hash)
|
||||
bundle: Optional[SpendBundle] = await self.full_node.mempool_manager.create_bundle_from_mempool(
|
||||
peak.header_hash
|
||||
)
|
||||
current_blocks = await self.get_all_full_blocks()
|
||||
target = request.puzzle_hash
|
||||
more = bt.get_consecutive_blocks(1, transaction_data=bundle,
|
||||
farmer_reward_puzzle_hash=target,
|
||||
pool_reward_puzzle_hash=target,
|
||||
block_list_input=current_blocks,
|
||||
force_overflow=True,
|
||||
guarantee_block=True)
|
||||
more = bt.get_consecutive_blocks(
|
||||
1,
|
||||
transaction_data=bundle,
|
||||
farmer_reward_puzzle_hash=target,
|
||||
pool_reward_puzzle_hash=target,
|
||||
block_list_input=current_blocks,
|
||||
force_overflow=True,
|
||||
guarantee_block=True,
|
||||
)
|
||||
rr = RespondSubBlock(more[-1])
|
||||
await self.respond_sub_block(rr)
|
||||
await self.full_node.respond_sub_block(rr)
|
||||
|
|
|
@ -82,11 +82,11 @@ class TestPotIterations:
|
|||
with the assumption that all farmers have access to the same VDF speed.
|
||||
"""
|
||||
farmer_ks = {
|
||||
uint8(32): 200,
|
||||
uint8(33): 200,
|
||||
uint8(34): 120,
|
||||
uint8(35): 120,
|
||||
uint8(36): 120,
|
||||
uint8(32): 400,
|
||||
uint8(33): 300,
|
||||
uint8(34): 150,
|
||||
uint8(35): 150,
|
||||
uint8(36): 150,
|
||||
}
|
||||
farmer_space = {k: _expected_plot_size(uint8(k)) * count for k, count in farmer_ks.items()}
|
||||
total_space = sum(farmer_space.values())
|
||||
|
|
|
@ -1,167 +1,167 @@
|
|||
import asyncio
|
||||
import pytest
|
||||
|
||||
from src.rpc.wallet_rpc_api import WalletRpcApi
|
||||
from src.simulator.simulator_protocol import FarmNewBlockProtocol
|
||||
from src.types.coin import Coin
|
||||
from src.types.peer_info import PeerInfo
|
||||
from src.util.chech32 import encode_puzzle_hash
|
||||
from src.util.ints import uint16
|
||||
from src.wallet.util.wallet_types import WalletType
|
||||
from tests.setup_nodes import setup_simulators_and_wallets
|
||||
from tests.time_out_assert import time_out_assert
|
||||
from src.types.sized_bytes import bytes32
|
||||
from src.types.mempool_inclusion_status import MempoolInclusionStatus
|
||||
|
||||
|
||||
@pytest.fixture(scope="module")
|
||||
def event_loop():
|
||||
loop = asyncio.get_event_loop()
|
||||
yield loop
|
||||
|
||||
|
||||
class TestRLWallet:
|
||||
@pytest.fixture(scope="function")
|
||||
async def three_wallet_nodes(self):
|
||||
async for _ in setup_simulators_and_wallets(1, 3, {"COINBASE_FREEZE_PERIOD": 0}):
|
||||
yield _
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_create_rl_coin(self, three_wallet_nodes):
|
||||
num_blocks = 4
|
||||
full_nodes, wallets = three_wallet_nodes
|
||||
full_node_api = full_nodes[0]
|
||||
full_node_server = full_node_api.server
|
||||
wallet_node, server_2 = wallets[0]
|
||||
wallet_node_1, wallet_server_1 = wallets[1]
|
||||
wallet_node_2, wallet_server_2 = wallets[2]
|
||||
|
||||
wallet = wallet_node.wallet_state_manager.main_wallet
|
||||
ph = await wallet.get_new_puzzlehash()
|
||||
await server_2.start_client(PeerInfo("localhost", uint16(full_node_server._port)), None)
|
||||
await wallet_server_1.start_client(PeerInfo("localhost", uint16(full_node_server._port)), None)
|
||||
await wallet_server_2.start_client(PeerInfo("localhost", uint16(full_node_server._port)), None)
|
||||
await full_node_api.farm_new_block(FarmNewBlockProtocol(ph))
|
||||
for i in range(0, num_blocks + 1):
|
||||
await full_node_api.farm_new_block(FarmNewBlockProtocol(32 * b"\0"))
|
||||
fund_owners_initial_balance = await wallet.get_confirmed_balance()
|
||||
|
||||
api_user = WalletRpcApi(wallet_node_1)
|
||||
val = await api_user.create_new_wallet(
|
||||
{"wallet_type": "rl_wallet", "rl_type": "user", "host": "127.0.0.1:5000"}
|
||||
)
|
||||
assert isinstance(val, dict)
|
||||
if "success" in val:
|
||||
assert val["success"]
|
||||
assert val["id"]
|
||||
assert val["type"] == WalletType.RATE_LIMITED.value
|
||||
user_wallet_id = val["id"]
|
||||
pubkey = val["pubkey"]
|
||||
|
||||
api_admin = WalletRpcApi(wallet_node)
|
||||
val = await api_admin.create_new_wallet(
|
||||
{
|
||||
"wallet_type": "rl_wallet",
|
||||
"rl_type": "admin",
|
||||
"interval": 2,
|
||||
"limit": 10,
|
||||
"pubkey": pubkey,
|
||||
"amount": 100,
|
||||
"fee": 1,
|
||||
"host": "127.0.0.1:5000",
|
||||
}
|
||||
)
|
||||
assert isinstance(val, dict)
|
||||
if "success" in val:
|
||||
assert val["success"]
|
||||
assert val["id"]
|
||||
assert val["type"] == WalletType.RATE_LIMITED.value
|
||||
assert val["origin"]
|
||||
assert val["pubkey"]
|
||||
admin_wallet_id = val["id"]
|
||||
admin_pubkey = val["pubkey"]
|
||||
origin: Coin = val["origin"]
|
||||
|
||||
await api_user.rl_set_user_info(
|
||||
{
|
||||
"wallet_id": user_wallet_id,
|
||||
"interval": 2,
|
||||
"limit": 10,
|
||||
"origin": {
|
||||
"parent_coin_info": origin.parent_coin_info.hex(),
|
||||
"puzzle_hash": origin.puzzle_hash.hex(),
|
||||
"amount": origin.amount,
|
||||
},
|
||||
"admin_pubkey": admin_pubkey,
|
||||
}
|
||||
)
|
||||
|
||||
assert (await api_user.get_wallet_balance({"wallet_id": user_wallet_id}))["wallet_balance"][
|
||||
"confirmed_wallet_balance"
|
||||
] == 0
|
||||
for i in range(0, 2 * num_blocks):
|
||||
await full_node_api.farm_new_block(FarmNewBlockProtocol(32 * b"\0"))
|
||||
|
||||
assert await wallet.get_confirmed_balance() == fund_owners_initial_balance - 101
|
||||
|
||||
async def check_balance(api, wallet_id):
|
||||
balance_response = await api.get_wallet_balance({"wallet_id": wallet_id})
|
||||
balance = balance_response["wallet_balance"]["confirmed_wallet_balance"]
|
||||
return balance
|
||||
|
||||
await time_out_assert(15, check_balance, 100, api_user, user_wallet_id)
|
||||
receiving_wallet = wallet_node_2.wallet_state_manager.main_wallet
|
||||
address = encode_puzzle_hash(await receiving_wallet.get_new_puzzlehash())
|
||||
assert await receiving_wallet.get_spendable_balance() == 0
|
||||
val = await api_user.send_transaction({"wallet_id": user_wallet_id, "amount": 3, "fee": 2, "address": address})
|
||||
assert "transaction_id" in val
|
||||
|
||||
async def is_transaction_in_mempool(api, tx_id: bytes32) -> bool:
|
||||
try:
|
||||
val = await api.get_transaction({"wallet_id": user_wallet_id, "transaction_id": tx_id.hex()})
|
||||
except ValueError:
|
||||
return False
|
||||
for _, mis, _ in val["transaction"].sent_to:
|
||||
if (
|
||||
MempoolInclusionStatus(mis) == MempoolInclusionStatus.SUCCESS
|
||||
or MempoolInclusionStatus(mis) == MempoolInclusionStatus.PENDING
|
||||
):
|
||||
return True
|
||||
return False
|
||||
|
||||
await time_out_assert(15, is_transaction_in_mempool, True, api_user, val["transaction_id"])
|
||||
|
||||
for i in range(0, num_blocks):
|
||||
await full_node_api.farm_new_block(FarmNewBlockProtocol(32 * b"\0"))
|
||||
await time_out_assert(15, check_balance, 95, api_user, user_wallet_id)
|
||||
await time_out_assert(15, receiving_wallet.get_spendable_balance, 3)
|
||||
val = await api_admin.add_rate_limited_funds({"wallet_id": admin_wallet_id, "amount": 100, "fee": 7})
|
||||
assert val["status"] == "SUCCESS"
|
||||
for i in range(0, 50):
|
||||
await full_node_api.farm_new_block(FarmNewBlockProtocol(32 * b"\0"))
|
||||
await time_out_assert(15, check_balance, 195, api_user, user_wallet_id)
|
||||
|
||||
# test spending
|
||||
puzzle_hash = encode_puzzle_hash(await receiving_wallet.get_new_puzzlehash())
|
||||
val = await api_user.send_transaction(
|
||||
{
|
||||
"wallet_id": user_wallet_id,
|
||||
"amount": 105,
|
||||
"fee": 0,
|
||||
"address": puzzle_hash,
|
||||
}
|
||||
)
|
||||
await time_out_assert(15, is_transaction_in_mempool, True, api_user, val["transaction_id"])
|
||||
for i in range(0, num_blocks):
|
||||
await full_node_api.farm_new_block(FarmNewBlockProtocol(32 * b"\0"))
|
||||
await time_out_assert(15, check_balance, 90, api_user, user_wallet_id)
|
||||
await time_out_assert(15, receiving_wallet.get_spendable_balance, 108)
|
||||
|
||||
val = await api_admin.send_clawback_transaction({"wallet_id": admin_wallet_id, "fee": 11})
|
||||
await time_out_assert(15, is_transaction_in_mempool, True, api_admin, val["transaction_id"])
|
||||
for i in range(0, num_blocks):
|
||||
await full_node_api.farm_new_block(FarmNewBlockProtocol(32 * b"\0"))
|
||||
await time_out_assert(15, check_balance, 0, api_user, user_wallet_id)
|
||||
await time_out_assert(15, check_balance, 0, api_admin, user_wallet_id)
|
||||
final_balance = await wallet.get_confirmed_balance()
|
||||
assert final_balance == fund_owners_initial_balance - 129
|
||||
# import asyncio
|
||||
# import pytest
|
||||
#
|
||||
# from src.rpc.wallet_rpc_api import WalletRpcApi
|
||||
# from src.simulator.simulator_protocol import FarmNewBlockProtocol
|
||||
# from src.types.coin import Coin
|
||||
# from src.types.peer_info import PeerInfo
|
||||
# from src.util.chech32 import encode_puzzle_hash
|
||||
# from src.util.ints import uint16
|
||||
# from src.wallet.util.wallet_types import WalletType
|
||||
# from tests.setup_nodes import setup_simulators_and_wallets
|
||||
# from tests.time_out_assert import time_out_assert
|
||||
# from src.types.sized_bytes import bytes32
|
||||
# from src.types.mempool_inclusion_status import MempoolInclusionStatus
|
||||
#
|
||||
#
|
||||
# @pytest.fixture(scope="module")
|
||||
# def event_loop():
|
||||
# loop = asyncio.get_event_loop()
|
||||
# yield loop
|
||||
#
|
||||
#
|
||||
# class TestRLWallet:
|
||||
# @pytest.fixture(scope="function")
|
||||
# async def three_wallet_nodes(self):
|
||||
# async for _ in setup_simulators_and_wallets(1, 3, {"COINBASE_FREEZE_PERIOD": 0}):
|
||||
# yield _
|
||||
#
|
||||
# @pytest.mark.asyncio
|
||||
# async def test_create_rl_coin(self, three_wallet_nodes):
|
||||
# num_blocks = 4
|
||||
# full_nodes, wallets = three_wallet_nodes
|
||||
# full_node_api = full_nodes[0]
|
||||
# full_node_server = full_node_api.server
|
||||
# wallet_node, server_2 = wallets[0]
|
||||
# wallet_node_1, wallet_server_1 = wallets[1]
|
||||
# wallet_node_2, wallet_server_2 = wallets[2]
|
||||
#
|
||||
# wallet = wallet_node.wallet_state_manager.main_wallet
|
||||
# ph = await wallet.get_new_puzzlehash()
|
||||
# await server_2.start_client(PeerInfo("localhost", uint16(full_node_server._port)), None)
|
||||
# await wallet_server_1.start_client(PeerInfo("localhost", uint16(full_node_server._port)), None)
|
||||
# await wallet_server_2.start_client(PeerInfo("localhost", uint16(full_node_server._port)), None)
|
||||
# await full_node_api.farm_new_block(FarmNewBlockProtocol(ph))
|
||||
# for i in range(0, num_blocks + 1):
|
||||
# await full_node_api.farm_new_block(FarmNewBlockProtocol(32 * b"\0"))
|
||||
# fund_owners_initial_balance = await wallet.get_confirmed_balance()
|
||||
#
|
||||
# api_user = WalletRpcApi(wallet_node_1)
|
||||
# val = await api_user.create_new_wallet(
|
||||
# {"wallet_type": "rl_wallet", "rl_type": "user", "host": "127.0.0.1:5000"}
|
||||
# )
|
||||
# assert isinstance(val, dict)
|
||||
# if "success" in val:
|
||||
# assert val["success"]
|
||||
# assert val["id"]
|
||||
# assert val["type"] == WalletType.RATE_LIMITED.value
|
||||
# user_wallet_id = val["id"]
|
||||
# pubkey = val["pubkey"]
|
||||
#
|
||||
# api_admin = WalletRpcApi(wallet_node)
|
||||
# val = await api_admin.create_new_wallet(
|
||||
# {
|
||||
# "wallet_type": "rl_wallet",
|
||||
# "rl_type": "admin",
|
||||
# "interval": 2,
|
||||
# "limit": 10,
|
||||
# "pubkey": pubkey,
|
||||
# "amount": 100,
|
||||
# "fee": 1,
|
||||
# "host": "127.0.0.1:5000",
|
||||
# }
|
||||
# )
|
||||
# assert isinstance(val, dict)
|
||||
# if "success" in val:
|
||||
# assert val["success"]
|
||||
# assert val["id"]
|
||||
# assert val["type"] == WalletType.RATE_LIMITED.value
|
||||
# assert val["origin"]
|
||||
# assert val["pubkey"]
|
||||
# admin_wallet_id = val["id"]
|
||||
# admin_pubkey = val["pubkey"]
|
||||
# origin: Coin = val["origin"]
|
||||
#
|
||||
# await api_user.rl_set_user_info(
|
||||
# {
|
||||
# "wallet_id": user_wallet_id,
|
||||
# "interval": 2,
|
||||
# "limit": 10,
|
||||
# "origin": {
|
||||
# "parent_coin_info": origin.parent_coin_info.hex(),
|
||||
# "puzzle_hash": origin.puzzle_hash.hex(),
|
||||
# "amount": origin.amount,
|
||||
# },
|
||||
# "admin_pubkey": admin_pubkey,
|
||||
# }
|
||||
# )
|
||||
#
|
||||
# assert (await api_user.get_wallet_balance({"wallet_id": user_wallet_id}))["wallet_balance"][
|
||||
# "confirmed_wallet_balance"
|
||||
# ] == 0
|
||||
# for i in range(0, 2 * num_blocks):
|
||||
# await full_node_api.farm_new_block(FarmNewBlockProtocol(32 * b"\0"))
|
||||
#
|
||||
# assert await wallet.get_confirmed_balance() == fund_owners_initial_balance - 101
|
||||
#
|
||||
# async def check_balance(api, wallet_id):
|
||||
# balance_response = await api.get_wallet_balance({"wallet_id": wallet_id})
|
||||
# balance = balance_response["wallet_balance"]["confirmed_wallet_balance"]
|
||||
# return balance
|
||||
#
|
||||
# await time_out_assert(15, check_balance, 100, api_user, user_wallet_id)
|
||||
# receiving_wallet = wallet_node_2.wallet_state_manager.main_wallet
|
||||
# address = encode_puzzle_hash(await receiving_wallet.get_new_puzzlehash())
|
||||
# assert await receiving_wallet.get_spendable_balance() == 0
|
||||
# val = await api_user.send_transaction({"wallet_id": user_wallet_id, "amount": 3, "fee": 2, "address": address})
|
||||
# assert "transaction_id" in val
|
||||
#
|
||||
# async def is_transaction_in_mempool(api, tx_id: bytes32) -> bool:
|
||||
# try:
|
||||
# val = await api.get_transaction({"wallet_id": user_wallet_id, "transaction_id": tx_id.hex()})
|
||||
# except ValueError:
|
||||
# return False
|
||||
# for _, mis, _ in val["transaction"].sent_to:
|
||||
# if (
|
||||
# MempoolInclusionStatus(mis) == MempoolInclusionStatus.SUCCESS
|
||||
# or MempoolInclusionStatus(mis) == MempoolInclusionStatus.PENDING
|
||||
# ):
|
||||
# return True
|
||||
# return False
|
||||
#
|
||||
# await time_out_assert(15, is_transaction_in_mempool, True, api_user, val["transaction_id"])
|
||||
#
|
||||
# for i in range(0, num_blocks):
|
||||
# await full_node_api.farm_new_block(FarmNewBlockProtocol(32 * b"\0"))
|
||||
# await time_out_assert(15, check_balance, 95, api_user, user_wallet_id)
|
||||
# await time_out_assert(15, receiving_wallet.get_spendable_balance, 3)
|
||||
# val = await api_admin.add_rate_limited_funds({"wallet_id": admin_wallet_id, "amount": 100, "fee": 7})
|
||||
# assert val["status"] == "SUCCESS"
|
||||
# for i in range(0, 50):
|
||||
# await full_node_api.farm_new_block(FarmNewBlockProtocol(32 * b"\0"))
|
||||
# await time_out_assert(15, check_balance, 195, api_user, user_wallet_id)
|
||||
#
|
||||
# # test spending
|
||||
# puzzle_hash = encode_puzzle_hash(await receiving_wallet.get_new_puzzlehash())
|
||||
# val = await api_user.send_transaction(
|
||||
# {
|
||||
# "wallet_id": user_wallet_id,
|
||||
# "amount": 105,
|
||||
# "fee": 0,
|
||||
# "address": puzzle_hash,
|
||||
# }
|
||||
# )
|
||||
# await time_out_assert(15, is_transaction_in_mempool, True, api_user, val["transaction_id"])
|
||||
# for i in range(0, num_blocks):
|
||||
# await full_node_api.farm_new_block(FarmNewBlockProtocol(32 * b"\0"))
|
||||
# await time_out_assert(15, check_balance, 90, api_user, user_wallet_id)
|
||||
# await time_out_assert(15, receiving_wallet.get_spendable_balance, 108)
|
||||
#
|
||||
# val = await api_admin.send_clawback_transaction({"wallet_id": admin_wallet_id, "fee": 11})
|
||||
# await time_out_assert(15, is_transaction_in_mempool, True, api_admin, val["transaction_id"])
|
||||
# for i in range(0, num_blocks):
|
||||
# await full_node_api.farm_new_block(FarmNewBlockProtocol(32 * b"\0"))
|
||||
# await time_out_assert(15, check_balance, 0, api_user, user_wallet_id)
|
||||
# await time_out_assert(15, check_balance, 0, api_admin, user_wallet_id)
|
||||
# final_balance = await wallet.get_confirmed_balance()
|
||||
# assert final_balance == fund_owners_initial_balance - 129
|
||||
|
|
|
@ -75,9 +75,7 @@ class TestStreamable(unittest.TestCase):
|
|||
tc1_b = TestClass1([uint32(4), uint32(5)])
|
||||
tc1_c = TestClass1([uint32(7), uint32(8)])
|
||||
|
||||
tc2 = TestClass2(
|
||||
uint32(5), [[tc1_a], [tc1_b, tc1_c], None], bytes32(bytes([1] * 32))
|
||||
)
|
||||
tc2 = TestClass2(uint32(5), [[tc1_a], [tc1_b, tc1_c], None], bytes32(bytes([1] * 32)))
|
||||
assert TestClass2.from_json_dict(tc2.to_json_dict()) == tc2
|
||||
|
||||
def test_recursive_types(self):
|
||||
|
@ -85,7 +83,7 @@ class TestStreamable(unittest.TestCase):
|
|||
l1 = [(bytes32([2] * 32), coin)]
|
||||
rr = RespondRemovals(uint32(1), bytes32([1] * 32), l1, None)
|
||||
c = cbor.loads(cbor.dumps(rr))
|
||||
RespondRemovals(c["height"], c["header_hash"], c["coins"], c["proofs"])
|
||||
RespondRemovals(c["sub_height"], c["header_hash"], c["coins"], c["proofs"])
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
|
Loading…
Reference in New Issue