V1 (Alpha) -> Streamflow Upgrade Guide For Existing Transcoders

V1 (Alpha) -> Streamflow Upgrade Guide For Existing Active Transcoders

With the Streamflow protocol upgrade coming up next Monday January 13th, existing active transcoder node operators will need to be prepared to take a few actions in order to ensure that their orchestrator nodes (note the name change from transcoder -> orchestrator in a post-Streamflow world) will be able to continue earning inflationary rewards and accepting/redeeming payments for transcoding.

TLDR

If you are currently an active transcoder node operator, make sure to:

  • Call reward in the first 1000 blocks of round 1610
  • Download and run the latest Streamflow ready mainnet compatible node release (which will be available on the day of the upgrade) after the upgrade is complete
  • Submit a transcoder() or bond() transaction to join the active set for the next round after the upgrade is complete

The Details

The tentative timeline for the Streamflow upgrade, assuming 13 second block times, is as follows:

  • The upgrade will take place in round 1610 (which should be on Monday January 13th)
  • The upgrade process is set to begin at block 9274600 (around 7:30pm UTC) which is 1000 blocks after the start block of round 1610
  • The protocol will be paused during the upgrade process
  • The estimated length of the upgrade process is 5 hours and we are targeting to unpause the protocol by block 9275984. This should leave ~12 hours in round 1610 for existing active transcoder node operators to take the actions necessary to ensure that they will be be active in the following round

Note: given that block times can fluctuate, the estimates provided above might change.

Prior to block 9274600, you should make sure that you have called reward for round 1610. You will not be able to call reward for round 1610 after the upgrade is complete even if you were active prior to the upgrade and have not called reward yet.

Node operators should make sure that they are running the latest mainnet compatible node release. At the moment, this release is not available, but it will be available on the releases page on Monday January 13th when the upgrade is complete. A link to the Streamflow ready mainnet compatible release will be added to this post when it is published.

There will be an announcement when the protocol upgrade is complete and when the protocol is unpaused. At this point, if you were in the active set in round 1610 prior to the start of the upgrade you will need to submit a transcoder() or bond() transaction to the BondingManager contract to join the active set for the next round. The two most straightforward ways to do this are:

Option 1

Use livepeer_cli, the CLI wizard, that ships with the Livepeer node to submit a transcoder() transaction. See the below screenshot:

Make sure to use different reward cut and fee share values from the values configured on-chain when invoking option 14 - otherwise, the node will not submit the transaction (this is due to a recent change that stops the node from submitting a transcoder() transaction if the reward cut and fee shares values would not change). The current reward cut and fee share values configured on-chain can be viewed by invoking option 1:

In the above screenshot, the node’s on-chain reward cut and fee share values are 10% and 5% respectively. So, in order to submit the transcoder() transaction you just need to input either a different reward cut or a different fee share value. You can always change the on-chain values back to your preferred values by invoking option 14 in livepeer_cli a second time after submitting the first transcoder() transaction that activates the node for the next round.

Option 2

In order to use this option, your node’s address must have at least 1 LPTU (1 LPT = 10 ** 18 LPTU) in its balance. You can view your node’s balance using option 1 in livepeer_cli.

Submit a HTTP request to the node’s /bond endpoint to self-bond 1 LPTU. This request will submit a bond() transaction that will also activate the node for the next round. The request for the node with the address 0x916327a01D6469FD24267c180ec38368A69f1e81 can be sent with the below command:

curl -X POST http://localhost:7935/bond --data "amount=1&toAddr=0x916327a01D6469FD24267c180ec38368A69f1e81"

Once you submit the transaction that activates the node for the next round, verify that the node is pending activation for the next round by invoking option 3 in livepeer_cli which should include the node’s address in the table printed to the console:

The “Active” column will display true at the beginning of the next round.

The upgrade process will clear the active set for the next round so it is important for orchestrators to submit a transaction to join the active set for the next round even if they were already active prior to the upgrade. For more information on how activation works post-Streamflow, see this section of the docs.

If you are interested in the full list of changes between V1 (Alpha) and Streamflow, check out the changelog.

1 Like

Some questions:

  1. How many Orchestrators will be in the active set after the upgrade?

  2. Will the upgrade enable splitting the Orchestrator from the Transcoder, or should we run with an O+T setup?

Download and run the latest Streamflow ready mainnet compatible node release (which will be available on the day of the upgrade)

  1. Would it be possible to release the final software in advance of the upgrade, so that we have a chance to audit and test it?
  1. 100 Orchestrators in the active set after the upgrade.
  2. Yes, you can run a split O/T after the upgrade.
  3. It would be possible, at the tradeoff of confusing people because it won’t work on main net prior to the protocol update. But yes, I suppose it would be prudent to make it available as soon as the final candidate is ready for the purposes of auditing/understanding it.
1 Like

Would it be possible to release the final software in advance of the upgrade, so that we have a chance to audit and test it?

There will be a Streamflow ready Rinkeby compatible release published in advance of the upgrade that can be used for testing and it will more or less have the same features as the eventual mainnet compatible release.

1 Like

Thank you.

Will you make very clear what the final changes are?

Also, will you publish a final commit hash for those building from source?

As mentioned during the community call, there is a slight caveat when using the CLI.

This recent PR https://github.com/livepeer/go-livepeer/pull/1230 prevents the BondingManager.transcoder(rewardCut, feeShare) transaction being submitted when the parameters entered in the CLI are the same as those currently on-chain. This is done to prevent sending unnecessary transactions when setting the config, we apply the same behaviour to the serviceURI.

So either the BondingManager.transcoder() transaction would have to be submitted with either parameter changed, or directly to the ethereum network e.g. using a wallet such as MyEtherWallet or MyCrypto and invoking a contract tx.

2 Likes

go-livepeer 0.5.2 is now published - this release can be used for testing in advance of the protocol upgrade on Monday. Check out the release notes for changes. The only additional changes that could be included in Monday’s release are likely smaller bug fixes and internal enhancements as opposed to major user facing features.

Also, will you publish a final commit hash for those building from source?

For those that want to build from source using the same commit hash that a release was cut from, they can grab the commit hash corresponding to a release which can be found on the release page.

Updated OP with additional options for submitting the necessary transaction in order to join the active set for the following round.

Is there another announcement coming here? As promised?

The Streamflow protocol upgrade on mainnet is complete! The updated deployed contract addresses can be found here.

go-livepeer 0.5.3 is now published which is mainnet compatible.

If anyone runs into any issues upgrading or running the latest release feel free to reach out on Discord!