Charon - 2020-05-29 Added persistence module to persist channel state data and handle client shutdowns/restarts, as well as disconnects/reconnects. Added: - Persistence: - Persister, Restorer, ChannelIterator interfaces to allow for multiple persistence implementations. - sortedkv implementation provided (in-memory and LevelDB). - States and signatures are constantly persisted while channels progress. - Clients restore all saved channels on startup. State is synchronized with peers. - `Client.OnNewChannel` callback registration to deal with restored channels. - Wallet interface for account unlocking abstraction. - Used during persistence to restore secret keys for signing. - Implemented for the Ethereum and simulated backend. - Peer disconnect/reconnect handling. - `Channel.UpdateBy` functional channel update method for better usability. Changed: - License changed to Apache 2.0. - Replaced `Channel.ListenUpdates` and `Client.HandleChannelProposals` with `Client.Handle(ProposalHandler, UpdateHandler)` - a single common handler routine per client. - Adapted client to new persistence layer and wallet. - Made Ethereum interactions idempotent (increased safety). - Moved subpackage `db` to `pkg/sortedkv`. - Swapped Balance dimensions of type `channel.Allocation`. - Random type generators in package `channel/test` now accept options to customize random data generation. - Channels now get automatically closed when peers disconnect (and restored on reconnect). Fixed: - Ethereum backend: No funding transactions for zero own initial channel balances.