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

EIP: Reward for clients and full nodes validating transactions #908

Merged
merged 40 commits into from
Apr 7, 2018
Merged
Changes from 18 commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
7f3131a
Create eip-Reward-full-nodes-validating-tx.md
jamesray1 Feb 28, 2018
6b1794f
Update eip-Reward-full-nodes-validating-tx.md
jamesray1 Mar 1, 2018
db62e28
Update eip-Reward-full-nodes-validating-tx.md
jamesray1 Mar 1, 2018
cb0e9cf
Update eip-Reward-full-nodes-validating-tx.md
jamesray1 Mar 1, 2018
3c3596e
Update eip-Reward-full-nodes-validating-tx.md
jamesray1 Mar 2, 2018
8f60b00
Update eip-Reward-full-nodes-validating-tx.md
jamesray1 Mar 2, 2018
6ca6205
Update eip-Reward-full-nodes-validating-tx.md
jamesray1 Mar 2, 2018
eeeafab
Update eip-Reward-full-nodes-validating-tx.md
jamesray1 Mar 2, 2018
a532f0c
Update eip-Reward-full-nodes-validating-tx.md
jamesray1 Mar 2, 2018
aec4d62
Update eip-Reward-full-nodes-validating-tx.md
jamesray1 Mar 2, 2018
0b1b845
Update eip-Reward-full-nodes-validating-tx.md
jamesray1 Mar 2, 2018
d1b62ab
Update and rename eip-Reward-full-nodes-validating-tx.md to eip-Rewar…
jamesray1 Mar 2, 2018
27efa4c
Update eip-Reward-full-nodes-and-clients.md
jamesray1 Mar 2, 2018
b1b2064
Update eip-Reward-full-nodes-and-clients.md
jamesray1 Mar 2, 2018
5fe1ba3
Update eip-Reward-full-nodes-and-clients.md
jamesray1 Mar 2, 2018
6abad58
Update eip-Reward-full-nodes-and-clients.md
jamesray1 Mar 2, 2018
e5680e9
Update eip-Reward-full-nodes-and-clients.md
jamesray1 Mar 2, 2018
aa8e4f1
Update eip-Reward-full-nodes-and-clients.md
jamesray1 Mar 2, 2018
968d833
Quotes for Micah
jamesray1 Mar 2, 2018
ea0ecb7
The amount of computation to validate a transaction will be the same …
jamesray1 Mar 2, 2018
d417cdf
Add comments on Micah's suggestions and give further specification de…
jamesray1 Mar 2, 2018
bc58bef
Further commentary on transaction fee amount for full nodes vs miner …
jamesray1 Mar 2, 2018
94ca418
Add "One problem with this is that a miner could run a full node vali…
jamesray1 Mar 2, 2018
b5c1c28
he user agent would contain the information needed to send an amount …
jamesray1 Mar 6, 2018
0b80841
Add a missing T
jamesray1 Mar 6, 2018
cf42bb0
Update frontmatter
jamesray1 Mar 27, 2018
6d5dada
Merge branch 'master' into patch-16
gcolvin Mar 29, 2018
46775d2
Merge branch 'master' into patch-16
jamesray1 Apr 3, 2018
0658a64
Comment out implementation, add backwards incompatibility
jamesray1 Apr 5, 2018
d8e5787
Update the specification, rewording and moving content
jamesray1 Apr 6, 2018
118a0a8
Update the header, Test Cases and Implementation
jamesray1 Apr 7, 2018
51197cb
Update eip-Reward-full-nodes-and-clients.md
jamesray1 Apr 7, 2018
cd134bb
Chamge the category to Core
jamesray1 Apr 7, 2018
e8ca385
to be assigned => <to be assigned>
jamesray1 Apr 7, 2018
96c5ba0
discussions-to: https://gitter.im/ethereum/topics/topic/5ac8574227c50…
jamesray1 Apr 7, 2018
c89b512
Move around fields in the header
jamesray1 Apr 7, 2018
71ffe54
Add an extra line to see if that will get the build to pass
jamesray1 Apr 7, 2018
3b57814
Merge branch 'master' into patch-16
jamesray1 Apr 7, 2018
7af5f2e
Assign eip number 908
jamesray1 Apr 7, 2018
ca16f88
Rename eip-Reward-full-nodes-and-clients.md to eip-908.md
jamesray1 Apr 7, 2018
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
55 changes: 55 additions & 0 deletions EIPS/eip-Reward-full-nodes-and-clients.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
## Preamble

EIP: to be assigned
Title: Reward full nodes and clients
Author: James Ray and Micah Zoltu
Type: Standard Track
Category: Core & ERC
Status: Draft
Created: 2017-03-01

## Simple Summary
Provide a reward to full nodes for validating transactions and give a reward to clients for developing the client.

## Abstract
This EIP proposes to make a change to the protocol to provide a reward to full nodes for validating transactions and thus providing extra security for the Ethereum network, and a reward to clients for providing the software that enables Ethereum to function. 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
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, then full PoS. Additionally, providing a reward for clients gives a revenue stream that is independent of state channels, 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) it provides.

