Skip to content
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

Update EIP-908: broken link eip-908.md #9147

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion EIPS/eip-908.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,20 +9,20 @@
created: 2018-03-01
---

## A reward for running a full node is deprecated, but the proposal for a reward for clients remains

Check warning on line 12 in EIPS/eip-908.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

body has extra section(s)

warning[markdown-order-section]: body has extra section(s) --> EIPS/eip-908.md | 12 | ## A reward for running a full node is deprecated, but the proposal for a reward for clients remains | ::: EIPS/eip-908.md | 16 | ## Simple Summary | ::: EIPS/eip-908.md | 116 | ## Implementation | = help: see https://ethereum.github.io/eipw/markdown-order-section/

Check warning on line 12 in EIPS/eip-908.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

body has extra section(s)

warning[markdown-order-section]: body has extra section(s) --> EIPS/eip-908.md | 12 | ## A reward for running a full node is deprecated, but the proposal for a reward for clients remains | ::: EIPS/eip-908.md | 16 | ## Simple Summary | ::: EIPS/eip-908.md | 116 | ## Implementation | = help: see https://ethereum.github.io/eipw/markdown-order-section/

While Casper validators are incentivized to validate transactions, there are still no incentives for relaying blocks and storing data (which includes state). This paper is more a high-level analysis and discussion rather than attempting to provide a concrete solution. [Pocket Network](https://www.pokt.network/) is a separate blockchain being designed as of Sept 2018 that incentivises relaying transactions, that is intended to be compatible with other blockchains. Note also that [Rocket Pool](https://github.com/rocket-pool/rocketpool) is under development and is planned to be a pool for Casper, which will help to incentivise running a full node. Another alternative is [VIPnode](https://github.com/vipnode/vipnode.org) which charges fees to light clients for full nodes that serve them. In light of these solutions being developed, perhaps a more appropriate approach to generally rewarding clients would be to incentivize bandwidth (relaying and downloading), storage and I/O (while computation is already incentivized with gas for miners and will be for proposers under sharding and Casper). Note also that notaries will be incentivized to download collations under sharding. Outdated (Casper FFG will be implemented with Ethereum 2.0 with sharding: [shasper](https://notes.ethereum.org/SCIg8AH5SA-O4C1G1LYZHQ#)): given that it looks like Casper FFG will be implemented soon, to minimize undue complexity to the protocol, incentivizing validation in the mean time may be considered not worthwhile. For a previous version of the proposal containing a proposal for rewarding a full node, refer to [here](https://github.com/ethereum/EIPs/commit/97e235d0ba4a88b4ce29834aa2b94107b8d91e12#diff-9a43a8739b5a9e1dec427324cb264921).

Check warning on line 14 in EIPS/eip-908.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

non-relative link or image

warning[markdown-rel-links]: non-relative link or image --> EIPS/eip-908.md | 14 | While Casper validators are incentivized to validate transactions, there are still no incentives for relaying blocks and storing dat... | = help: see https://ethereum.github.io/eipw/markdown-rel-links/

Check warning on line 14 in EIPS/eip-908.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

non-relative link or image

warning[markdown-rel-links]: non-relative link or image --> EIPS/eip-908.md | 14 | While Casper validators are incentivized to validate transactions, there are still no incentives for relaying blocks and storing dat... |

Check warning on line 14 in EIPS/eip-908.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

non-relative link or image

warning[markdown-rel-links]: non-relative link or image --> EIPS/eip-908.md | 14 | While Casper validators are incentivized to validate transactions, there are still no incentives for relaying blocks and storing dat... |

Check warning on line 14 in EIPS/eip-908.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

non-relative link or image

warning[markdown-rel-links]: non-relative link or image --> EIPS/eip-908.md | 14 | While Casper validators are incentivized to validate transactions, there are still no incentives for relaying blocks and storing dat... |

Check warning on line 14 in EIPS/eip-908.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

non-relative link or image

warning[markdown-rel-links]: non-relative link or image --> EIPS/eip-908.md | 14 | While Casper validators are incentivized to validate transactions, there are still no incentives for relaying blocks and storing dat... | = help: see https://ethereum.github.io/eipw/markdown-rel-links/

Check warning on line 14 in EIPS/eip-908.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

non-relative link or image

warning[markdown-rel-links]: non-relative link or image --> EIPS/eip-908.md | 14 | While Casper validators are incentivized to validate transactions, there are still no incentives for relaying blocks and storing dat... |

Check warning on line 14 in EIPS/eip-908.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

non-relative link or image

warning[markdown-rel-links]: non-relative link or image --> EIPS/eip-908.md | 14 | While Casper validators are incentivized to validate transactions, there are still no incentives for relaying blocks and storing dat... |

Check warning on line 14 in EIPS/eip-908.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

non-relative link or image

warning[markdown-rel-links]: non-relative link or image --> EIPS/eip-908.md | 14 | While Casper validators are incentivized to validate transactions, there are still no incentives for relaying blocks and storing dat... |

## Simple Summary

Check failure on line 16 in EIPS/eip-908.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Below] [Context: "## Simple Summary"]

