Skip to content

Commit

Permalink
🔨
Browse files Browse the repository at this point in the history
  • Loading branch information
meowsbits committed Jan 19, 2021
1 parent ed9c666 commit 6031fbc
Showing 1 changed file with 36 additions and 30 deletions.
66 changes: 36 additions & 30 deletions docs/core/core-geth.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
# Core-Geth Features

While CoreGeth inherits from and exposes complete feature parity with Ethereum Foundation's <sup>:registered:</sup> [ethereum/go-ethereum](https://github.com/ethereum/go-ethereum),
there are quite few things that make CoreGeth unique.
# Core-Geth

CoreGeth is sponsored by and maintained with the leadership of [ETC Labs](https://etclabs.org) with an obvious core intention of stewarding
the Ethereum Classic opinion that the reversion of transactions in inconvenient situations shouldn't be permissible.

But the spirit of the project intends to reach beyond Ethereum and Ethereum Classic, and indeed to reimagine an EVM node software that
approaches the EVM-based protocols as technology that can -- and should -- be generalizable.

### EVMCv6 Support
While CoreGeth inherits from and exposes complete feature parity with Ethereum Foundation's <sup>:registered:</sup> [ethereum/go-ethereum](https://github.com/ethereum/go-ethereum),
there are quite few things that make CoreGeth unique.

- EVMCv6, opens possibility for use with external EVMs (including EWASM).
## Additional Features

CoreGeth maintainers are [regular](https://github.com/ethereum/go-ethereum/pulls?q=author%3Ameowsbits) [contributors](https://github.com/ethereum/go-ethereum/pulls?q=author%3Aziogaschr+) [upstream](https://github.com/ethereum/go-ethereum/pulls?q=author%3Aiquidus+), but not all CoreGeth features are practicable or accepted. The following categories document features specific to CoreGeth that ethereum/go-ethereum can't, or won't, implement.

### Extended RPC API

Expand All @@ -22,20 +22,22 @@ approaches the EVM-based protocols as technology that can -- and should -- be ge

#### Comprehensive RPC API Service Discovery

CoreGeth features a synthetic build/+runtime service discovery API, allowing you to get a [well structured](TODO)
CoreGeth features a synthetic build/+runtime service discovery API, allowing you to get a [well structured](https://open-rpc.org/)
description of _all_ available methods, their parameters, and results. Please see the `rpc.discover` bullet

### Support for Remote Ancient Chaindata
### Extended CLI

- Remote freezer, store your `ancient` data on Amazon S3 or Storj.
- `--eth.protocols` configures `eth/x` protocol prioritization, eg. `65,64,63`.

### Extended CLI Tools
### EVMCv6 Support

- `--eth.protocols` configures `eth/x` protocol prioritization, eg. `65,64,63`.
- EVMCv6, opens possibility for use with external EVMs (including EWASM).

### Developer Features
### Remote Ancient Chaindata

#### Tools, command, and options
- Remote freezer, store your `ancient` data on Amazon S3 or Storj.

### Developer Features: Tools

- A developer mode `--dev.pow` able to mock Proof-of-Work block schemas and production at representative Poisson intervals.
+ `--dev.poisson` configures Poisson intervals for block emission
Expand All @@ -44,8 +46,24 @@ description of _all_ available methods, their parameters, and results. Please se
- `copydb` will default to a sane fallback value if no parameter is passed for the second `<ancient/path>` argument.
- The `faucet` command support an `--attach` option allowing the program to reference an already-running node instance
(assuming it has an available RPC API) instead of restricting the faucet to a dedicated light client. Likewise, a `--syncmode=[full|fast|light]` option is provided for networks where _LES_ support may be lacking.

#### Descriptive, flexible code

### Risk Management

- [Public](https://ci.etccore.in/blue/organizations/jenkins/core-geth-regression/activity) chaindata [regression testing](https://github.com/etclabscore/core-geth/blob/master/Jenkinsfile) run at each push to `master`.

### Extended _Improvement Proposal_ Support (EIP, ECIP, *IP)

- Myriad additional ECIP support:
+ ECBP1100 (aka MESS)
+ ECIP1099 (DAG growth limit)
+ ECIP1014 (defuse difficulty bomb), etc. :wink:
- Out-of-the-box support for Ethereum Classic, EtherSocial, Social, and MIX networks.

## Divergent Design

How CoreGeth is built differently than ethereum/go-ethereum.

### Developer Features: Code

One of CoreGeth's most significant divergences from ethereum/go-ethereum at the code level is a reimagining (read: _massive overhaul_) of the `ChainConfig` data type and its methods.

Expand All @@ -59,27 +77,15 @@ if config.IsByzantium(blockNumber) {
}
```

This, for the uniitiated developer, raises some questions:
This, for the uninitiated developer, raises some questions:
- What's Byzantium?
- Which of the nine distinct Byzantium upgrades is this implementing?
- Does feature `Byzantium.X` depend on also having `Byzantium.Y` activated?
- Does feature `Byzantium.X` depend on also having `Byzantium.Y` activated?

The developers of ethereum/go-ethereum have made this architectural decision because ethereum/go-ethereum is _only designed
and intended_ to support one chain: _Ethereum_. From this perspective, configurability presents a risk rather than a desirable feature.

### (Public) Risk Management

- Public chaindata regression testing run at each push to master.

### Extended *IP Support

- Myriad additional ECIP support:
+ ECBP1100 (aka MESS)
+ ECIP1099 (DAG growth limit)
+ ECIP1014 (defuse difficulty bomb), etc. :wink:
- Out-of-the-box support for Ethereum Classic, EtherSocial, Social, and MIX networks.

### Limitations
## Limitations

Things ethereum/go-ethereum can or will do that CoreGeth won't, or doesn't by default.

Expand Down

0 comments on commit 6031fbc

Please sign in to comment.