Setup Protocol

Last updated last month

NOTE: All of the protocols below specify a 2-party interaction but can be generalized to the multi-party case in the future.

Messages

After authentication and initializing a connection, channel establishment may begin. All state channels must run the Setup Protocol before any other protocol to "initialize" the channel. As the name suggests, its purpose is to setup the counterfactual state such that later protocols can be executed correctly.

Specifically, the Setup Protocol exchanges a commitment allowing a particular off-chain application to withdraw funds from the multisignature wallet. We call this application the Free Balance application, representating the available funds for any new application to be installed into the state channel.

Unlike other protocols, there is no extra message data for the Setup Protocol because the commitment digests are deterministic on the addresses of the participants of the state channel. In every case, the protocol effectively installs the Free Balance application with starting balances of 0 for each participant. Thus, no extra data is required to be passed in from outside the context of the protocol execution.

The SetRootNonce Message

Field

Description

protocol

1

fromAddress

The address of Alice

toAddress

The address of Bob

seq

0

signature

Alice's signed commitment digest

The SetRootNonceAck Message

Field

Description

protocol

1

fromAddress

The address of Alice

toAddress

The address of Bob

seq

1

signature

Bob's signed commitment digest

The Setup Message

Field

Description

protocol

1

multisig

The address of the on-chain Alice-Bob multisignature wallet

data

""

fromAddress

The address of Alice

toAddress

The address of Bob

seq

2

signature

Alice's signed commitment digest

The SetupAck Message

Field

Description

protocol

1

multisig

The address of the on-chain Alice-Bob multisignature wallet

data

""

fromAddress

The address of Alice

toAddress

The address of Bob

seq

3

signature

Bob's signed commitment digest

Commitments

Commitment for SetRootNonce and SetRootNonceAck:

The commitments that these two messages rely on have the following parameters:

Parameter

Type

Description

rootNonceTimeout

uint256

Relative timeout in seconds after which the root nonce finalizes

rootNonceSalt

bytes32

Arbitrary value to facilitate uniqueness of the root nonce

The commitment can be visually represented like:

Commitment for Setup and SetupAck:

The commitments that these two messages rely on have the following explicit parameters:

Parameter

Type

Description

uninstallKey

bytes32

Arbitrary value that the installed free balance app's conditional transaction depends on inside the Nonce Registry

Additionally, the following parameters are implicitly computed:

Parameter

Type

Description

terms

Terms

Set to the default value

freeBalanceCfAddress

bytes32

Set to the computed value for a counterfactual address of a PaymentApp with the initial signing keys of both users and default terms

The commitment can be visually represented like:

NOTE: The usage of MultiSend in this commitment is redundant and should be removed.