Correct way to create Genservers using Dynamic Supervisor

I am trying to create a dynamic supervisor to start child processes. There are three modules I am using to do this, one is the main module, the second one is the Dynamic Supervisor and the third is the genserver. I do not get any errors but I am not able to see any child processes running.

Here is my code. The first one is the module having the main method

defmodule Simulator do
	def main(args) do
		{:ok, super_pid} = PersonManager.start_link(args)
        IO.inspect PersonManager.count_children, label: "The Persons started in main method are"

	def start_persons(num_of_persons) when num_of_persons >=1 do
	    PersonManager.add_node(private_key, public_key, 0)
    # num_of_persons == 0 case handled

The following is a dynamic Supervisor

defmodule PersonManager do
  use DynamicSupervisor

  def start_link(args) do
    DynamicSupervisor.start_link(__MODULE__, :ok, name: __MODULE__)

  def add_node(private_key, public_key, num_of_coins) do
    # The code flow does come here, used inspect to check
    child_spec = {Person, {private_key, public_key, num_of_coins}}
    DynamicSupervisor.start_child(__MODULE__, child_spec)
    #The code flow does come here, used inpect to check.   

The following is the GenServers the worker is supposed to create

defmodule Person do
  use GenServer

  def init({private_key, public_key, address, num_of_coins}) do
    IO.puts "Starting a person"
    {:ok, %{private_key: private_key, public_key: public_key, num_of_coins: num_of_coins}}

  def start_link({private_key, public_key, address, num_of_coins}) do
    IO.puts "Starting a person"
      {private_key, public_key, address, num_of_coins}
      name: {:global, "node:#{public_key}"},

I expect the genserver to be running but I get The Persons started in main method are: %{active: 0, specs: 0, supervisors: 0, workers: 0}

I dont know why the supervisor is not able to start the genserver.
Any help would be good.

Can you show this function count_children ?

Thanks for looking into this Ben. Here is the function>

def count_children do

Also here is my full code and

Did you check the MIX OTP guide?
Here is the working code I made.

and the MIX OTP guide is here