The Merge of the GC with the GBC requires a coordination between majority of the node runners, however it is designed to have minimal impact on the end users.
Parameters:
BELLATRIX_FORK_VERSION: 0x02000064
BELLATRIX_FORK_EPOCH: TBD
TERMINAL_TOTAL_DIFFICULTY: TBD
EXPECTED_TERMINAL_BLOCK_NUMBER: TBD
TERMINAL_TOTAL_DIFFICULTY
is approximated from the desired block number by the following formula: TD(X) + (EXPECTED_TERMINAL_BLOCK_NUMBER - X) * (2**128 - 2) - 2**127
, where X
is some recent block already known at the moment of creating EL client releases, TD(X)
is a total difficulty of block X
.
Expected timestamp of EXPECTED_TERMINAL_BLOCK_NUMBER
should be higher than timestamp of BELLATRIX_FORK_EPOCH
. (e.g. few hours?).
BELLATRIX_FORK_EPOCH
. Each beacon slot after that will to contain empty ExecutionPayload
.TERMINAL_TOTAL_DIFFICULTY
is reached in the head block (at block with number EXPECTED_TERMINAL_BLOCK_NUMBER
) of the chain, it includes it's block hash in the parent hash of the ExecutionPayload
of the first proposed PoS block.parent_hash
in the first PoS block satisfies terminal block conditions.Every validator should run their own EL GC node next to its CL counterpart, before reaching the BELLATRIX_FORK_EPOCH
in the GBC.
TBD: Confirm that GBC validator can still function, while connected to remote GC node after the BELLATRIX_FORK_EPOCH
, but before terminal block is reached.
POSDAO validators that are not running GBC validators will no be able to participate in the consensus after the PoS transition. After the trasition block is reached, their node will not be able to mine new blocks, and will not be able to sync with the rest of the network by itself (i.e. it will halt).
POSDAO validators that are running their GBC validators will be able to participate in the consensus after the PoS transition, based on their GBC stake.
Assuming that the current setup of such POSDAO validators use separate isolated environments for running GC and GBC, they will need to perform some manipulation on those and bring them together in the same private network.
After the BELLATRIX_FORK_EPOCH
in the GBC, we expect that such POSDAO validator will already have their GBC and GC node running in the same environment. However, prior to reaching terminal block, the block mining process will be only handled by the EL alone.
During the PoS transition, we expect that EL consensus will be halted, and the next blocks will start to arrive smoothly through the GBC, without manual intervention.
We will ensure that all POSDAO validators upgraded their node to the sufficient version, therefore AuRa block proposals will completely halt after reaching TERMINAL_TOTAL_DIFFICULTY
. The only way to propose new blocks will be through the GBC.
Third parties running non-validator GC nodes, will need to update their setup to the two-client one.
GC node alone won't be able to securely sync the network after the PoS transition. If they would like to smoothly migrate to the PoS setup, they will need to start GBC node nearby, before TERMINAL_BLOCK
is reached.
During the transition, we simply expect that the p2p block propagation will switch from EL to CL.
Many cloud setups for EL include some kind of load balancing between multiple nodes. Hopefully, there is no need to run a GBC node next to each EL instance in such case. It should be quite easy to setup a 1-to-N setup, in which single beacon node can drive multiple EL nodes. (TBD: client configuration example)
We do not have such. However, if there are any, they are not required to have local EL node nearby. They can continue to use remote EL node endpoint.
The only requirement is to update their node to the version with the correct BELLATRIX_FORK_EPOCH
specified, in order to be able to correctly validate GBC.
(TBD: can we run a GBC node without connecting it to any GC nodes?)
From the users point of view, we expect few minor JSON RPC changes to happen after the PoS transition:
step
and signature
fields are going to be deprecated and replaced by the mixHash
and nonce
empty fields. If your Dapp somehow rely on the manual block hash calculation or particular set of fields when parsing raw blocks, make sure that such changes will not break because of such changes.latest
block tag. We suggest that Dapps should switch from latest
and latest - N blocks
schemes to a PoS like schemes: safe
/finalized
. (TBD: clarify final decision on safe
block meaning)finalized
/safe
block tagsHardfork for enabling withdrawals.
Preliminary specs: https://github.com/ethereum/consensus-specs/blob/dev/specs/capella/beacon-chain.md
CAPELLA_FORK_VERSION: 0x03000064
CAPELLA_FORK_EPOCH: TBD
New field withdrawals
/withdrawals_root
is added to the Execution block structure, so it is good that we will a fully Ethereum compatible block structure after the Merge.
When EL receives a block with withdrawals, during notify_new_payload
/ notify_forkchoice_updated
, it must process a list of given withdrawals. In our case, the withdrawals processing will be done in the block reward contract, as we cannot just increase the native token balance, as in the Mainnet.
We propose to integrate GBC withdrawals distribution inside the existing block reward contract, by adding a new system function to it:
interface BlockReward {
function reward(address[] benefactors, uint16[] kind)
external returns (address[], uint256[]);
function rewardGBC(address[] recipients, uint256[] values) external;
}
Each withdrawal contains receiver address in GC and the withdrawn amount in Gwei.
rewardGBC
is then called by the block proposer each times a new block is created, similar to how it is done with a regular reward
call.
Then, there are two possible technical implementations:
Block reward contract receives rights to withdraw from deposit contract and unlock/mint mGNO/GNO tokens in the GC. GNO tokens transfer happens inside block reward contract.
Pros:
Cons:
Block reward contract records a set of performed withdrawals inside its storage. Once withdrawal is recorded in the contract state, anyone (user/permissionless bot) can claim this withdrawal by usual transaction in the EL.
Pros:
Cons:
TBD: partial withdrawals, once defined in the original spec
At some point, the system can reach a situation in which existing locked GNO balance inside the deposit contract is not enough to cover the desired withdrawal amount. In this case, we will ensure that a sufficient amount of extra GNO liqudity is being bridged from the Mainnet by the GnosisDAO, which will be directed towards covering all requested withdrawals.