mining_proxy_sv2 0.1.1

SV2 mining proxy role
Documentation
# mining-proxy

## Run

## proxy-config.toml file

When spawned the proxy will look in the current working directory (linux) for a
`proxy-config.config` if the file is not available the proxy will panic. We can specify a different
path for the config file with the `-c` option.

The config need to be a valid toml file with the below values:
1. upstreams: vector of upstreams (likely pools). An upstream is composed by:
  1. channel_kind: can be either `Group`, `Extended`, `ExtendedWithDeclarator`.
    * __Group__: Proxy do not open an extended channel with upstream but just relay request to
        open standard channel from downstream to upstream, being the proxy non HOM the channels are
        grouped.
    * __Extended__: Proxy open an extended channel with upstream. When downstream ask to open
        standard channels it just use the open extended channel with upstream to itself open
        standard channels downstream.
    * __ExtendedWithDeclarator__: Like `Extended` but do not relay on the pool to create new job. It
        just connect to a TP and communicate to the pool which is the job that it want to work with.
  2. adress: ip address of the upstream
  3. port: upstream's port
  4. pub_key: is the public key that upstream will use to sign the upstream cert needed for the
     noise handshake.
  5. jd_values: optional value only needed when `channel_kind` is `ExtendedWithDeclarator` is
     composed by:
       1. address: ip of the JD that we want to use with this upstream
       2. port: port of the JD that we want to use with this upstream
       3. pub_key: pub_key of the JD that we want to use with this upstream
2. tp_address: optional value only needed when at least one `upstream` in `upstreams` has the kind
   `ExtendedWithDeclarator`. Is the address in the form `[ip:port]` of the TP.
3. listen_address: the address at which the `mining-proxy` will accept downstream connection.
4. listen_mining_port: the port at which the `mining-proxy` will accept downstream connection.
5. max_supported_version: the `mining-proxy` will not connect to upstream the are using an Sv2
   version higher that the one specified here (default to 2)
6. min_supported_version: the `mining-proxy` will not connect to upstream the are using an Sv2
   version smaller that the one specified here (default to 2)
7. downstream_share_per_minute: how many share per minute downstream is supposed to produce. The
   `mining-proxy` will use this value and the expected downstream hash rate (communicate vie 
   `penStandardMiningChannel` to calculate the right downstream target.

### Test miner <-> proxy <-> pool stack

Terminal 1:
```
% cd examples/sv2-proxy
% cargo run --bin pool
```

Terminal 2:
Run mining proxy:

```
% # For help run `cargo run -- --help`
% cd roles/v2/mining-proxy
% cargo run
```

Terminal 3:
```
% cd examples/sv2-proxy
% cargo run --bin mining-device
```