Skip to content

Celo-Blockchain Release 1.8.0-stable

Compare
Choose a tag to compare
@gastonponti gastonponti released this 05 Sep 21:15
· 118 commits to master since this release
v1.8.0

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:

  1. parentHash
  2. sha3Uncles
  3. miner
  4. stateRoot
  5. transactionsRoot
  6. receiptsRoot
  7. logsBloom
  8. difficulty
  9. number
  10. gasLimit
  11. gasUsed
  12. timestamp
  13. extraData
  14. mixHash
  15. nonce
  16. 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:

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 the baseFeePerGas. 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 the baseFee 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.

Docker Images

geth: us.gcr.io/celo-org/geth:1.8.0
geth-all: us.gcr.io/celo-org/geth-all:1.8.0