Releases: perun-network/go-perun_archived
Fenrir
Fenrir - 2020-12-18
Support for on-chain progression of app channels.
Added
- On-chain progression: The channel watcher is now interactive and informs the
client when a channel has been registered on-chain. If the channel has a
defined app logic with a valid state transition logic, clients can
individually progress the app state on-chain according to the defined state
transition logic by callingProgressBy
on the channel object. - Settle with sub-channel disputes: Ledger channels can now be settled with
funds locked in disputed sub-channels if the corresponding sub-channels have
been registered and the disputes have been resolved on-chain.
Changed
- The channel watcher logic changed. The channel watcher now takes as input an
event handler which gets notified about on-chain channel events. Before, the
watcher automatically settled a channel in case of a dispute. Now, the watcher
will automatically detect if an old state has been registered, refute with the
most recent one, and notify the user. If the channel has a defined application
logic, the user can further progress the channel on-chain. It is within the
responsibility of the framework user to finally settle the channel and
withdraw the funds. - The channel settling logic changed. Before, a call to
Settle
on a channel
object automatically registered the channel, concluded it, and withdrew the
funds. Now, to accomodate on-chain progression functionality, the user must
callRegister
independetly before being able to settle the channel.
Afterwards, for app channels, the user has the opportunity to progress the
channel state on-chain by callingProgressBy
. Finally, the user can settle
the channel by callingSettle
. ContractBackend.NewTransactor
now sets the context onTransactOpts
.
Furthermore, parametervalue
has been removed.
Fixed
- Persistence: Sub-channels are now persisted and restored properly.
European Ecstasy
European Ecstasy - 2020-11-05
ERC20 and Funding Agreement support and many test fixes.
Added
- Funding agreement support: when proposing channels, the proposer can now
optionally suggest to reallocate the funding responsibilities among the
participants so that it differs from the initial channel allocation. - ERC20 support.
- A context-aware
WaitGroup
implementation topkg/sync
.
Changed
- The
eth/wallet/hd.Transactor
to use the correcttypes.Signer
if the
Wallet
has a correctSignHash
method. - The Go version to 1.15.
Fixed
- Many timeouts in tests that made slow CI pipelines fail.
- A bug in the Concurrent Tester.
- The
Client
role tests to not deadlock so easily.
Europa
Europa - 2020-10-17
The Sub-Channels release, enabling fully generalized state channels.
Added
- Sub-Channels: run app-channels inside parent (ledger) channels.
- Special
NoApp
for channels without app. Skips force-execution phase in
disputes. - Optimized
Channel.SettleSecondary
settlement method for the responding
settler during optimistic channel settlements. Avoids wasting gas by not
sending unnecessary transactions. ErrorGatherer
type topkg/errors
package for errors accumulation.- Transactor abstraction to allow different wallet implementations for
transaction sending in Ethereum backend. - App registry so that multiple apps can be used in a single program instance.
Changed
channel.Update
to accept achannel.State
instead ofchannel.ChannelUpdate
.
This simplifies the usage.- Contracts updated to handle sub-channels.
- Contracts now have distinct dispute and force-execution phases.
- Channel proposal protocol now uses shared nonce from all channel peers.
Fixed
- Channel peers persistence in key-value persistence backend.
Despina
Despina - 2020-07-23
Introduced a wire messaging abstraction.
Added
- Wire messages are now sent and received over an abstract
wire.Bus
. It serves
as a wire messaging abstraction for theclient
package using pub/sub
semantics.wire.Msg
s are wrapped inEnvelope
s that have a sender and recipient.- Two implementations available:
wire.LocalBus
for multiple clients running in the same program instance.wire/net.Bus
for wire connections over networks.
- Consistent use of
wallet.Address
es as map keys (wallet.AddrKey
). - Ordering to
wallet.Addresses
es to resolve ties in protocols. - Contract validation to Ethereum backend.
- Consistent creation of PRNGs in tests (
pkg/test.Prng
).
Changed
- The packages
peer
,wire
andpkg/io
were restructured:- Serialization code was moved from
wire
intopkg/io
. - The
peer
package was merged into thewire
package. - Networking-specific
wire
components were moved intowire/net
. - The simple TCP/IP and Unix
Dialer
andListener
implementations were
moved intowire/net/simple
.
- Serialization code was moved from
- The
ProposalHandler
andUpdateHandler
interfaces' methods were renamed to
explicitly name what they handle (HandleProposal
andHandleUpdate
). - The keyvalue persister uses an improved data model and doesn't cache
peer-channels any more. Channel.Peers
now returns the full list of channel network peers, including
the ownwire.Address
.
Fixed
- A race in
client
synchronization.
Removed
- The
net
package, as it didn't contain anything useful.
Charon
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.
- Persister, Restorer, ChannelIterator interfaces to allow for multiple
- 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
andClient.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
topkg/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.
Belinda
Belinda - 2020-03-23
Added direct disputes and watcher for two-party ledger channels, much polishing
(refactors, bug fixes, documentation).
Added
- Ledger state channel disputes and watcher.
channel.Adjudicator
interface and Ethereum implementation for registering
channel states and withdrawing concluded channels.- Ethereum contracts for disputes
- Public Github wiki
- Godoc
- Changelog
- TravisCI
- goreportcard
- codeclimate
- TCP and unix socket
peer.Dialer
andListener
implementations. Eventually
tester inpkg/test
to repeatedly run tests until they
succeed.- Concurrent testing tool in
pkg/test
to be able to callrequire
in tests
with multiple go routines.
Changed
client.New
now needs aFunder
andAdjudicator
, instead of aSettler
.Serializable
renamed toSerializer
.- Unified backend imports.
pkg/io/test/bytewiseReader
toiotest.OneByteReader
.- Improved peer message handling mechanism.
- Consistent handling of
nil
arguments in exported functions. - Many refactors to improve the overall code quality and documentation.
- Updated Ethereum contract bindings to newest version.
Removed
wallet.Wallet
interface andsim
backend implementation - it was never used.ethereum
andsim/wallet.NewAddressFromBytes
- onlywallet.DecodeAddress
should be used to create anAddress
from bytes.channel/machine
Phase subscription logic.channel.Settler
interface and backend implementations - replaced byAdjudicator
.
Fixed
- Reduced cyclomatic complexity of complex functions.
- Deadlock in two-party payment channel test.
- Ethereum backend test timeouts and instabilities.
- Many minor bug fixes, mainly concurrency issues in tests.
Ariel
We are pleased to announce our first release of our Go State Channels Framework go-perun! 🚀
The Ariel 🌔 release comes with the following features:
- Ledger State Channels
- Multi Asset
- Blockchain-Agnostic
- Ethereum Backend
Disclaimer: This is alpha software and not ready for production use. It is intended to allow exploration of the framework's API and its capabilities.