This is the path reference that you are provided in layout file

    <path>earnings/earnings/</path>

This will set your link to this path `http://www.mysite.com/earnings/earnings`. When magento looks for this path, it cannot find a valid controller definition. That is why it throws `404 error`. So set your path to 

      <path>earnings/</path>
             or
       <path>earnings/index/</path>

will solve your issue. Now the link look like `http://www.mysite.com/earnings/index/`. You have defined your block for this specific url. Note you have used `earning_index_index` handle in your layout file. This handle will be processed by magneto only when `http://www.mysite.com/earnings/index/` url get requested. 

Note: In order to work this url perfectly, you should have an `IndexController.php` is defined for your module and this file should hold this method.

    public function indexAction() {
    
       $this->loadLayout();
       $this->renderLayout();
    }

If this method and this file is not defined for your module, Magento will throw `404 error` again.