     [prev_block | _] = blocks
     block = :rpc |> Gold.getblock!(prev_block.previousblockhash)
 
-    cnt = blocks |> Enum.count
-    div = cnt/100
-    if (Float.ceil(div) == div) do
-      IO.puts cnt
-    end
-
     block |> process_block
 
     unless (block.height == low) do

      Agent.start_link(fn ->
        %{
          low_cnt: block_cnt - 100,
          high_cnt: block_cnt - 100
         }
      end, name: @agent_name)
      # Init the task supervisor

    {:noreply, new_state}
  end

  def handle_info({_ref, %{height: height} }, state) do
    # TODO register parsed block height
    div = height/100
    if (Float.ceil(div) == div) do
      IO.puts height
    end
    {:noreply, state}
  end

  def handle_info({:DOWN, _ref, :process, _pid, :normal}, state) do
    # ignore
    {:noreply, state}
  end

  ## Private

  defp retrieve(key) do
    @agent_name
    |> Agent.get(&Map.get(&1, key))
  end

  defp store(value, key) do
    @agent_name
    |> Agent.update(&Map.put(&1, key, value))
  end

  defp add_to_pkh({:ok, pkh}, txn_id) do
    @agent_name
    |> Agent.get_and_update(fn(map) ->
      map |> Map.get_and_update(:pkh_index, fn(index) ->
        index
        |> Map.get_and_update(pkh, fn(set) -> {set, set |> add(txn_id)} end)
      end)
    end)
  end
  defp add_to_pkh({:error, _}, _txn_id), do: nil

  defp add(nil, element), do: MapSet.new([element])
  defp add(set, element), do: set |> MapSet.put(element)

  defp parse_blocks!(low, high) do
    hash = :rpc |> Gold.getblockhash!(high)