## Specification
when a client signs a transaction, it attaches a user agent to the signature. This could then be used to send some amount of ETH to the author of that user agent. Additionally, some amount of ETH could be sent to the organization that develops the client (e.g. Parity, the Ethereum Foundation, etc.), when the transaction is processed (similar to mining rewards). The actual amounts are subject to data analysis as discussed below.

## Rationale

Discussion began at https://ethresear.ch/t/incentives-for-running-full-ethereum-nodes/1239/20.

The first most obvious caveat is that end-users would be incentivized to put an address of their own down as the user agent. Initial thinking on this is that there are few enough users advanced enough to run a custom client so the losses there would be minimal, and client developers are incentivized to not make the user agent string configurable because it is how they get paid. Also, presumably the per-transaction user-agent fee would be small enough such that the average user probably won’t care enough to hack their client to change it (or even switch clients to one that lets the user customize the user agent), usability and simplicity matter more to most. There is a concern that most transactions are coming in through third party Ethereum nodes like Infura or QuikNode and they have incentive and capability to change the user agent.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If the per transaction fee is low enough people won't bother to cheat, doesn't that also mean this will only effectively incentivise running large centralised nodes like infura?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fair point, there would have to be a way to make the tx fee worthwhile, but to prevent malicious behaviour.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Arachnid The fee would be going (presumably) to the client developer, not the node owner, unless the node owner hacks their client to set themselves as the client author.

I’m tempted to suggest “lets wait and see if user-agent spoofing becomes a meaningful problem before trying to fix it”, since the worst it can do is put is right back where we are now with no incentives for client development.
Something to consider is that the user agent fee could be used to bribe miners by putting the miner address in instead. Once again, I’m tempted to try it out first (unless someone has better ideas) and see how things go because it is a very high coordination cost to actually bribe miners via user agent (since you don’t know who will mine the block your transaction ends up in), and there is no common infrastructure/protocol for broadcasting different transactions to different miners.

The amount of computation to validate a transaction should be relatively constant, AIUI it just involves computing a verification of the signature (e.g. with ECDSA). Thus, the transaction reward to the validator and client could be fixed.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Validating a transaction requires executing it, just like the miner did.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK.


Now, as to the ratio of rewards to the client vs the full node, as an initial guess I would suggest something like 99:1. Why such a big difference? Well, I would guess that clients spend roughly 99 times more time on developing and maintaining the client than a full node user spends running and maintaining a full node. During a week there might be several full-time people working on the client, but a full node might only spend half an hour (or less) initially setting it up, plus running it, plus electricity and internet costs. Full node operators probably don't need to upgrade their computer (and buying a mining rig isn't worth it with Casper PoS planning on being implemented soon).

However, on further analysis, clients would also get the benefit of a large volume of rewards from every full node running the client, so to incentivise full node operation further, the ratio could change to say, 4:1, and of course could be adjusted with even further actual data analysis, rather than speculation.

And as for the absolute amounts, this will require data analysis, but clearly a full node should receive much less than a miner for processing a transaction in a block, since there are many transactions in a block, and there are many confirmations of a block. Data analysis could involve calculating the average number of transactions in a block and the average number of full nodes verifying transactions in a block. Macroeconomic analysis could entail the economic security benefit that full nodes provide to the network.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you elaborate? Why are these figures relevant?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Well, you need to think about the amounts that you would set as a reward, so rather than pulling figures out of the air, data analysis is necessary.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I know; I'm asking why the number of transactions in a block is relevant to deciding that figure.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah, you're right, it isn't relevant. The transaction fee can be calculated in the same way as gas costs are calculated for miners now.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I updated this with bc58bef.


Providing rewards to full node validators and to clients would increase the issuance. In order to maintain the issuance at current levels, this EIP could also reduce the mining reward (despite being reduced previously with the Byzantium release in October 2017 from 5 ETH to 3 ETH), but that would generate more controversy and discusssion.

Another potential point of controversy with rewarding clients and full nodes is that the work previously done by them has not been paid for until now (except of course by the Ethereum Foundation or Parity VCs funding the work), so existing clients may say that this EIP gives an advantage to new entrants. However, this doesn't hold up well, because existing clients have the first mover advantage, with much development to create useful and well-used products.

<!--The rationale fleshes out the specification by describing what motivated the design and why particular design decisions were made. It should describe alternate designs that were considered and related work, e.g. how the feature is supported in other languages. The rationale may also provide evidence of consensus within the community, and should discuss important objections or concerns raised during discussion.-->

<!--## Backwards Compatibility-->
<!--All EIPs that introduce backwards incompatibilities must include a section describing these incompatibilities and their severity. The EIP must explain how the author proposes to deal with these incompatibilities. EIP submissions without a sufficient backwards compatibility treatise may be rejected outright.-->

<!--## Test Cases-->
<!--Test cases for an implementation are mandatory for EIPs that are affecting consensus changes. Other EIPs can choose to include links to test cases if applicable.-->

## Implementation
The implementations must be completed before any EIP is given status "Final", but it need not be completed before the EIP is accepted. While there is merit to the approach of reaching consensus on the specification and rationale before writing code, the principle of "rough consensus and running code" is still useful when it comes to resolving many discussions of API details.

## Copyright
Copyright and related rights waived via [CC0](https://creativecommons.org/share-your-work/public-domain/cc0/).