Releases: celo-org/celo-blockchain
Celo-Blockchain Release 1.8.0-beta.1
v1.8.0-beta.1 is the Baklava-only release of v1.8.0. After testing on the Baklava testnet, it will be followed by v1.8.0-stable which will be intended for both Mainnet and Alfajores networks.
The baklava activation block is 18785000 targeting an activation at ~15:03 UTC on Thursday August 10th.
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 (the CIP will be merged for the stable version with all the activation blocks).
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
.
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
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.
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-beta.1
geth-all: us.gcr.io/celo-org/geth-all:1.8.0-beta.1
Celo-Blockchain Release 1.7.4-stable
Celo-blockchain v1.7.4-stable includes a fix for the format of headers sent via WebSocket connections.
All bugs fixed in this release:
- Add baseFeePerGas to headers sent via EthSubscribe (#2060)
- Split roundstate saving in two parts (#2046)
Other improvements:
- Remove Istanbul v1 code (#1999)
You will want to upgrade to this version if you are:
- Running an RPC node that is serving WebSocket endpoints.
Docker Images
Celo blockchain client: us.gcr.io/celo-org/geth:1.7.4
Celo blockchain client and associated tools: us.gcr.io/celo-org/geth-all:1.7.4
Celo-Blockchain Release 1.7.3-stable
Celo-blockchain v1.7.3-stable includes a fix for failing block traces on certain mainnet blocks.
All bugs fixed in this release:
- Error when running
debug_traceBlockByNumber
on0x108F49C
(#2002) - Fix a potential segfault when doing fast forward receipt download fixes (#1920)
- Add local flag and migrate flags in uptime report (#1914)
- GraphQL returns incorrect gas price (#2015)
- Upgrade dependency "github.com/celo-org/celo-bls-go" (#2005)
- Ensure RoundStateDB is closed when core is stopped (#1996)
You will want to upgrade to this version if you are:
- Running an RPC node that is serving traceBlock or GraphQL calls.
Docker Images
Celo blockchain client: us.gcr.io/celo-org/geth:1.7.3
Celo blockchain client and associated tools: us.gcr.io/celo-org/geth-all:1.7.3
Celo-Blockchain Release 1.7.2-stable
Celo-blockchain v1.7.2-stable includes a single fix for the traceBlock call, where currency exchange rates mid-block were returning incorrect values. (#1987)
You will want to upgrade to this version if you are:
- Running an RPC node that is serving traceBlock calls.
Docker Images
Celo blockchain client: us.gcr.io/celo-org/geth:1.7.2
Celo blockchain client and associated tools: us.gcr.io/celo-org/geth-all:1.7.2
Celo-Blockchain Release 1.7.1-stable
Celo-blockchain v1.7.1-stable includes a single fix for a missing type field in the json rpc receipts returned. (#1985)
You will want to upgrade to this version if you are:
- Running an RPC node that is serving receipts info.
Docker Images
Celo blockchain client: us.gcr.io/celo-org/geth:1.7.1
Celo blockchain client and associated tools: us.gcr.io/celo-org/geth-all:1.7.1
Celo-Blockchain Release 1.7.0-stable
Celo-blockchain v1.7.0-stable includes the Istanbul consensus fork and a change in the RPC block representation to be more compatible with ethereum tools.
You will want to upgrade to this version if you are:
-
A Validator
-
Running an RPC node that is serving request that returns a block as a response, and your users, use libraries as for example
Ethers.js
Istanbul consensus fork #1937
Implements a consensus fork that is determined by a specific block number. From that sequence on, the messages Preprepare and RoundChange will be no longer used, and PreprepareV2 and RoundChangeV2 will be used instead. This is only relevant for validator nodes. This release already has set the Alfajores activation for Block # 14287656 and the Mainnet activation for Block #16068685.
RPC block representation changed #1957
An additional two fields have been added to the block representation returned by the RPC api, they are:
gasLimit
baseFeePerGas
Both fields previously existed as parameters of the system held in contract state. The reason for this change is to improve compatibility with existing ethereum tooling specifically Ethers.js
which crashes if the gasLimit
is not present on a block and is unable to send EIP-1559 transactions if baseFeePerGas
is not present.
Note that the internal block representation has not been modified so these new fields should not be taken into account in block hashing or signing operations. Since these fields are not part of the internal block representation they need to be fetched from state when the RPC call is made, if the state for these fields is missing then they will not be present on the block response. Non archive full nodes retain state for only the last 128 blocks, so when interacting with a non archive full node blocks more than 128 below the head block or blocks older than about 10 minutes will not have these fields present. If you require these fields on all blocks then you will need to make your RPC requests to an archive node.
A new flag has been added which allows disabling the addition of the new fields as a measure to help ease the transition to the new RPC block representation, the flag will likely be removed in a future release.
Other changes
- Various fixes in mycelo
Notes (Important for Baklava validators already in the 1.7.0-beta.1)
The Enable Snap Sync #1962 that was part of the 1.7.0-beta.1 presented some issues that we were not able to reproduce. We decided to revert those changes for this particular version to be added in the future after verifying that everything works as it should
Docker Images
Celo blockchain client: us.gcr.io/celo-org/geth:1.7.0
Celo blockchain client and associated tools: us.gcr.io/celo-org/geth-all:1.7.0
Celo-Blockchain Release 1.6.1-stable
Celo-blockchain v1.6.1-stable includes two fixes which are important to RPC providing nodes.
You will want to upgrade to this version if you are:
-
Running an RPC node that is serving
debug_traceBlock
ordebug_traceTransaction
queries.
Examples of this could be block indexers, exchanges, and dApps that look up transaction as part of their logic. -
Running an RPC node that is serving
eth_getBlock(number= "pending")
queries.
Examples of this would be most nodes that consume the pending block info.
Changes
-
Fix ethapi for pending blocks (#1952)
Callingeth_getBlock(number= "pending")
over the RPC API could result in a RPC error if the pending block has eip-1559 txs. -
Fix tracers error (
debug_traceTransaction
,debug_traceBlock
)(#1968)
Fixes the extra elements in the tracer responses:"error": {"code": -32000, "message": "TypeError: cannot read property 'calls' of undefined in server-side tracer function 'fault'"}
This error was added from upstream in the version 1.10.8, and this is a cherrypick from the 1.10.10 that fixes it (ethereum/go-ethereum@b522f5e)
Docker images
Celo blockchain client: us.gcr.io/celo-org/geth:1.6.1
Celo blockchain client and associated tools: us.gcr.io/celo-org/geth-all:1.6.1
Celo-Blockchain Release 1.7.0-beta.1
v1.7.0-beta.1 is the Baklava-only release of v1.7.0. After testing on the Baklava testnet, it will be followed by v1.7.0-stable which will be intended for both Mainnet and Alfajores networks.
Istanbul consensus fork #1937
Implements a consensus fork that is determined by a specific block number. From that sequence on, the messages Preprepare and RoundChange will be no longer used, and PreprepareV2 and RoundChangeV2 will be used instead. This is only relevant for validator nodes. This release already has set the Baklava activation for Block # 13612887.
RPC block representation changed #1957
An additional two fields have been added to the block representation returned by the RPC api, they are:
gasLimit
baseFeePerGas
Both fields previously existed as parameters of the system held in contract state. The reason for this change is to improve compatibility with existing ethereum tooling specifically Ethers.js
which crashes if the gasLimit
is not present on a block and is unable to send EIP-1559 transactions if baseFeePerGas
is not present.
Note that the internal block representation has not been modified so these new fields should not be taken into account in block hashing or signing operations. Since these fields are not part of the internal block representation they need to be fetched from state when the RPC call is made, if the state for these fields is missing then they will not be present on the block response. Non archive full nodes retain state for only the last 128 blocks, so when interacting with a non archive full node blocks more than 128 below the head block or blocks older than about 10 minutes will not have these fields present. If you require these fields on all blocks then you will need to make your RPC requests to an archive node.
A new flag has been added which allows disabling the addition of the new fields as a measure to help ease the transition to the new RPC block representation, the flag will likely be removed in a future release.
Other changes
-
Enable Snap Sync (Note: to be able to use this sync, it requires to have nodes with this same version in the network) #1962
-
Various fixes in mycelo
Docker Images
Celo blockchain client: us.gcr.io/celo-org/geth:1.7.0-beta.1
Celo blockchain client and associated tools: us.gcr.io/celo-org/geth-all:1.7.0-beta.1
Celo-Blockchain Release 1.6.0-stable
Celo-blockchain v1.6.0-stable is the first mainnet release of the v1.6.x release branch.
This new version includes the merges of go-ethereum versions 1.10.8 and 1.10.9. Please refer to go-ethereum release notes if you are interested in a detailed list of changes from this versions (Note: the actual commit that makes the 1.10.8 version a hotfix release was already added as part of the Espresso fork, in our 1.5.0 release).
Other Changes
- Race condition fixes
- The gasEstimation fix (#1900) which was mitigated before by the flag
rpc.gasinflationrate
added in the1.5.5
. - A different way to calculate the
UptimeScore
(#1833) required at the last block of the Epoch. This allows future syncing improvements and a better and cleaner way to handlesetHead
(which should be used only in "worst case scenarios", but this allow us a faster response).
Important Notes
The new UptimeScore
calculation does not store anything in the database (just uses the headers) but the old version does. This means that if for some reason, a client already running a 1.6.x
version, wants/needs to downgrade to a version 1.5.x
, will need to force a setHead
to the First Block of the actual epoch to allow the old version to store the data required that's needed for the last block of the epoch.
Docker Images
Celo blockchain client: us.gcr.io/celo-org/geth:1.6.0
Celo blockchain client and associated tools: us.gcr.io/celo-org/geth-all:1.6.0
Celo-Blockchain Release 1.5.8
The 1.5.8 release includes a refactor of the RoundChangeCertificate
message's encoding/decoding mechanism within istanbul, dramatically reducing its payload size during worst-case round change scenarios. This allows preprepare
messages to respect the boundaries of RLP max message size (16MB) and p2p max message size (10MB).
This change breaks compatibility in the istanbul consensus between validators, but can be released in a rolling fashion without major issues.
Changes
- Reduce Preprepare size (#1924)
- Revert max size for p2p messages change from
1.5.7
Docker Images
Celo blockchain client: us.gcr.io/celo-org/geth:1.5.8
Celo blockchain client and associated tools: us.gcr.io/celo-org/geth-all:1.5.8