-
Notifications
You must be signed in to change notification settings - Fork 124
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
docs: ADR for Customizable Slashing and Jailing #2146
Conversation
Co-authored-by: Philip Offtermatt <57488781+p-offtermatt@users.noreply.github.com>
Co-authored-by: Philip Offtermatt <57488781+p-offtermatt@users.noreply.github.com>
📝 Walkthrough📝 WalkthroughWalkthroughThe proposed changes introduce a "Proof of Reputation Consumer Chains" model and a "Customizable Slashing and Jailing" framework to enhance Interchain Security (ICS) within the Cosmos ecosystem. These models aim to reduce operational costs for validators and delegators by modifying the consequences of validator misbehavior and allowing consumer chains to tailor slashing rules. The changes include adjustments to specific proposals to facilitate these updates, promoting broader validator participation in consumer chains. Changes
Possibly related PRs
Suggested labels
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
Documentation and Community
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
Outside diff range, codebase verification and nitpick comments (5)
docs/docs/adrs/adr-020-proof-of-reputation.md (5)
14-38
: Context: Remove trailing spaces.The context is well-explained. Consider removing trailing spaces for cleaner formatting.
- Interchain Security (ICS) is a cross-chain staking protocol -- it uses the stake on the provider chain as collateral for the Proof of Stake (PoS) on the consumer chains. + Interchain Security (ICS) is a cross-chain staking protocol -- it uses the stake on the provider chain as collateral for the Proof of Stake (PoS) on the consumer chains.Tools
Markdownlint
16-16: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
18-18: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
24-24: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
25-25: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
26-26: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
28-28: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
29-29: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
30-30: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
33-33: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
34-34: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
35-35: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
36-36: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
38-38: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
52-63
: Security Model: Fix unordered list style.The security model is well-structured. Consider using asterisks for unordered lists to adhere to markdown standards.
- - validators are not anonymous, which means that they could be legally liable if they are malicious; - - the delegated PoS mechanism creates a reputation-based network of validators; - - most validators have most of their stake coming from delegations (i.e., nothing at stake, besides reputation); - - it is relatively difficult to enter the active validator set and even more so to climb the voting power ladder. + * validators are not anonymous, which means that they could be legally liable if they are malicious; + * the delegated PoS mechanism creates a reputation-based network of validators; + * most validators have most of their stake coming from delegations (i.e., nothing at stake, besides reputation); + * it is relatively difficult to enter the active validator set and even more so to climb the voting power ladder.Tools
Markdownlint
56-56: Expected: asterisk; Actual: dash
Unordered list style(MD004, ul-style)
57-57: Expected: asterisk; Actual: dash
Unordered list style(MD004, ul-style)
58-58: Expected: asterisk; Actual: dash
Unordered list style(MD004, ul-style)
59-59: Expected: asterisk; Actual: dash
Unordered list style(MD004, ul-style)
61-61: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
62-62: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
74-81
: Implementation: Simplify language and fix unordered list style.The implementation steps are clear. Consider simplifying language and using asterisks for unordered lists.
- - Add a field to `ConsumerAdditionProposal` to enable consumer chains to launch as PoR chains. - - Disable opt in to PoR consumer chains for validators outside of the provider's active set. - - Cryptographic equivocation evidence received for PoR chains results in the misbehaving validators only being tombstoned and not slashed. - - (Optional) PoR consumer chains can switch to PoS chains, but the transition takes at least unbonding period to allow for validators to opt out. + * Add a field to `ConsumerAdditionProposal` to enable consumer chains to launch as PoR chains. + * Disable opt-in to PoR consumer chains for validators outside the provider's active set. + * Cryptographic equivocation evidence received for PoR chains results in the misbehaving validators only being tombstoned and not slashed. + * (Optional) PoR consumer chains can switch to PoS chains, but the transition takes at least the unbonding period to allow for validators to opt-out.Tools
LanguageTool
[style] ~79-~79: This phrase is redundant. Consider using “outside”.
Context: ...n to PoR consumer chains for validators outside of the provider's active set. - Cryptograp...(OUTSIDE_OF)
Markdownlint
78-78: Expected: asterisk; Actual: dash
Unordered list style(MD004, ul-style)
79-79: Expected: asterisk; Actual: dash
Unordered list style(MD004, ul-style)
80-80: Expected: asterisk; Actual: dash
Unordered list style(MD004, ul-style)
81-81: Expected: asterisk; Actual: dash
Unordered list style(MD004, ul-style)
81-81: Expected: 0 or 2; Actual: 4
Trailing spaces(MD009, no-trailing-spaces)
83-95
: Consequences: Fix unordered list style.The consequences are clearly categorized. Consider using asterisks for unordered lists.
- - Reduce the cost of ICS be removing the risk of slashing delegators. - - Reduce the economical security provided to PoR consumer chains. - - [Inactive validators](./adr-017-allowing-inactive-validators.md) are ineligible to opt in on PoR consumer chains + * Reduce the cost of ICS by removing the risk of slashing delegators. + * Reduce the economical security provided to PoR consumer chains. + * [Inactive validators](./adr-017-allowing-inactive-validators.md) are ineligible to opt-in on PoR consumer chains.Tools
Markdownlint
87-87: Expected: asterisk; Actual: dash
Unordered list style(MD004, ul-style)
91-91: Expected: asterisk; Actual: dash
Unordered list style(MD004, ul-style)
95-95: Expected: asterisk; Actual: dash
Unordered list style(MD004, ul-style)
91-91: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
97-99
: References: Consider adding content or removing the section.The references section is empty. Consider adding relevant references or removing the section if not needed.
Tools
Markdownlint
99-99: Expected: 1; Actual: 2
Multiple consecutive blank lines(MD012, no-multiple-blanks)
I'll just comment on the most important part here:
I think that too much theory is being bundled into this proposal and this implementation plan reflects that. Let's just add few new settings that consumer chain owners can set and modify as they wish.
Now if they want something that matches your PoR concept, they can just set these flags in the right way. I think the inactive validators ADR probably already has something like
This is a good one. @sainoe is working on a mechanism like this for fault resolutions. We should get on a call to discuss whether it should be applied more broadly to other consumer chain settings. |
@jtremback I agree that we could do as you suggest for the rest to allow for more general configurations. I would then make the slashing ones to be slashing ratios instead of bools. For example, a consumer can have To improve UX, we can set some defaults in Forge:
|
@jtremback I updated the ADR to allow consumer chain owners to set their own slashing and jailing params. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 5
Outside diff range, codebase verification and nitpick comments (1)
docs/docs/adrs/adr-020-cutomizable_slashing_and_jailing.md (1)
177-179
: Consider adding references or removing the section.The references section is empty. Add relevant references or remove the section if not needed.
Tools
Markdownlint
179-179: Expected: 1; Actual: 2
Multiple consecutive blank lines(MD012, no-multiple-blanks)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
Outside diff range, codebase verification and nitpick comments (4)
docs/docs/adrs/adr-020-cutomizable_slashing_and_jailing.md (4)
17-48
: Consider improving conciseness and remove trailing spaces.The context is informative but could be more concise in some parts. Additionally, there are trailing spaces that should be removed.
Apply this diff to address the issues:
Interchain Security (ICS) is a cross-chain staking protocol -- it uses the stake on the provider chain as collateral for the Proof of Stake (PoS) on the consumer chains. -This means that the voting power of validators validating (aka producing blocks) on the consumer chains is a function of their stake on the provider. +The voting power of validators on consumer chains is a function of their stake on the provider. Moreover, if these validators misbehave on the consumer chains, they get punished on the provider chain. -ICS is currently differentiating between two types of infractions -- equivocation and downtime. +ICS differentiates between two types of infractions: equivocation and downtime. Depending on the infraction type, the misbehaving validators might be jailed (i.e., removed from the provider validator set) and / or slashed (i.e., a portion of their stake on the provider is being burned). For example, validators double sining on consumer chains get slashed and are permanently jailed, while validators not validating sufficient blocks are temporarily jailed. This means that ICS consumer chains get their economical security from the provider. However, this might come at a high cost. -One of the cost of validating on the consumer chains is operational -- validators need to run and monitor full nodes of every consumer chain they opt in for. +One cost of validating on consumer chains is operational: validators need to run and monitor full nodes of every consumer chain they opt in for. Although this cost varies from validator team to validator team (depending on how efficiently they can run their infrastructure), it doesn't depend on the total stake (or voting power) of the validators, so we can think of it as constant. The other cost of validating comes from the risk of getting slashed or jailed. -Most chains in Cosmos (including the Cosmos Hub) use delegated PoS -- users delegate their tokens to validators, which stake them in return for voting power. +Most chains in Cosmos (including the Cosmos Hub) use delegated PoS: users delegate their tokens to validators, which stake them in return for voting power. Therefore, validators act as representatives chosen by their delegators to represent their interests. However, delegators share the risk of their validators getting slashed or jailed: * When validators get slashed, a portion of their stake is being burned, including a portion of the tokens delegated by users. - As validators don't need to have their own stake, it is possible that delegators take all the risk of validators misbehaving. + As validators don't need their own stake, delegators might take all the risk of misbehavior. * When validators get jailed, they no longer receive block rewards (neither from the provider nor from the consumer chains). - This also applies to their delegators. + This applies to their delegators as well. As a result, delegators might choose to restake their tokens with another validator. The longer the validators are jailed, the more likely is that delegators will restake. Thus, by getting jailed, validators risk damaging their reputation. -Misbehaviors don't need to be malicious, e.g., most cases of double signing infractions are due to misconfiguration. +Misbehaviors aren't always malicious; most double signing infractions result from misconfiguration. This means that, by opting in on multiple consumer chains, validators and their delegators incur a higher risk. As a result, validators and their delegators want to be compensated for this additional risk, which makes the current design of ICS expensive. This ADR addresses the high cost of ICS by allowing consumer chains to customize the slashing and jailing conditions. Basically, every consumer chain can decide the punishment for every type of infraction. This enables consumer chains to tradeoff economical security against cost.Tools
LanguageTool
[style] ~39-~39: For conciseness, try rephrasing this sentence.
Context: ...ors don't need to have their own stake, it is possible that delegators take all the risk of validators misbehaving....(MAY_MIGHT_BE)
Markdownlint
17-17: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
19-19: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
20-20: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
22-22: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
30-30: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
31-31: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
34-34: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
35-35: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
40-40: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
41-41: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
44-44: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
46-46: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
48-48: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
54-58
: Decision is clear, but remove trailing spaces.The decision section is well-articulated, but trailing spaces should be removed for consistency.
Apply this diff to remove trailing spaces:
To reduce the cost of ICS, consumer chains will be able to customize the slashing and jailing for every type of infraction. -As a result, consumer chains can decide on the amount of economic security they want and validators (and their delegators) can decide on the amount of additional risk they want to incur. +As a result, consumer chains can decide on the amount of economic security they want and validators (and their delegators) can decide on the amount of additional risk they want to incur.Tools
Markdownlint
56-56: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
136-144
: Improve list formatting and remove trailing spaces.The implementation section is detailed, but list formatting can be improved, and trailing spaces should be removed.
Apply this diff to address the issues:
The implementation of this feature involves the following steps: -* Add the `InfractionParameters` to `MsgCreateConsumer`. -* On slashing events (for either downtime or double signing infractions), use the corresponding `slash_fraction` set by the consumer chain. -* On jailing events (for either downtime or double signing infractions), use the corresponding `jail_duration` set by the consumer chain. -* Cryptographic equivocation evidence received for PoR chains results in the misbehaving validators only being tombstoned and not slashed. -* (Optional) Add the `InfractionParameters` to `MsgUpdateConsumer`, i.e., allow consumer chains to update the slashing and jailing parameters, but the changes will come into effect after a period equal to the staking module's unbonding period elapses to allow for validators to opt out. +* Add the `InfractionParameters` to `MsgCreateConsumer`. +* On slashing events (for either downtime or double signing infractions), use the corresponding `slash_fraction` set by the consumer chain. +* On jailing events (for either downtime or double signing infractions), use the corresponding `jail_duration` set by the consumer chain. +* Cryptographic equivocation evidence received for PoR chains results in the misbehaving validators only being tombstoned and not slashed. +* (Optional) Add the `InfractionParameters` to `MsgUpdateConsumer`, i.e., allow consumer chains to update the slashing and jailing parameters, but the changes will come into effect after a period equal to the staking module's unbonding period elapses to allow for validators to opt out.Tools
Markdownlint
144-144: Expected: 0 or 2; Actual: 3
Trailing spaces(MD009, no-trailing-spaces)
146-181
: Enhance conciseness and remove trailing spaces.The consequences section is informative but could be more concise in some areas. Trailing spaces should also be removed.
Apply this diff to address the issues:
### Positive -* Reduce the cost of ICS by removing the risk of slashing delegators. +* Reduce the cost of ICS by eliminating the risk of slashing delegators. ### Negative -* Reduce the economical security of consumer chains with weaker slashing conditions. +* Decrease the economic security of consumer chains with weaker slashing conditions. #### Economic Security Model without Slashing The economic security model of most Cosmos chains relies on the following properties: -* validators are not anonymous, which means that they could be legally liable if they are malicious; +* Validators are not anonymous, meaning they could be legally liable if malicious; * the delegated PoS mechanism creates a reputation-based network of validators; -* most validators have most of their stake coming from delegations (i.e., nothing at stake, besides reputation); +* Most validators have their stake primarily from delegations (i.e., nothing at stake besides reputation); * it is relatively difficult to enter the active validator set and even more so to climb the voting power ladder. These properties enable us to make the following assumption: -* Being permanently removed from the provider validator set is strong enough of a deterrent to misbehaving on consumer chains. +* Permanent removal from the provider validator set is a strong deterrent to misbehavior on consumer chains. The additional economical security a consumer gets from slashing is limited: -Since most of the stake is delegated, slashing punishes delegators more than validators. +Since most of the stake is delegated, slashing punishes delegators more than validators. One benefit of slashing is that it acts as a deterrent for someone buying a large amount of staking tokens in order to attack a consumer chain. -For example, an attacker could get `$15.000.000` worth of ATOM, which would give them around `1%` voting power on the Cosmos Hub (at the time of this writing). +For example, an attacker could acquire `$15,000,000` worth of ATOM, granting them around `1%` voting power on the Cosmos Hub (at the time of writing). On a consumer chain, this voting power could be amplified depending on the other validators that opt in. However, by having the right [power shaping](https://cosmos.github.io/interchain-security/features/power-shaping) settings, the voting power of validators can be capped. This means that even if the attacker manages to double sign without getting slashed, as long as they don't have 1/3+ of the voting power, they cannot benefit from the attack. Moreover, the attacker might lose due to other factors, such as [token toxicity](https://forum.cosmos.network/t/enabling-opt-in-and-mesh-security-with-fraud-votes/10901). ### Neutral -NA +N/ATools
LanguageTool
[style] ~172-~172: Consider a shorter alternative to avoid wordiness.
Context: ...buying a large amount of staking tokens in order to attack a consumer chain. For example, ...(IN_ORDER_TO_PREMIUM)
Markdownlint
169-169: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
172-172: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
175-175: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
176-176: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
* validators are not anonymous, which means that they could be legally liable if they are malicious; | ||
* the delegated PoS mechanism creates a reputation-based network of validators; | ||
* most validators have most of their stake coming from delegations (i.e., nothing at stake, besides reputation); | ||
* it is relatively difficult to enter the active validator set and even more so to climb the voting power ladder. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What about inactive validators?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We could disable this for inactive validators. Or even better, users should choose their configuration.
|
||
For every consumer chain, we introduce the following slashing and jailing parameters: | ||
```proto | ||
message InfractionParameters { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do we also want to parameterize (i.e., enable/disable) fault resolutions?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fault resolutions are not implemented yet.
Co-authored-by: insumity <karolos@informal.systems>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
Outside diff range and nitpick comments (1)
docs/docs/adrs/adr-020-cutomizable_slashing_and_jailing.md (1)
183-185
: Consider adding references if applicable.The "References" section is currently empty. If there are any relevant external references that were used in the creation of this ADR or that could provide additional context or support for the proposed changes, consider adding them to this section.
Tools
Markdownlint
185-185: Expected: 1; Actual: 2
Multiple consecutive blank lines(MD012, no-multiple-blanks)
Review details
Configuration used: .coderabbit.yml
Review profile: CHILL
Files selected for processing (1)
- docs/docs/adrs/adr-020-cutomizable_slashing_and_jailing.md (1 hunks)
Additional context used
LanguageTool
docs/docs/adrs/adr-020-cutomizable_slashing_and_jailing.md
[style] ~39-~39: For conciseness, try rephrasing this sentence.
Context: ...ors don't need to have their own stake, it is possible that delegators take all the risk of validators misbehaving....(MAY_MIGHT_BE)
[uncategorized] ~116-~116: The preposition “in” seems more likely in this position than the preposition “on”.
Context: ...ave on PoR consumer chains, their stake on the provider is not being slashed, inst...(AI_EN_LECTOR_REPLACEMENT_PREPOSITION_ON_IN)
[style] ~172-~172: Consider a shorter alternative to avoid wordiness.
Context: ...buying a large amount of staking tokens in order to attack a consumer chain. For example, ...(IN_ORDER_TO_PREMIUM)
Markdownlint
docs/docs/adrs/adr-020-cutomizable_slashing_and_jailing.md
17-17: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
19-19: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
20-20: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
22-22: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
30-30: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
31-31: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
34-34: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
35-35: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
40-40: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
41-41: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
44-44: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
46-46: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
48-48: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
50-50: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
51-51: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
56-56: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
77-77: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
85-85: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
86-86: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
88-88: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
96-96: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
98-98: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
107-107: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
116-116: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
118-118: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
119-119: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
129-129: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
130-130: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
132-132: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
134-134: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
144-144: Expected: 0 or 2; Actual: 3
Trailing spaces(MD009, no-trailing-spaces)
169-169: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
172-172: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
175-175: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
176-176: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
185-185: Expected: 1; Actual: 2
Multiple consecutive blank lines(MD012, no-multiple-blanks)
7-7: Expected: 1; Actual: 0; Below
Headings should be surrounded by blank lines(MD022, blanks-around-headings)
5-5: null
Multiple top-level headings in the same document(MD025, single-title, single-h1)
60-60: null
Fenced code blocks should be surrounded by blank lines(MD031, blanks-around-fences)
76-76: null
Fenced code blocks should be surrounded by blank lines(MD031, blanks-around-fences)
80-80: null
Fenced code blocks should be surrounded by blank lines(MD031, blanks-around-fences)
85-85: null
Fenced code blocks should be surrounded by blank lines(MD031, blanks-around-fences)
90-90: null
Fenced code blocks should be surrounded by blank lines(MD031, blanks-around-fences)
8-8: null
Lists should be surrounded by blank lines(MD032, blanks-around-lists)
Additional comments not posted (5)
docs/docs/adrs/adr-020-cutomizable_slashing_and_jailing.md (5)
15-49
: The "Context" section provides a clear and concise background.The section effectively highlights the current state of ICS and the challenges associated with the high cost of validating on consumer chains. It explains the risks incurred by validators and their delegators, and how this leads to the need for compensation, making the current design of ICS expensive.
Tools
LanguageTool
[style] ~39-~39: For conciseness, try rephrasing this sentence.
Context: ...ors don't need to have their own stake, it is possible that delegators take all the risk of validators misbehaving....(MAY_MIGHT_BE)
Markdownlint
17-17: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
19-19: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
20-20: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
22-22: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
30-30: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
31-31: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
34-34: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
35-35: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
40-40: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
41-41: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
44-44: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
46-46: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
48-48: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
54-135
: The "Decision" section provides a well-structured proposal.The section clearly outlines the proposed changes to allow consumer chains to customize slashing and jailing parameters. The introduction of the
InfractionParameters
andSlashJailParameters
message structures, along with the default values and recommended settings for different types of consumer chains, demonstrates a thoughtful approach to reducing the cost of ICS while maintaining flexibility for consumer chains.Tools
LanguageTool
[uncategorized] ~116-~116: The preposition “in” seems more likely in this position than the preposition “on”.
Context: ...ave on PoR consumer chains, their stake on the provider is not being slashed, inst...(AI_EN_LECTOR_REPLACEMENT_PREPOSITION_ON_IN)
Markdownlint
56-56: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
77-77: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
85-85: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
86-86: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
88-88: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
96-96: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
98-98: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
107-107: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
116-116: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
118-118: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
119-119: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
129-129: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
130-130: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
132-132: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
134-134: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
60-60: null
Fenced code blocks should be surrounded by blank lines(MD031, blanks-around-fences)
76-76: null
Fenced code blocks should be surrounded by blank lines(MD031, blanks-around-fences)
80-80: null
Fenced code blocks should be surrounded by blank lines(MD031, blanks-around-fences)
85-85: null
Fenced code blocks should be surrounded by blank lines(MD031, blanks-around-fences)
90-90: null
Fenced code blocks should be surrounded by blank lines(MD031, blanks-around-fences)
136-145
: The "Implementation" section provides clear steps.The implementation steps outlined in this section are clear and concise. The changes to
MsgCreateConsumer
andMsgUpdateConsumer
, along with the use of the consumer chain'sslash_fraction
andjail_duration
, ensure that the customized parameters are applied correctly. The special handling of cryptographic equivocation evidence for PoR chains aligns with the goal of reducing the risk for validators.Tools
Markdownlint
144-144: Expected: 0 or 2; Actual: 3
Trailing spaces(MD009, no-trailing-spaces)
146-182
: The "Consequences" section provides a balanced analysis.The section presents a balanced view of the proposed changes by discussing both the positive and negative consequences. The reduction of the cost of ICS is a significant benefit for validators and their delegators, while the potential reduction of the economical security of consumer chains with weaker slashing conditions is a valid concern. The economic security model without slashing, which relies on the properties of the Cosmos ecosystem, provides a reasonable justification for the proposed changes.
Tools
LanguageTool
[style] ~172-~172: Consider a shorter alternative to avoid wordiness.
Context: ...buying a large amount of staking tokens in order to attack a consumer chain. For example, ...(IN_ORDER_TO_PREMIUM)
Markdownlint
169-169: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
172-172: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
175-175: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
176-176: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
60-76
: The message structures are well-defined.The
InfractionParameters
andSlashJailParameters
message structures are well-defined and clearly represent the infraction parameters. The use ofSlashJailParameters
for both double sign and downtime infractions allows for customization of each type of infraction. Theslash_fraction
field uses appropriate custom scalar types and annotations for compatibility with the Cosmos SDK, and thejail_duration
field uses the standardgoogle.protobuf.Duration
type for representing time durations.Tools
Markdownlint
60-60: null
Fenced code blocks should be surrounded by blank lines(MD031, blanks-around-fences)
76-76: null
Fenced code blocks should be surrounded by blank lines(MD031, blanks-around-fences)
Co-authored-by: insumity <karolos@informal.systems>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
🧹 Outside diff range and nitpick comments (4)
docs/docs/adrs/adr-020-cutomizable_slashing_and_jailing.md (4)
15-50
: Consider minor stylistic improvements for clarity.The Context section provides a comprehensive background on ICS and its associated costs. However, consider the following improvements:
- Line 39: Rephrase for conciseness. Suggestion: "As validators may not have their own stake, delegators could bear the full risk of validator misbehavior."
- Line 41: Move "also" before "applies" for better flow.
- Line 48: Consider breaking this long sentence into two for better readability.
These changes will enhance the overall clarity and flow of the section.
🧰 Tools
🪛 LanguageTool
[style] ~39-~39: For conciseness, try rephrasing this sentence.
Context: ...ors don't need to have their own stake, it is possible that delegators take all the risk of validators misbehaving....(MAY_MIGHT_BE)
🪛 Markdownlint
17-17: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
19-19: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
20-20: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
22-22: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
30-30: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
31-31: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
34-34: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
35-35: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
40-40: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
41-41: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
44-44: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
46-46: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
48-48: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
50-50: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
146-177
: Enhance clarity of the economic security model explanation.The Consequences section provides a good overview of the positive and negative impacts. To improve the explanation of the economic security model without slashing:
- Consider using bullet points or a numbered list to clearly outline the steps in the potential attack scenario.
- Elaborate on how power shaping and token toxicity mitigate the risks of attacks, providing more concrete examples if possible.
These changes will help readers better understand the security implications of the proposed changes.
🧰 Tools
🪛 LanguageTool
[style] ~172-~172: Consider a shorter alternative to avoid wordiness.
Context: ...buying a large amount of staking tokens in order to attack a consumer chain. For example, ...(IN_ORDER_TO_PREMIUM)
🪛 Markdownlint
169-169: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
172-172: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
175-175: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
176-176: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
183-185
: Consider adding relevant references.The References section is currently empty. Consider adding links to relevant resources, such as:
- Cosmos Interchain Security documentation
- Papers or articles discussing slashing and jailing mechanisms in PoS systems
- Any external discussions or proposals that influenced this ADR
These references would provide valuable context and further reading for those interested in the topic.
🧰 Tools
🪛 Markdownlint
185-185: Expected: 1; Actual: 2
Multiple consecutive blank lines(MD012, no-multiple-blanks)
1-185
: Fix minor formatting issues throughout the document.Please address the following formatting issues:
- Remove trailing spaces at the end of lines throughout the document.
- Ensure consistent use of asterisks (*) for unordered lists instead of dashes (-).
- Remove extra blank lines at the end of the document, leaving only one.
- Add blank lines before and after code blocks for better readability.
These changes will improve the overall formatting and consistency of the document.
🧰 Tools
🪛 LanguageTool
[style] ~39-~39: For conciseness, try rephrasing this sentence.
Context: ...ors don't need to have their own stake, it is possible that delegators take all the risk of validators misbehaving....(MAY_MIGHT_BE)
[style] ~172-~172: Consider a shorter alternative to avoid wordiness.
Context: ...buying a large amount of staking tokens in order to attack a consumer chain. For example, ...(IN_ORDER_TO_PREMIUM)
🪛 Markdownlint
17-17: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
19-19: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
20-20: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
22-22: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
30-30: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
31-31: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
34-34: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
35-35: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
40-40: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
41-41: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
44-44: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
46-46: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
48-48: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
50-50: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
51-51: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
56-56: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
77-77: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
85-85: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
86-86: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
88-88: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
96-96: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
98-98: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
107-107: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
116-116: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
118-118: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
119-119: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
129-129: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
130-130: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
132-132: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
134-134: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
144-144: Expected: 0 or 2; Actual: 3
Trailing spaces(MD009, no-trailing-spaces)
169-169: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
172-172: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
175-175: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
176-176: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
185-185: Expected: 1; Actual: 2
Multiple consecutive blank lines(MD012, no-multiple-blanks)
7-7: Expected: 1; Actual: 0; Below
Headings should be surrounded by blank lines(MD022, blanks-around-headings)
5-5: null
Multiple top-level headings in the same document(MD025, single-title, single-h1)
60-60: null
Fenced code blocks should be surrounded by blank lines(MD031, blanks-around-fences)
76-76: null
Fenced code blocks should be surrounded by blank lines(MD031, blanks-around-fences)
80-80: null
Fenced code blocks should be surrounded by blank lines(MD031, blanks-around-fences)
85-85: null
Fenced code blocks should be surrounded by blank lines(MD031, blanks-around-fences)
90-90: null
Fenced code blocks should be surrounded by blank lines(MD031, blanks-around-fences)
8-8: null
Lists should be surrounded by blank lines(MD032, blanks-around-lists)
📜 Review details
Configuration used: .coderabbit.yml
Review profile: CHILL
📒 Files selected for processing (1)
- docs/docs/adrs/adr-020-cutomizable_slashing_and_jailing.md (1 hunks)
🧰 Additional context used
🪛 LanguageTool
docs/docs/adrs/adr-020-cutomizable_slashing_and_jailing.md
[style] ~39-~39: For conciseness, try rephrasing this sentence.
Context: ...ors don't need to have their own stake, it is possible that delegators take all the risk of validators misbehaving....(MAY_MIGHT_BE)
[style] ~172-~172: Consider a shorter alternative to avoid wordiness.
Context: ...buying a large amount of staking tokens in order to attack a consumer chain. For example, ...(IN_ORDER_TO_PREMIUM)
🪛 Markdownlint
docs/docs/adrs/adr-020-cutomizable_slashing_and_jailing.md
17-17: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
19-19: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
20-20: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
22-22: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
30-30: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
31-31: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
34-34: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
35-35: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
40-40: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
41-41: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
44-44: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
46-46: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
48-48: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
50-50: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
51-51: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
56-56: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
77-77: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
85-85: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
86-86: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
88-88: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
96-96: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
98-98: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
107-107: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
116-116: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
118-118: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
119-119: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
129-129: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
130-130: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
132-132: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
134-134: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
144-144: Expected: 0 or 2; Actual: 3
Trailing spaces(MD009, no-trailing-spaces)
169-169: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
172-172: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
175-175: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
176-176: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
185-185: Expected: 1; Actual: 2
Multiple consecutive blank lines(MD012, no-multiple-blanks)
7-7: Expected: 1; Actual: 0; Below
Headings should be surrounded by blank lines(MD022, blanks-around-headings)
5-5: null
Multiple top-level headings in the same document(MD025, single-title, single-h1)
60-60: null
Fenced code blocks should be surrounded by blank lines(MD031, blanks-around-fences)
76-76: null
Fenced code blocks should be surrounded by blank lines(MD031, blanks-around-fences)
80-80: null
Fenced code blocks should be surrounded by blank lines(MD031, blanks-around-fences)
85-85: null
Fenced code blocks should be surrounded by blank lines(MD031, blanks-around-fences)
90-90: null
Fenced code blocks should be surrounded by blank lines(MD031, blanks-around-fences)
8-8: null
Lists should be surrounded by blank lines(MD032, blanks-around-lists)
🔇 Additional comments (3)
docs/docs/adrs/adr-020-cutomizable_slashing_and_jailing.md (3)
1-14
: LGTM: Document header and changelog are well-structured.The frontmatter, title, and changelog are properly formatted. The status is correctly set to "Proposed" for this new ADR.
🧰 Tools
🪛 Markdownlint
7-7: Expected: 1; Actual: 0; Below
Headings should be surrounded by blank lines(MD022, blanks-around-headings)
5-5: null
Multiple top-level headings in the same document(MD025, single-title, single-h1)
8-8: null
Lists should be surrounded by blank lines(MD032, blanks-around-lists)
54-135
: LGTM: Well-structured decision with clear guidelines.The Decision section effectively outlines the customizable slashing and jailing parameters, providing clear definitions, default values, and update mechanisms. The recommendations for different types of consumer chains are particularly helpful.
🧰 Tools
🪛 Markdownlint
56-56: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
77-77: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
85-85: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
86-86: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
88-88: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
96-96: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
98-98: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
107-107: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
116-116: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
118-118: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
119-119: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
129-129: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
130-130: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
132-132: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
134-134: Expected: 0 or 2; Actual: 1
Trailing spaces(MD009, no-trailing-spaces)
60-60: null
Fenced code blocks should be surrounded by blank lines(MD031, blanks-around-fences)
76-76: null
Fenced code blocks should be surrounded by blank lines(MD031, blanks-around-fences)
80-80: null
Fenced code blocks should be surrounded by blank lines(MD031, blanks-around-fences)
85-85: null
Fenced code blocks should be surrounded by blank lines(MD031, blanks-around-fences)
90-90: null
Fenced code blocks should be surrounded by blank lines(MD031, blanks-around-fences)
163-163
: Clarify handling of inactive validators.The document mentions the difficulty of entering the active validator set and climbing the voting power ladder. However, it doesn't address how inactive validators are handled in this customizable slashing and jailing framework. Could you please clarify if there are any specific considerations or parameters for inactive validators?
### Implementation | ||
|
||
The implementation of this feature involves the following steps: | ||
|
||
* Add the `InfractionParameters` to `MsgCreateConsumer`. | ||
* On slashing events (for either downtime or double signing infractions), use the corresponding `slash_fraction` set by the consumer chain. | ||
* On jailing events (for either downtime or double signing infractions), use the corresponding `jail_duration` set by the consumer chain. | ||
* Cryptographic equivocation evidence received for PoR chains results in the misbehaving validators only being tombstoned and not slashed. | ||
* (Optional) Add the `InfractionParameters` to `MsgUpdateConsumer`, i.e., allow consumer chains to update the slashing and jailing parameters, but the changes will come into effect after a period equal to the staking module's unbonding period elapses to allow for validators to opt out. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Consider including fault resolutions in the implementation plan.
The implementation steps are well-defined. However, consider adding a step to parameterize (enable/disable) fault resolutions, as mentioned in a previous comment. This would provide a more comprehensive implementation plan and align with the overall goal of customizable security measures.
🧰 Tools
🪛 Markdownlint
144-144: Expected: 0 or 2; Actual: 3
Trailing spaces(MD009, no-trailing-spaces)
Description
Closes: #XXXX
Author Checklist
All items are required. Please add a note to the item if the item is not applicable and
please add links to any relevant follow up issues.
I have...
docs:
prefix in the PR titleReviewers Checklist
All items are required. Please add a note if the item is not applicable and please add
your handle next to the items reviewed if you only reviewed selected items.
I have...
docs:
prefix in the PR titlemake build-docs
)Summary by CodeRabbit
New Features
Documentation