EIPS/eip-908.md:16 MD022/blanks-around-headings/blanks-around-headers Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Below] [Context: "## Simple Summary"]

Check failure on line 16 in EIPS/eip-908.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Below] [Context: "## Simple Summary"]

EIPS/eip-908.md:16 MD022/blanks-around-headings/blanks-around-headers Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Below] [Context: "## Simple Summary"]
When each transaction is validated, give a reward to clients for developing the client.

## Abstract

Check failure on line 19 in EIPS/eip-908.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Below] [Context: "## Abstract"]

EIPS/eip-908.md:19 MD022/blanks-around-headings/blanks-around-headers Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Below] [Context: "## Abstract"]

Check failure on line 19 in EIPS/eip-908.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Below] [Context: "## Abstract"]

EIPS/eip-908.md:19 MD022/blanks-around-headings/blanks-around-headers Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Below] [Context: "## Abstract"]
The tragedy of the commons is a phenomenon that is well known in many sectors, most notably in regard to sustainability. It involves the over-utilization of shared finite resources, which detriments all participants and stakeholders involved (which in the case of a global public good can be everyone, including future generations). Without proper management of public resources, a tragedy of the commons can occur. Internalizing externalities (where externalities can be broadly defined as effects that are not accounted for in the intrinsic price of a good, service or resource) is one way of incentivizing the proper management of resources, although other methods that actually properly manage them are necessary. This EIP proposes to make a change to the protocol to providea reward to clients for providing the software that enables Ethereum to function, where the reward can include a proportion of transaction fees (reducing the full proportion that the miner currently receives), and some newly minted ETH. Thus, clients are incentivized to maintain and improve the security and health of the Ethereum protocol and ecosystem. To summarize the mechanism in the proposal, a user agent is attached to a transaction, where this user agent contains a vector with the index of a client address in an access list. The client address could be inserted by the client and verified that it is the same as a read-only constant in the client's storage.

Reward mechanisms that are external to being built in to the protocol are beyond the scope of this EIP. Such extra-protocol reward methods include state channel payments for extra services such as light client servers providing faster information such as receipts; state channel payments for buying state reads from full nodes; archival services (which is only applicable to future proposed versions of Ethereum with stateless clients); and tokens for the client and running full nodes.

## Motivation

Check failure on line 24 in EIPS/eip-908.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Below] [Context: "## Motivation"]

EIPS/eip-908.md:24 MD022/blanks-around-headings/blanks-around-headers Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Below] [Context: "## Motivation"]

Check failure on line 24 in EIPS/eip-908.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Below] [Context: "## Motivation"]

