Re: Reverting from incorrect capability version

Jason Yellick <jyellick@...>

Unfortunately, this is "working as designed".  We could revisit the validation that ordering does, but the original capabilities concept was to allow independent management of the orderers and peers.  From the documentation:

"Take caution when specifying or modifying an application capability. Because the ordering service does not validate that the capability level is valid, it will allow a channel to be created (or modified) to contain, for example, a v1.8 application capability even if no such capability exists. Any peer attempting to read a configuration block with this capability would, as we have shown, crash, and even if it was possible to modify the channel once again to a valid capability, it would not matter, as no peer would be able to get past the block with the invalid v1.8 capability."

Basically, the idea is to allow you to keep your orderers at an older level, while upgrading your peers and enabling new functionality for them.

As far as recovery goes, your only practical option is to revert to a backup taken before the capability was introduced.  The other option would be to create a custom build of your peer which supports this capability (add an entry with your capability to this map: ) though you would need to maintain this forked code indefinitely.


----- Original message -----
From: "Yacov" <yacovm@...>
Sent by: fabric@...
To: hakan.eryargi@...
Cc: fabric@...
Subject: [EXTERNAL] Re: [Hyperledger Fabric] Reverting from incorrect capability version
Date: Mon, Feb 24, 2020 6:56 AM
Can you attach logs?

From:        "Eryargi, Hakan via Lists.Hyperledger.Org" <>
To:        Yacov Manevich <YACOVM@...>
Cc:        fabric@...
Date:        02/24/2020 01:51 PM
Subject:        Re: [External] Re: [Hyperledger Fabric] Reverting from incorrect capability version
Sent by:        fabric@...

Yup exactly that happened.
I made a config update for application capability for version V1_4_3, orderers accepted the block and peers crashed.
Below json path to be more precise:
Fabric binary version is 1.4.4 for both peers and orderers.
From: Yacov Manevich <YACOVM@...>
Sent: Monday, 24 February 2020 12:45
To: Eryargi, Hakan <hakan.eryargi@...>
Cc: fabric@...
Subject: [External] Re: [Hyperledger Fabric] Reverting from incorrect capability version

This message is from an EXTERNAL SENDER - be CAUTIOUS, particularly with links and attachments.

Did you manage to reach a situation where the orderers accepted the block but the peers didn't? Were the orderers at a higher software version than the peers?

From:        "Eryargi, Hakan via Lists.Hyperledger.Org" <>
To:        "fabric@..." <fabric@...>
Cc:        fabric@...
Date:        02/24/2020 01:41 PM
Subject:        [EXTERNAL] [Hyperledger Fabric] Reverting from incorrect capability version
Sent by:        fabric@...


Is there a way of reverting from an incorrect capability version? (except restoring the whole Fabric network from a backup)

For example Application capability V1_4_3 does not exist, and when a config update is performed for that version, orderers accept the value but peers crash immediately when they receive the update block from orderer. Making another config update will not help in this case as peers crash immediately when they receive the first update.

If my understanding is correct, this is actually very dangerous behavior. The whole channel may render unusable.

Maybe orderers should not accept the value in the first place?



This message is for the designated recipient only and may contain privileged, proprietary, or otherwise confidential information. If you have received it in error, please notify the sender immediately and delete the original. Any other use of the e-mail by you is prohibited. Where allowed by local law, electronic communications with Accenture and its affiliates, including e-mail and instant messaging (including content), may be scanned by our systems for the purposes of information security and assessment of internal compliance with Accenture policy. Your privacy is important to us. Accenture uses your personal data only in compliance with data protection laws. For further information on how Accenture processes your personal data, please see our privacy statement at



Join to automatically receive all group messages.