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

Make even #3

Merged
merged 63 commits into from
May 22, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
6fd365f
Automatically merged updates to draft EIP(s) 2477 (#2529)
fulldecent Feb 23, 2020
db7ad22
EIP-777: typo fix (#2513)
Revinand Mar 1, 2020
cc415d5
Automatically merged updates to draft EIP(s) 1753 (#2548)
bitcoinbrisbane Mar 3, 2020
bd912a4
add EIP-2544 (#2544)
0age Mar 3, 2020
1f03748
Automatically merged updates to draft EIP(s) 1753 (#2549)
bitcoinbrisbane Mar 3, 2020
6cd0dcc
Moving EIP 3 to Abandoned status (#2546)
axic Mar 4, 2020
8e37d01
Update eip-1057.md (#2556)
gcolvin Mar 10, 2020
51fb7a1
Replace the Difficulty Bomb with a Difficulty Freeze (#2515)
MadeofTin Mar 12, 2020
c595ee1
Enslogin (#2525)
Amxx Mar 12, 2020
01e6360
Automatically merged updates to draft EIP(s) 1559 (#2505)
i-norden Mar 12, 2020
82b9971
Automatically merged updates to draft EIP(s) (#2562)
Mar 17, 2020
91e78cd
Automatically merged updates to draft EIP(s) 1193 (#2563)
Evalir Mar 20, 2020
9e3ab0a
EIP 2542 - add TXGASLIMIT, CALLGASLIMIT opcodes (#2542)
forshtat Mar 23, 2020
bbb8d7f
Automatically merged updates to draft EIP(s) 1753 (#2568)
bitcoinbrisbane Mar 27, 2020
f08828f
ERC: Singleton Factory (#2470)
3esmit Mar 30, 2020
afd9838
Remove duplicate frontmatter in EIP-2544 (#2580)
samajammin Mar 31, 2020
251ebda
Automatically merged updates to draft EIP(s) 1102, 1474 (#2578)
rekmarks Mar 31, 2020
155b84f
EIP-2565: Repricing of the EIP-198 ModExp precompile (#2565)
ineffectualproperty Apr 1, 2020
98d31ca
EIP-721 hot-fix - broken links (#2555)
Draichi Apr 2, 2020
8203a9d
eip-2315: updated spec and examples (#2576)
holiman Apr 3, 2020
e9a35bf
Automatically merged updates to draft EIP(s) 1193 (#2577)
rekmarks Apr 3, 2020
3eead84
Automatically merged updates to draft EIP(s) 1193 (#2586)
rekmarks Apr 7, 2020
6c35d9c
Automatically merged updates to draft EIP(s) 1193 (#2588)
rekmarks Apr 8, 2020
de80b5b
Automatically merged updates to draft EIP(s) 2315 (#2591)
holiman Apr 10, 2020
3e960e5
Fix opcodes (#2592)
holiman Apr 10, 2020
89e373d
Automatically merged updates to draft EIP(s) 1193 (#2590)
rekmarks Apr 10, 2020
fcab0ca
EIP-2315: updates (#2599)
holiman Apr 16, 2020
e294fa3
Automatically merged updates to draft EIP(s) 2378 (#2601)
timbeiko Apr 17, 2020
0cc11aa
Automatically merged updates to draft EIP(s) 2378 (#2606)
timbeiko Apr 17, 2020
347bd8b
Abandon EIP-1706 (#2543)
forshtat Apr 21, 2020
bf6fc79
Added Andrea Lanfranchi as an author (#2509)
MadeofTin Apr 23, 2020
db950a5
Automatically merged updates to draft EIP(s) 1193 (#2611)
ryanio Apr 23, 2020
5cf7132
1193: Move to Last Call (#2610)
rekmarks Apr 24, 2020
4c1bf4d
ERC-1363 Payable Token (#2496)
vittominacori Apr 26, 2020
0f81e2a
EIP-1193: Remove web3 from example (#2618)
rekmarks Apr 27, 2020
f345bee
Automatically merged updates to draft EIP(s) 1193 (#2620)
rekmarks Apr 27, 2020
600db11
Automatically merged updates to draft EIP(s) 695 (#2625)
sorpaas May 4, 2020
8cf7467
Automatically merged updates to draft EIP(s) 695 (#2627)
rekmarks May 6, 2020
365c609
Upgrade to https (#2626)
fulldecent May 6, 2020
a9fbf2e
Automatically merged updates to draft EIP(s) 2335 (#2621)
kirk-baird May 6, 2020
4e1a2cc
EIP-2458: Updates, updated-by header (#2458)
edsonayllon May 7, 2020
47c73b8
Automatically merged updates to draft EIP(s) 2333 (#2638)
kirk-baird May 11, 2020
77adcb4
Automatically merged updates to draft EIP(s) 1193 (#2634)
rekmarks May 11, 2020
a09a65c
add Michael and Greg changes (#2641)
gcolvin May 12, 2020
bbed824
Automatically merged updates to draft EIP(s) 695 (#2629)
rekmarks May 12, 2020
14c3b08
Automatically merged updates to draft EIP(s) 695 (#2642)
rekmarks May 13, 2020
3f63990
Automatically merged updates to draft EIP(s) 695 (#2643)
rekmarks May 14, 2020
4b5142a
enter only via jumpsub
gcolvin May 15, 2020
8ee164d
Automatically merged updates to draft EIP(s) 2315 (#2646)
gcolvin May 15, 2020
9ba544f
EIP 2481: Adding request IDs to ETH protocol request and response ob…
cburgdorf May 15, 2020
c1008fe
Automatically merged updates to draft EIP(s) 2070 (#2589)
poojaranjan May 15, 2020
c0a8689
Use https (and not http) where possible (#2639)
fulldecent May 15, 2020
1542a29
Merge branch 'master' of https://github.com/ethereum/EIPs
gcolvin May 16, 2020
5439294
readiness tables (#2651)
gcolvin May 16, 2020
45fdd2c
Progpow (#2652)
gcolvin May 16, 2020
9279959
Progpow (#2653)
gcolvin May 17, 2020
e7aea28
Remove review period after final EIP-2384 (#2491)
nicksavers May 17, 2020
791c245
Remove review period after final EIP-2387 (#2490)
nicksavers May 17, 2020
425d7db
Fixes to EIP-2070 (#2650)
axic May 17, 2020
6611c59
Automatically merged updates to draft EIP(s) 2315 (#2655)
gcolvin May 17, 2020
77cab3e
Automatically merged updates to draft EIP(s) 2315 (#2656)
holiman May 19, 2020
0553d9e
Automatically merged updates to draft EIP(s) 2315 (#2659)
gcolvin May 19, 2020
2661ee5
Automatically merged updates to draft EIP(s) 2315 (#2662)
gcolvin May 19, 2020
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
122 changes: 112 additions & 10 deletions EIPS/eip-1057.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
---
eip: 1057
title: ProgPoW, a Programmatic Proof-of-Work
author: IfDefElse <ifdefelse@protonmail.com>
author: Greg Colvin <greg@colvin.org>, Andrea Lanfranchi (@AndreaLanfranchi), Michael Carter (@bitsbetrippin), IfDefElse <ifdefelse@protonmail.com>
discussions-to: https://ethereum-magicians.org/t/eip-progpow-a-programmatic-proof-of-work/272
status: Draft
status: Accepted
type: Standards Track
category: Core
created: 2018-05-02
Expand All @@ -13,15 +13,45 @@ created: 2018-05-02

A new Proof-of-Work algorithm to replace Ethash that utilizes almost all parts of commodity GPUs.

We **Do Not** recommend that this Proposal be deployed at this time. Rather it is being offered in the spirit of [Ben DiFrancesco's compromise](https://ethereum-magicians.org/t/a-progpow-compromise-pre-proposal/4057) which for our purposes we state simply as,
* This Proposal **is not** being proposed for deployment in any planned hardfork.
* This Proposal should be fully implemented and tested across major clients.
* Clients implementing this Proposal should be deployed and maintained on a testnet.

This leaves open the possibility and threat of future deployment.

## Abstract

ProgPoW is a proof-of-work algorithm designed to close the efficiency gap available to specialized ASICs. It utilizes almost all parts of commodity hardware (GPUs), and comes pre-tuned for the most common hardware utilized in the Ethereum network.
ProgPoW is a proof-of-work algorithm designed to close the efficiency gap available to specialized ASICs. It utilizes almost all parts of commodity hardware (GPUs), and comes pre-tuned for the most common hardware utilized in the Ethereum network.

This document presents an overview of the algorithm and examines what it means to be “ASIC-resistant.” Next, we compare existing PoW designs by analyzing how each algorithm executes in hardware. Finally, we present the detailed implementation by walking through the code.

## Motivation

Ever since the first bitcoin mining ASIC was released, many new Proof of Work algorithms have been created with the intention of being “ASIC-resistant”. The goal of “ASIC-resistance” is to resist the centralization of PoW mining power such that these coins couldn’t be so easily manipulated by a few players.
Ever since the first bitcoin mining ASIC was released, many new Proof of Work algorithms have been created with the intention of being “ASIC-resistant”. The goal of “ASIC-resistance” is to resist the centralization of PoW mining power such that these coins couldn’t be so easily manipulated by a few players.

This document presents an overview of the algorithm and examines what it means to be “ASIC-resistant.” Next, we compare existing PoW designs by analyzing how each algorithm executes in hardware. Finally, we present the detailed implementation by walking through the code.
Ethereum's approach is to incentivize a geographically-distributed community of miners with a low barrier to entry on commodity hardware. As stated in the Yellow Paper:

> 11.5. Mining Proof-of-Work. The mining proof-ofwork (PoW) exists as a cryptographically secure nonce that proves beyond reasonable doubt that a particular amount of computation has been expended in the determination of some token value n. It is utilised to enforce the blockchain security by giving meaning and credence to the notion of difficulty (and, by extension, total difficulty). However, since mining new blocks comes with an attached reward, the proof-of-work not only functions as a method of securing confidence that the blockchain will remain canonical into the future, but also as a wealth distribution mechanism.

> For both reasons, there are two important goals of the proof-of-work function; firstly, it should be as accessible as possible to as many people as possible. The requirement of, or reward from, specialised and uncommon hardware should be minimised. This makes the distribution model as open as possible, and, ideally, makes the act of mining a simple swap from electricity to Ether at roughly the same rate for anyone around the world.

> Secondly, it should not be possible to make super-linear profits, and especially not so with a high initial barrier. Such a mechanism allows a well-funded adversary to gain a troublesome amount of the network’s total mining power and as such gives them a super-linear reward (thus skewing distribution in their favour) as well as reducing the network security...

> ... While ASICs exist for a proof-of-work function, both goals are
placed in jeopardy.

It is from these premises that Ethash was designed.

> Two directions exist for ASIC resistance; firstly make it sequential memory-hard, i.e. engineer the function such that the determination of the nonce requires a lot of memory and bandwidth such that the memory cannot be used in parallel to discover multiple nonces simultaneously. The second is to make the type of computation it would need to do general-purpose; the meaning of “specialised hardware” for a general-purpose task set is, naturally, general purpose hardware and as such commodity desktop computers are likely to be pretty close to “specialised hardware” for the task. For Ethereum 1.0 we have chosen the first path.

5 years of experience with the Ethereum blockchain have demonstrated the success of our approach. This success cannot be taken for granted.
* 11 years of experience with PoW Blockchains have shown a centralization in hardware development, resulting in a [few companies](https://www.asicminervalue.com/) controlling the lifecycle of new hardware, limited distribution and multiple incidents of leverage & contention ((citations))
* new ASICs for Ethash are providing higher efficiency than GPUs ((cite device specs))
* the existing Ethereum network is now circa 40% [secured by E3 devices](https://www.overleaf.com/project/5e222c2cac8911000178b239).
* new devices are coming online with ((cite even better specs))

ProgPow restores Ethash' ASIC-resistance by extending Etash with a GPU-specific approach to the second path.

### ProgPoW Overview
The design goal of ProgPoW is to have the algorithm’s requirements match what is available on commodity GPUs: If the algorithm were to be implemented on a custom ASIC there should be little opportunity for efficiency gains compared to a commodity GPU.
Expand All @@ -32,6 +62,7 @@ The main elements of the algorithm are:
* Adds a random sequence of math in the main loop.
* Adds reads from a small, low-latency cache that supports random addresses.
* Increases the DRAM read from 128 bytes to 256 bytes.
* ((cite adjustments from 0.9.1 -> 0.9.2 -> 0.9.3 -> 0.9.4))

The random sequence changes every `PROGPOW_PERIOD` (about 2 to 12 minutes depending on the configured value). When mining source code is generated for the random sequence and compiled on the host CPU. The GPU will execute the compiled code where what math to perform and what mix state to use are already resolved.

Expand All @@ -45,9 +76,9 @@ These would result in minimal, roughly 1.1-1.2x, efficiency gains. This is much
### Rationale for PoW on Commodity Hardware
With the growth of large mining pools, the control of hashing power has been delegated to the top few pools to provide a steadier economic return for small miners. While some have made the argument that large centralized pools defeats the purpose of “ASIC resistance,” it’s important to note that ASIC based coins are even more centralized for several reasons.

1. No natural distribution: There isn’t an economic purpose for ultra-specialized hardware outside of mining and thus no reason for most people to have it.
2. No reserve group: Thus, there’s no reserve pool of hardware or reserve pool of interested parties to jump in when coin price is volatile and attractive for manipulation.
3. High barrier to entry: Initial miners are those rich enough to invest capital and ecological resources on the unknown experiment a new coin may be. Thus, initial coin distribution through mining will be very limited causing centralized economic bias.
1. No natural distribution: There isn’t an economic purpose for ultra-specialized hardware outside of mining and thus no reason for most people to have it.
2. No reserve group: Thus, there’s no reserve pool of hardware or reserve pool of interested parties to jump in when coin price is volatile and attractive for manipulation.
3. High barrier to entry: Initial miners are those rich enough to invest capital and ecological resources on the unknown experiment a new coin may be. Thus, initial coin distribution through mining will be very limited causing centralized economic bias.
4. Delegated centralization vs implementation centralization: While pool centralization is delegated, hardware monoculture is not: only the limiter buyers of this hardware can participate so there isn’t even the possibility of divesting control on short notice.
5. No obvious decentralization of control even with decentralized mining: Once large custom ASIC makers get into the game, designing back-doored hardware is trivial. ASIC makers have no incentive to be transparent or fair in market participation.

Expand Down Expand Up @@ -381,7 +412,7 @@ void progPowLoop(
if (i < PROGPOW_CNT_MATH)
{
// Random Math
// Generate 2 unique sources
// Generate 2 unique sources
int src_rnd = kiss99(prog_rnd) % (PROGPOW_REGS * (PROGPOW_REGS-1));
int src1 = src_rnd % PROGPOW_REGS; // 0 <= src1 < PROGPOW_REGS
int src2 = src_rnd / PROGPOW_REGS; // 0 <= src2 < PROGPOW_REGS - 1
Expand Down Expand Up @@ -463,6 +494,8 @@ hash32_t progPowHash(

## Rationale

((T.B.D. Review audits))

ProgPoW utilizes almost all parts of a commodity GPU, excluding:

* The graphics pipeline (displays, geometry engines, texturing, etc);
Expand Down Expand Up @@ -492,9 +525,78 @@ Additional test vectors can be found [in the test vectors file](../assets/eip-10
### progpow 0.9.3
[Machine-readable test vectors](https://github.com/ethereum/EIPs/blob/ad4e73f239d53d72a21cfd8fdc89dc81eb9d2688/assets/eip-1057/test-vectors-0.9.3.json)

Additional test vectors can be found [in the test vectors file](../assets/eip-1057/test-vectors.md#progpowhash).
### progpow 0.9.4
[Machine-readable test vectors](https://github.com/ethereum/EIPs/blob/ad4e73f239d53d72a21cfd8fdc89dc81eb9d2688/assets/eip-1057/test-vectors-0.9.4.json) ((T.B.D.))

## Implementation

The reference ProgPoW mining implementation located at [ProgPOW](https://github.com/ifdefelse/ProgPOW) is a derivative of ethminer so retains the GPL license.
We **Do Not** recommend that this Proposal be deployed at this time. Rather it is being offered in the spirit of [Ben DiFrancesco's compromise](https://ethereum-magicians.org/t/a-progpow-compromise-pre-proposal/4057) which for our purposes we state simply as,
* This Proposal **is not** being proposed for deployment in any planned hardfork.
* This Proposal should be fully implemented and tested across major clients.
* Clients implementing this Proposal should be deployed and maintained on a testnet.

This leaves open the possibility and threat of future deployment. Some of the authors are engaged in work to [track what devices are mining our network](https://www.overleaf.com/project/5e222c2cac8911000178b239). These and other efforts can provide information relevant to possible deployment.

### Clients

| | Languages | 0.9.3 | 0.9.4
--- | --- | --- | ---
Aleth | C++ | |
Besu | Java | Ready |
EthereumJ | Java | Ready | Developing
EthereumJS | Javascript | Ready | Developing
Etherwall | C++ | |
Geth | Go | Ready | Developing
_IfThenElse_ | C++ | Ready | Ready
Mana | Elixer | |
Nethermind | C# | Ready |
OpenEtheum | Rust | Ready |
Trinity | Python | Ready | Developing

### Exchanges

| | Support | 0.9.4 | 0.9.4
--- | --- | --- | ---
Biki | Yes | Ready |
Bilaxi | Yes | Ready |
Binance | Yes | Ready |
BitMart | Yes | Ready |
BitZ | Yes | Ready |
Coinbase | Yes | Ready |
DCcoin | Yes | Ready |
Digfinex | Yes | Ready |
Etherflyer | Yes | Ready |
Flatbtc | Yes | Ready |
Folgory | Yes | Ready |
HitBTC | Yes | Ready |
Hotbit | Yes | Ready |
Lbank | Yes | Ready |
MXC | Yes | Ready |
Nobi | Yes | Ready |

### Pools

| | Support | 0.9.4 | 0.9.4
--- | --- | --- | ---
2Miners | Yes | Ready |
antpool | Yes | Ready |
beepool | Yes | Ready |
Ethermine | Yes | Ready |
F2Pool | Yes | Ready |
firepool | Yes | Ready |
gpumine | Yes | Ready |
hiveon | Yes | Ready |
huobipool | Yes | Ready |
matppool | Yes | Ready |
miningpoolhub | Yes | Ready |
Noanopool | Yes | Ready |
pool.btc.com | Yes | Ready |
poolin | Yes | Ready |
Sparkpool | Yes | Ready |
Spiderpool | Yes | Ready |
xnpopol | Yes | Ready |

## License and Copyright

The ProgPoW algorithm and this specification are a new work. Copyright and related rights are waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
Expand Down
2 changes: 1 addition & 1 deletion EIPS/eip-1077.md
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,7 @@ TBD

One initial implementation of such a contract can be found at [Status.im account-contracts repository](https://github.com/status-im/account-contracts/blob/develop/contracts/account/AccountGasAbstract.sol)

Other version is implemented as Gnosis Safe variant in: http://github.com/status-im/safe-contracts
Other version is implemented as Gnosis Safe variant in: https://github.com/status-im/safe-contracts

### Similar implementations

Expand Down
2 changes: 1 addition & 1 deletion EIPS/eip-1102.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
eip: 1102
title: Opt-in account exposure
author: Paul Bouchon <mail@bitpshr.net>
author: Paul Bouchon <mail@bitpshr.net>, Erik Marks <rekmarks@protonmail.com>
discussions-to: https://ethereum-magicians.org/t/eip-1102-opt-in-provider-access/414
status: Draft
type: Standards Track
Expand Down
2 changes: 1 addition & 1 deletion EIPS/eip-1123.md
Original file line number Diff line number Diff line change
Expand Up @@ -1840,7 +1840,7 @@ widespread implementation in commonly-used development tools.
The following tools are known to have begun or are nearing completion of
a supporting implementation.

- [Truffle](http://trufflesuite.com/)
- [Truffle](https://trufflesuite.com/)

- [Populus](https://populus.readthedocs.io/en/latest/)

Expand Down
Loading