EIPS/eip-908.md:24 MD022/blanks-around-headings/blanks-around-headers Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Below] [Context: "## Motivation"]
Currently there is a lack of incentives for anyone to run a full node, while joining a mining pool is not really economical if one has to purchase a mining rig (several GPUs) now, since there is unlikely to be a return on investment by the time that Ethereum transitions to hybrid Proof-of-Work/Proof-of-Stake with [Casper FFG](./eip-1011.md), then full PoS with [CBC Casper](https://github.com/ethereum/research/blob/master/papers/CasperTFG/CasperTFG.pdf).

Check warning on line 25 in EIPS/eip-908.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

proposal `eip-1011.md` is not stable enough for a `status` of `Withdrawn`

warning[markdown-link-status]: proposal `eip-1011.md` is not stable enough for a `status` of `Withdrawn` --> EIPS/eip-908.md | 25 | Currently there is a lack of incentives for anyone to run a full node, while joining a mining pool is not really economical if one h... | = help: because of this link, this proposal's `status` must be one of: `Draft`, `Stagnant` = help: see https://ethereum.github.io/eipw/markdown-link-status/

Check warning on line 25 in EIPS/eip-908.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

proposal `eip-1011.md` is not stable enough for a `status` of `Withdrawn`

warning[markdown-link-status]: proposal `eip-1011.md` is not stable enough for a `status` of `Withdrawn` --> EIPS/eip-908.md | 25 | Currently there is a lack of incentives for anyone to run a full node, while joining a mining pool is not really economical if one h... | = help: because of this link, this proposal's `status` must be one of: `Draft`, `Stagnant` = help: see https://ethereum.github.io/eipw/markdown-link-status/

Additionally, providing a reward for clients gives a revenue stream that is independent of state channels or other layer 2 mechanisms, which are less secure, although this insecurity can be offset by mechanisms such as insurance, bonded payments and time locks. Rationalising that investors may invest in a client because it is an enabler for the Ethereum ecosystem (and thus opening up investment opportunities) may not scale very well, and it seems that it is more sustainable to monetize the client as part of the service(s) that it provides.

Expand All @@ -40,9 +40,9 @@

Not providing incentives for clients is an issue now as there is less incentive to build a client that aligns with the needs of users, funds need to be raised externally to the protocol to fund client development, which is not as decentralized. If only a smaller subset is able to fund client development, such as VCs, angel investors and institutional investors, that may not align well with the interests of all current and potential stakeholders of Ethereum (which includes future stakeholders). Ostensibly, one of the goals of Ethereum is to decentralize everything, including wealth, or in other words, to improve wealth equality. Not providing incentives for full nodes validating transactions may not seem like as much of an issue now, but not doing so could hinder the growth of the protocol. Of course, incentives aren't enough, it also needs to be technically decentralized so that it is ideally possible for a low-end mainstream computer or perhaps even a mobile or embedded IoT device to be a verifying full node, or at least to be able to help with securing the network if it is deemed impractical for them to be a full node.

Note that with a supply cap (as in [EIP-960](https://github.com/ethereum/EIPs/issues/960), the issuance can be prevented from increasing indefinitely. Alternatively, it could at least be reduced (still potentially but not necessarily to zero, or to the same rate at which Ether is burnt when slashing participants, such as validators under a Casper PoS scheme or notaries under a sharding scheme), e.g. by hard forks, or as per [EIP-1015](./eip-1015.md), an on-chain contract governed by a decision assembly that gets signalling from other contracts that represent some set of stakeholders.

Check warning on line 43 in EIPS/eip-908.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

proposal `eip-1015.md` is not stable enough for a `status` of `Withdrawn`

warning[markdown-link-status]: proposal `eip-1015.md` is not stable enough for a `status` of `Withdrawn` --> EIPS/eip-908.md | 43 | Note that with a supply cap (as in [EIP-960](https://github.com/ethereum/EIPs/issues/960), the issuance can be prevented from increa... | = help: because of this link, this proposal's `status` must be one of: `Draft`, `Stagnant`

Check warning on line 43 in EIPS/eip-908.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

unable to read file `eip-960.md`: Io

warning[markdown-refs]: unable to read file `eip-960.md`: Io --> EIPS/eip-908.md | 43 | Note that with a supply cap (as in [EIP-960](https://github.com/ethereum/EIPs/issues/960), the issuance can be prevented from increa... | = help: see https://ethereum.github.io/eipw/markdown-refs/

Check warning on line 43 in EIPS/eip-908.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

proposal `eip-1015.md` is not stable enough for a `status` of `Withdrawn`

warning[markdown-link-status]: proposal `eip-1015.md` is not stable enough for a `status` of `Withdrawn` --> EIPS/eip-908.md | 43 | Note that with a supply cap (as in [EIP-960](https://github.com/ethereum/EIPs/issues/960), the issuance can be prevented from increa... | = help: because of this link, this proposal's `status` must be one of: `Draft`, `Stagnant`

Check warning on line 43 in EIPS/eip-908.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

unable to read file `eip-960.md`: Io

warning[markdown-refs]: unable to read file `eip-960.md`: Io --> EIPS/eip-908.md | 43 | Note that with a supply cap (as in [EIP-960](https://github.com/ethereum/EIPs/issues/960), the issuance can be prevented from increa... | = help: see https://ethereum.github.io/eipw/markdown-refs/

## Specification

Check failure on line 45 in EIPS/eip-908.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Below] [Context: "## Specification"]

EIPS/eip-908.md:45 MD022/blanks-around-headings/blanks-around-headers Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Below] [Context: "## Specification"]

Check failure on line 45 in EIPS/eip-908.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Below] [Context: "## Specification"]

EIPS/eip-908.md:45 MD022/blanks-around-headings/blanks-around-headers Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Below] [Context: "## Specification"]
Add a new field to each block called `PrevBlockVerifications`, which is an arbitrary, unlimited size byte array. When a client verifies that a previous block is [valid](https://ethereum.github.io/yellowpaper/paper.pdf#subsubsection.4.3.2), the client appends a user agent to PrevBlockVerifications via an opcode in a transaction, PREV_BLOCK_VERIF. The user agent is a vector with the immutable fields: the blockhash of the block that is validated, and the index of a client address in an access list (details are below). A miner validates a transaction before including it in a block, however they are not able to change these fields of the vector because they're immutable.

Send 0.15 ETH to the client (see the rationale below), when the block is processed. The amounts could include a proportion of transaction fees (while the miner would then receive less), which would reduce newly issued ETH. These amounts are specified in new `ClientReward` fields in the block.
Expand All @@ -55,7 +55,7 @@

### More details on the access list

The access list prevents anyone inserting any address to the first element of the vector, where there may be a way to prevent censorship and centralization of authority of who decides to register new addresses in the list, e.g. on-chain governance with signalling (possibly similar to [EIP-1015](./eip-1015.md), which also specifies an alternative way of sending funds) or a layer 2 proof of authority network where new addresses can be added via a smart contract. Note that there may be serious drawbacks to implementing either of these listed examples. There is a refutation of [on-chain governance](https://medium.com/@Vlad_Zamfir/against-on-chain-governance-a4ceacd040ca) as well as of [plutocracy](https://vitalik.ca/general/2018/03/28/plutocracy.html). [Proof of Authority](https://en.wikipedia.org/wiki/Proof-of-authority) isn't suitable for a public network since it doesn't distribute trust well. However, using signalling in layer 2 contracts is more acceptable, but Vlad Zamfir argues that using that to influence outcomes in the protocol can disenfranchise miners from being necessary participants in the governance process. Thus, in light of these counterpoints, having an access list may not be suitable until a decentralized, trustless way of maintaining it is implemented and ideally accepted by the majority of a random sample that represents the population of Ethereum users.
The access list prevents anyone inserting any address to the first element of the vector, where there may be a way to prevent censorship and centralization of authority of who decides to register new addresses in the list, e.g. on-chain governance with signalling (possibly similar to [EIP-1015](./eip-1015.md), which also specifies an alternative way of sending funds) or a layer 2 proof of authority network where new addresses can be added via a smart contract. Note that there may be serious drawbacks to implementing either of these listed examples. There is a refutation of [on-chain governance](https://medium.com/@Vlad_Zamfir/against-on-chain-governance-a4ceacd040ca) as well as of [plutocracy](https://vitalik.eth.limo/general/2018/03/28/plutocracy.html). [Proof of Authority](https://en.wikipedia.org/wiki/Proof-of-authority) isn't suitable for a public network since it doesn't distribute trust well. However, using signalling in layer 2 contracts is more acceptable, but Vlad Zamfir argues that using that to influence outcomes in the protocol can disenfranchise miners from being necessary participants in the governance process. Thus, in light of these counterpoints, having an access list may not be suitable until a decentralized, trustless way of maintaining it is implemented and ideally accepted by the majority of a random sample that represents the population of Ethereum users.

Check warning on line 58 in EIPS/eip-908.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

proposal `eip-1015.md` is not stable enough for a `status` of `Withdrawn`

warning[markdown-link-status]: proposal `eip-1015.md` is not stable enough for a `status` of `Withdrawn` --> EIPS/eip-908.md | 58 | The access list prevents anyone inserting any address to the first element of the vector, where there may be a way to prevent censor... | = help: because of this link, this proposal's `status` must be one of: `Draft`, `Stagnant`

Check warning on line 58 in EIPS/eip-908.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

proposal `eip-1015.md` is not stable enough for a `status` of `Withdrawn`

warning[markdown-link-status]: proposal `eip-1015.md` is not stable enough for a `status` of `Withdrawn` --> EIPS/eip-908.md | 58 | The access list prevents anyone inserting any address to the first element of the vector, where there may be a way to prevent censor... | = help: because of this link, this proposal's `status` must be one of: `Draft`, `Stagnant`

However, another alternative to managing the access list would be to have decentralized verification that the address produced from querying an index in the access list does correspond to that of a "legitimate" client. Part of this verification would involve checking that there is a client that claims that this address is owned by them, that they are happy to receive funds in this manner and agree or arranged to putting the address in the access list, and that the client passes all tests in the [Ethereum test suite](https://github.com/ethereum/tests). However, this last proviso would then preclude new clients being funded from the start of development, although such would-be clients would not be able to receive funds in-protocol until they implement the client anyway (as an aside, they could raise funds in various ways—a DAII, pronounced die-yee, is recommended, while a platform for DAIIs is under development by [Dogezer](https://dogezer.com/)). All of this could be done off-chain, and if anyone found that some address in the access list was not legitimate, then they could challenge that address with a proof of illegitimacy, and the participant that submitted the address to the access list could be slashed (while they must hold a deposit in order to register and keep an address in the access list).

Expand All @@ -79,7 +79,7 @@

Suppose that we use a block reward of 0.15 ETH for clients.

<!--There are more than 5552465 blocks and counting. With a reward of 0.001 ETH for each block, a full state node that verified every block would receive 5552.465 ETH. However, the difficulty of verifying blocks increases over time, so-->

Check warning on line 82 in EIPS/eip-908.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

HTML comments are only allowed while `status` is one of: `Draft`, `Withdrawn`

warning[markdown-html-comments]: HTML comments are only allowed while `status` is one of: `Draft`, `Withdrawn` --> EIPS/eip-908.md | 82 | <!--There are more than 5552465 blocks and counting. With a reward of 0.001 ETH for each block, a full state node that verified ever... | = help: see https://ethereum.github.io/eipw/markdown-html-comments/

Check warning on line 82 in EIPS/eip-908.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

HTML comments are only allowed while `status` is one of: `Draft`, `Withdrawn`

warning[markdown-html-comments]: HTML comments are only allowed while `status` is one of: `Draft`, `Withdrawn` --> EIPS/eip-908.md | 82 | <!--There are more than 5552465 blocks and counting. With a reward of 0.001 ETH for each block, a full state node that verified ever... | = help: see https://ethereum.github.io/eipw/markdown-html-comments/

### More rationale (outdated by above)

Expand All @@ -101,7 +101,7 @@

Note that while further quantitative analysis to specify fees should be done, some level of experimentation after implementing this method on-chain may be necessary.

### Security

Check failure on line 104 in EIPS/eip-908.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Below] [Context: "### Security"]

EIPS/eip-908.md:104 MD022/blanks-around-headings/blanks-around-headers Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Below] [Context: "### Security"]

Check failure on line 104 in EIPS/eip-908.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Below] [Context: "### Security"]

EIPS/eip-908.md:104 MD022/blanks-around-headings/blanks-around-headers Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Below] [Context: "### Security"]
All of the below struck out information should be prevented via using an access list and verifying that the read-only address provided by the client matches with an address in the access list, as well as using a layer 2 solution such as a PoA network for censhorship resistance and minimization of centralization in the access list.

Further discussion is at https://ethresear.ch/t/incentives-for-running-full-ethereum-nodes/1239.
Expand All @@ -110,10 +110,10 @@

Introducing in-protocol fees is a backwards-incompatible change, so would be introduced in a hard-fork.

## Test Cases

Check failure on line 113 in EIPS/eip-908.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Below] [Context: "## Test Cases"]

EIPS/eip-908.md:113 MD022/blanks-around-headings/blanks-around-headers Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Below] [Context: "## Test Cases"]

Check failure on line 113 in EIPS/eip-908.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Below] [Context: "## Test Cases"]

EIPS/eip-908.md:113 MD022/blanks-around-headings/blanks-around-headers Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Below] [Context: "## Test Cases"]
TODO

## Implementation

Check failure on line 116 in EIPS/eip-908.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Below] [Context: "## Implementation"]

EIPS/eip-908.md:116 MD022/blanks-around-headings/blanks-around-headers Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Below] [Context: "## Implementation"]

Check failure on line 116 in EIPS/eip-908.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Below] [Context: "## Implementation"]

EIPS/eip-908.md:116 MD022/blanks-around-headings/blanks-around-headers Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Below] [Context: "## Implementation"]
TODO

## Copyright
Expand Down
Loading