Skip to content
This repository was archived by the owner on Feb 16, 2024. It is now read-only.

Commit 1c24878

Browse files
committed
modify README
1 parent 978a27f commit 1c24878

File tree

1 file changed

+36
-14
lines changed

1 file changed

+36
-14
lines changed

README.md

Lines changed: 36 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,27 +17,45 @@ All DAG-based algorithms only implement a light DAG, which is sufficient for ver
1717
but not full nodes or miners. For the DAG-based algorithms and verthash, data is cached in `~/.powcache`.
1818
Ethash will generally be between 40-80Mb per epoch (and generally 3 caches are stored), but verthash
1919
requires a strict 1.2Gb, so be careful if you're using verthash in memory. At the time of writing, running
20-
`make test` will throw about 2.2Gb of data into `~/.powcache` due to the variety and breadth of tests.
20+
`make test` will throw about 3.3Gb of data into `~/.powcache` due to the variety and breadth of tests.
2121

22-
# Supported Algorithms
22+
# Algorithms
2323

2424
The estimated hash times are meant to be relative since
2525
it can vary across different hardware. All tests were run
2626
with the respective DAG already calculated. In almost all cases hashing
2727
functions are the bottleneck (which is how PoW algorithms
2828
are designed to behave).
2929

30-
| Algorithm | DAG | Estimated Hash Time |
31-
| ----------- | ----------- | --------------------------|
32-
| Ethash | yes | 4ms |
33-
| Etchash | yes | 4ms |
34-
| Kawpow | yes | 17ms |
35-
| Firopow | yes | 18ms |
36-
| Verthash | yes | 8ms disk, 270μs in memory |
37-
| Equihash | no | 30μs |
38-
| Autolykos2 | no | 580μs |
39-
40-
30+
| Algorithm | DAG | Supported |
31+
| ------------- | ----------- | ----------
32+
| Ethash | yes | yes
33+
| Etchash | yes | yes
34+
| Kawpow | yes | yes
35+
| Firopow | yes | yes
36+
| Octopus | yes | yes
37+
| Verthash | yes | yes
38+
| Equihash | no | yes
39+
| Autolykos2 | no | yes
40+
| Cuckoo Cycle | no | yes
41+
| Eaglesong | no | yes
42+
| BeamHashIII | no | no
43+
44+
# Things to Note
45+
46+
- Cuckoo Cycle is built specifically for Aeternity. There is a modification of the `sipnode` function in the current version
47+
of tromp's cuckoo algorithms that Aeternity does not use (a Nicehash dev gives more details [here](https://forum.aeternity.com/t/support-aeternity-stratum-implementation/3140/5)). It wouldn't be hard to implement other Cuckoo Cycle algorithms (cuckatoo, cuckaroo),
48+
there just isn't really a need at this point since Grin is fairly annoying. BlockCypher implements the other algorithms [here](https://github.com/blockcypher/libgrin/tree/master/core/pow).
49+
- Equihash is built around ZCash's variation of Equihash. The original implementation is left for compatibility reasons, hopefully one day
50+
I'll find a way to unify the two (though this may not be possible in a reasonable way).
51+
- All non-DAG algorithms are less organized than I would like, they'll probably be overhauled at some point for a more coherent general standard.
52+
- All testing is done on linux, windows support is hazy at best.
53+
- The library assumes the host architecture is little-endian, I'm fairly confident big-endian architectures will not function properly.
54+
- The base ProgPow implementation ("ProgPow094") exists in the `internal/progpow` package.
55+
- One day I'll implement BeamHashIII, it is just a slight modification of Equihash (I think 150_5?). Other than that, there are no outstanding
56+
algorithms that are planned - there is a [cryptonight](https://github.com/Equim-chan/cryptonight) and a
57+
[randomx](https://git.dero.io/DERO_Foundation/RandomX) implementation in Go, though these aren't really of interest. Of course, this can
58+
change if new algorithms become popular.
4159

4260
# Roadmap
4361

@@ -50,7 +68,7 @@ as-needed basis.
5068

5169
Currently, though powkit is used in production internally, it probably isn't a good idea to use yourself. The
5270
API is still in flux and each minor version will probably be breaking. Once we do a v1.0.0 release, the structure
53-
will probably be pretty set in stone. Hopefully that will happen in the next few months.
71+
will probably be pretty set in stone.
5472

5573
# References
5674

@@ -62,4 +80,8 @@ will probably be pretty set in stone. Hopefully that will happen in the next few
6280
- [Firo: firo](https://github.com/firoorg/firo/tree/master/src/crypto/progpow)
6381
- [Ergo: ergo](https://github.com/ergoplatform/ergo/blob/0af9dd9d8846d672c1e2a77f8ab29963fa5acd1e/src/main/scala/org/ergoplatform/mining/AutolykosPowScheme.scala)
6482
- [leifjacky: erg-gominer-demo](https://github.com/leifjacky/erg-gominer-demo)
83+
- [tromp: cuckoo](https://github.com/tromp/cuckoo)
84+
- [Nervos Network: rfcs (eaglesong)](https://github.com/nervosnetwork/rfcs/tree/master/rfcs/0010-eaglesong)
85+
- [Conflux Chain: conflux-rust (Octopus)](https://github.com/Conflux-Chain/conflux-rust/tree/8fdc0773ccc447f5f6af142e84ae507284f0e411/core/src/pow)
86+
6587

0 commit comments

Comments
 (0)