The Mainnet activation block is 21616000
targeting an activation at ~17:15 UTC on Tuesday September 26th.
The Alfajores activation block is 19814000
targeting an activation at ~17:30 UTC on Monday September 11th.
The biggest and most important change in v1.8.0 is the implementation and activation of the Gingerbread Fork
Gingerbread Hardfork
For an overview of all the CIPs included in the hardfork, see CIP-62, the Gingerbread hardfork.
Below follows an overview of changes, which is grouped by affected parts of the protocol rather than the originating CIPs.
Sending transactions
As a result of CIP-57, transactions must not set the fields gatewayFee
or gatewayFeeRecipient
.
A new envelope transaction is added, the CIP-64: New Transaction Type: Celo Dynamic Fee v2, which is the EIP-1559 tx, with the feeCurrency
. Check the deprecation warning on the CIP-62, but this new transaction is going to be the only valid way to pay in a different currency in the future, so we recommend to start migrating the applications that use that feature.
Changing gas costs
CIP-58 changes the gas costs to be more in line with Ethereum. As a result, transactions will have different (usually somewhat higher) gas costs than before.
New block header fields and header hash calculation
The following fields have been added to the block header and the JSON-RPC output in order to increase compatibility with Ethereum:
baseFee
gasLimit
difficulty
(constant)nonce
(constant)uncles
(constant; included in the RPC output, but actually only stored in the block body, not the header)sha3Uncles
(constant)mixHash
(constant)
By adding new fields to the header, the header hash calculation also changes. Fortunately, this allows us to use exactly the same hash calculation as Ethereum. The header is now calculated by hashing the fields in the following order:
- parentHash
- sha3Uncles
- miner
- stateRoot
- transactionsRoot
- receiptsRoot
- logsBloom
- difficulty
- number
- gasLimit
- gasUsed
- timestamp
- extraData
- mixHash
- nonce
- baseFee
New opcodes
Along with the header fields baseFee
and gasLimit
, opcodes for fetching these values are provided:
Opcode name | hex | solidity | CIP |
---|---|---|---|
GASLIMIT | 0x45 | block.gaslimit | CIP-60 |
BASEFEE | 0x48 | block.basefee | CIP-61 |
Removed features
In addition to the changes above, some features have been removed, which should not impact Celo users in any noticeable way:
- CIP-53: Remove minimum client version check
- CIP-54: Remove sending of community rewards to reserve if undercollaterized
- CIP-55: Remove Tobin Tax
- CIP-56: Remove freezable check on epoch rewards
- CIP-63: Remove BLS-12377, BLS-12381, CIP-20 and CIP-25 precompiles
Base fee recipients
Another change that should not be directly noticeable by users, but is interesting enough to call out explicitly is CIP-52: Ultragreen Celo, which burns 80% of each transactions base fee and directs the other 20% to the Green Fund.
Block Data Limit
A limit of 5mb on the transactions' data was added to allow us to increase the block gas limit avoiding some specific attacks that aim to stall the network with bigger blocks. More info in the CIP-65: Total Transaction Data Limit. The actual limit due to our gas limit is less than 5mb, so this change won't affect any functionality, but will give us the tools to increase our throughput.
Flag changes
The following flag has been deprecated and will be removed in a future release.
--disablerpcethcompatibility (all blocks are going to be ethCompatible after the hard fork)
--light.gatewayfee
The following flag has been added
--rpc.gaspricemultiplier value Multiplier applied to the gasPrice rpc call (1 = gasPrice, 1.3 = gasPrice + 30%, etc. Defaults to 2.0) (default: 2)
gaspricemultiplier
was 5 by default to guarantee every tx more time in the tx_pool, but we changed it to settable by node operators request.
Other notable changes
- Fix transfer prestate tracer (#2075)
- Merge native tracer (#2137) (from upstream)
- Fix RPC calls (gasLimit, gasPrice) use the initial state of the block (#2161)
- The RPC block responses were serializing the wrong
gasLimit
and thebaseFeePerGas
. Instead of showing those fields with the initial state of the block, were using the final state, so they were showing the data of the block N+1 for those fields. - The RPC transaction responses for types DynamicFeeTx (
0x02
) or CeloDynamicFeeTx (0x7c
) were serializing the wrong gasPrice. Instead of using thebaseFee
of the initial state of the block, were using the final state, so those transactions were showing the gasPrice calculation with the block N+1 data.
- The RPC block responses were serializing the wrong
Docker Images
geth: us.gcr.io/celo-org/geth:1.8.0
geth-all: us.gcr.io/celo-org/geth-all:1.8.0