async def METHOD_NAME(self, three_nodes_two_wallets, self_hostname):
    num_blocks = 5
    full_nodes, wallets, _ = three_nodes_two_wallets
    wallet_0, wallet_server_0 = wallets[0]
    wallet_1, wallet_server_1 = wallets[1]
    full_node_api_0 = full_nodes[0]
    server_0 = full_node_api_0.server
    full_node_api_1 = full_nodes[1]
    server_1 = full_node_api_1.server
    full_node_api_2 = full_nodes[2]
    server_2 = full_node_api_2.server
    ph = await wallet_0.wallet_state_manager.main_wallet.get_new_puzzlehash()
    ph1 = await wallet_1.wallet_state_manager.main_wallet.get_new_puzzlehash()
    #
    # wallet0 <-> sever0 <-> server1 <-> server2 <-> wallet1
    #
    await wallet_server_0.start_client(PeerInfo(self_hostname, uint16(server_0._port)), None)
    await server_0.start_client(PeerInfo(self_hostname, uint16(server_1._port)), None)
    await server_1.start_client(PeerInfo(self_hostname, uint16(server_2._port)), None)
    await wallet_server_1.start_client(PeerInfo(self_hostname, uint16(server_2._port)), None)
    for i in range(num_blocks):
        await full_node_api_0.farm_new_transaction_block(FarmNewBlockProtocol(ph))
    funds = sum(
        [calculate_pool_reward(uint32(i)) + calculate_base_farmer_reward(uint32(i)) for i in range(1, num_blocks)]
    )
    await time_out_assert(20, wallet_0.wallet_state_manager.main_wallet.get_confirmed_balance, funds)
    async def peak_height(fna: FullNodeAPI):
        peak: Optional[BlockRecord] = fna.full_node.blockchain.get_peak()
        if peak is None:
            return -1
        peak_height = peak.height
        return peak_height
    await time_out_assert(20, peak_height, num_blocks, full_node_api_1)
    await time_out_assert(20, peak_height, num_blocks, full_node_api_2)
    tx = await wallet_0.wallet_state_manager.main_wallet.generate_signed_transaction(10, ph1, DEFAULT_TX_CONFIG, 0)
    await wallet_0.wallet_state_manager.main_wallet.push_transaction(tx)
    await time_out_assert(
        10,
        full_node_api_0.full_node.mempool_manager.get_spendbundle,
        tx.spend_bundle,
        tx.name,
    )
    await time_out_assert(
        10,
        full_node_api_1.full_node.mempool_manager.get_spendbundle,
        tx.spend_bundle,
        tx.name,
    )
    await time_out_assert(
        10,
        full_node_api_2.full_node.mempool_manager.get_spendbundle,
        tx.spend_bundle,
        tx.name,
    )
    # Farm another block
    for i in range(1, 8):
        await full_node_api_1.farm_new_transaction_block(FarmNewBlockProtocol(token_bytes()))
    funds = sum(
        [
            calculate_pool_reward(uint32(i)) + calculate_base_farmer_reward(uint32(i))
            for i in range(1, num_blocks + 1)
        ]
    )
    print(f"Funds: {funds}")
    await time_out_assert(
        10,
        wallet_0.wallet_state_manager.main_wallet.get_confirmed_balance,
        (funds - 10),
    )
    await time_out_assert(20, wallet_1.wallet_state_manager.main_wallet.get_confirmed_balance, 10)