[Action Required] OasisEth Mainnet Upgrade to fix critical issues caused by Oasis Cobalt Upgrade - second-state/oasis-ssvm-runtime GitHub Wiki

Action Required - All of the node operators should follow this guideline to stop the current OasisEth nodes and restart them with the new configuration and runtime id.

The new runtime id will be announced before 2021/05/21 17:00 UTC+8, node operators will have a few days to finish the upgrade.

Node operators should make sure their nodes get registered before 2021/05/27 13:00 UTC+8.

We will take a snapshot at 2021/05/27 13:00 UTC+8, if the OasisEth nodes are not registered at that time. Otherwise, the entity of inactive nodes will be removed from the whitelist.

New runtime id is announced: 000000000000000000000000000000000000000000000000000000000000ff04.

Last Update: 2021/05/20 14:47 UTC+8, announced the new runtime id.

What's happened

Issue 1. Wrong logic in oasis-core

There is a critical logic error in the current oasis-core, this wrong implementation forbids any changes to the runtime configuration which is written in the Oasis genesis file (genesis.json). Hence, we, the ParaState Team, cannot update the configuration and add node operators back to the whitelist.

However, this issue only affects the runtime configuration, which means the network state and any service on the OasisEth network are not affected.

Since node operators of the second OasisEth epoch are not possible to get registered, we use the snapshot data from the date of Oasis Cobalt Upgrade to calculate their rewards.

We also canceled the third OasisEth epoch registration, so node operators of the third OasisEth epoch will be the same as the second epoch. The newly joined node operators will be added to the next OasisEth epoch after these issues are fixed.

Issue 2. Unfinished CLI tool to generate the new runtime configuration

In addition, the CLI tool for generating the new runtime configuration is not implemented in the oasis-core which is the chosen version of Oasis Cobalt Upgrade. We cannot have any way to submit the new configuration to register a new one with the existed OasisEth state.

Ref: https://github.com/oasisprotocol/oasis-core/issues/3626

Current Status

Issue 1. Wrong logic in oasis-core

Oasis Network will NOT have another upgrade to fix this issue in near future. So the only thing we can do is to figure out an alternative way to make the configuration work again.

After several discussions with the Oasis team, we come up with a workaround. Which is stopping the current runtime and using the current runtime state to register a new runtime. So OasisEth network will halt for at most 1 day to stop the storage nodes and do the migration to the new runtime id. After the runtime id is registered on the Oasis Network, all of the node operators should stop their current OasisEth nodes and re-start it with the runtime configuration.

Issue 2. Unfinished CLI tool to generate the new runtime configuration

The Oasis Team had fixed this issue by #3910.

The process of fixing this issue

  1. OasisEth network will suspend after 2021/05/19 12:00 UTC+8. We will wait for 3 Oasis Epoch to make sure all genesis nodes are finished at the debonding time.
  2. Backup the current OasisEth network state.
  3. Migrate the current OasisEth network state to a new runtime id 000000000000000000000000000000000000000000000000000000000000ff04(The migration is finished, Node Operators can use this new id to start their nodes).
  4. Register a new runtime id with migrated network state.
  5. Start all genesis nodes with the new runtime id.
  6. Check if the functionalities are all good.
  7. Add node operators back to the whitelist. (This will be finished before 2021/05/21 17:00 UTC+8)

What should node operators do

  1. Stop OasisEth nodes.
  2. Replace the oasis-node binary with Oasis-Node v21.1.2 release
  3. Replace the RUNTIME_ID with 000000000000000000000000000000000000000000000000000000000000ff04. (This will be announced before 2021/05/21 17:00 UTC+8)
  4. Restart it with the following configuration:
export ENTITY_DIR=$HOME/mainnet/entity
export DATA_DIR=$HOME/mainnet/node
export GENESIS_JSON=$HOME/mainnet/etc/genesis.json
export RUNTIME_BINARY=$HOME/mainnet/oasis-ssvm-runtime
export RUNTIME_ID=<NEW_RUNTIME_ID>
export SEED_NODE_ADDRESS=E27F6B7A350B4CC2B48A6CBE94B0A02B0DCB0BF3@35.199.49.168:26656
export EXTERNAL_IP=<EXTERNAL_IP>

$HOME/mainnet/oasis-node \
  --datadir $DATA_DIR \
  --log.level warn \
  --log.format json \
  --log.file $DATA_DIR/node.log \
  --worker.registration.entity $ENTITY_DIR/entity.json \
  --genesis.file $GENESIS_JSON \
  --worker.compute.enabled \
  --worker.executor.schedule_check_tx.enabled \
  --runtime.provisioner unconfined \
  --runtime.supported $RUNTIME_ID \
  --runtime.history.tag_indexer.backend bleve \
  --runtime.paths $RUNTIME_ID=$RUNTIME_BINARY \
  --debug.dont_blame_oasis \
  --consensus.tendermint.p2p.seed $SEED_NODE_ADDRESS \
  --consensus.tendermint.core.listen_address tcp://0.0.0.0:26656 \
  --worker.client.addresses $EXTERNAL_IP:9100 \
  --worker.p2p.addresses $EXTERNAL_IP:9200