Replace ExchangeInfo and HandshakeFactory

**Description:** replace ExchangeInfo and HandshakeFactory.
**Testing:** tests still pass
**Coverage:** about the same
nit: I would use `exchange.amounts` for both amounts for consistency