ethereumjs-common
Version:
Resources common to all Ethereum implementations
136 lines (94 loc) • 4.26 kB
Markdown
# SYNOPSIS
[](https://travis-ci.org/ethereumjs/ethereumjs-common)
[](https://coveralls.io/r/ethereumjs/ethereumjs-common)
[](https://standardjs.com)
[]()
# ETHEREUMJS-COMMON
Resources common to all Ethereum implementations
Succeeds the old [ethereum/common](https://github.com/ethereumjs/common/) library.
# INSTALL
`npm install ethereumjs-common`
# USAGE
All parameters can be accessed through the ``Common`` class which can be required through the
main package and instantiated either with just the ``chain`` (e.g. 'mainnet') or the ``chain``
together with a specific ``hardfork`` provided.
Here are some simple usage examples:
```javascript
const Common = require('ethereumjs-common')
// Instantiate with only the chain
let c = new Common('ropsten')
c.param('gasPrices', 'ecAddGas', 'byzantium') // 500
// Chain and hardfork provided
c = new Common('ropsten', 'byzantium')
c.param('pow', 'minerReward') // 3000000000000000000
// Access genesis data for Ropsten network
c.genesis().hash // 0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d
// Get bootstrap nodes for chain/network
c.bootstrapNodes() // Array with current nodes
```
It is encouraged to also explicitly set the ``supportedHardforks`` if the initializing library
only supports a certain range of ``hardforks``:
```javascript
let c = new Common('ropsten', null, ['byzantium', 'constantinople'])
```
This will e.g. throw an error when a param is requested for an unsupported hardfork and
like this prevents unpredicted behaviour.
# API
See the API documentation for a full list of functions for accessing specific chain and
depending hardfork parameters. There are also additional helper functions like
``paramByBlock (topic, name, blockNumber)`` or ``hardforkIsActiveOnBlock (hardfork, blockNumber)``
to ease ``blockNumber`` based access to parameters.
- [API Docs](./docs/index.md)
# Hardfork Params
There are currently parameter changes by the following past and future hardfork by the
library supported:
- ``chainstart``
- ``homestead``
- ``dao``
- ``tangerineWhistle``
- ``spuriousDragon``
- ``byzantium``
- ``constantinople`` (Draft)
- ``hybridCasper`` (Draft)
For hardfork-specific parameter access with the ``param()`` and ``paramByBlock()`` functions
you can use the following ``topics``:
- ``gasConfig``
- ``gasPrices``
- ``vm``
- ``pow``
- ``casper``
- ``sharding``
See one of the hardfork files like ``byzantium.json`` in the ``hardforks`` directory
for an overview. For consistency, the chain start (``chainstart``) is considered an own
hardfork.
The hardfork-specific json files only contain the deltas from ``chainstart`` and
shouldn't be accessed directly until you have a specific reason for it.
Note: The list of ``gasPrices`` and gas price changes on hardforks is consistent
but not complete, so there are currently gas price values missing (PRs welcome!).
# Chain Params
Supported chains:
- ``mainnet``
- ``ropsten``
- ``rinkeby``
- ``kovan``
The following chain-specific parameters are provided:
- ``name``
- ``chainId``
- ``networkId``
- ``genesis`` block header values
- ``hardforks`` block numbers
- ``bootstrapNodes`` list
To get an overview of the different parameters have a look at one of the chain-specifc
files like ``mainnet.json`` in the ``chains`` directory.
# Bootstrap Nodes
There is no separate config file for bootstrap nodes like in the old ``ethereum-common`` library.
Instead use the ``common.bootstrapNodes()`` function to get nodes for a specific chain/network.
# Genesis States
Network-specific genesis files are located in the ``genesisStates`` folder.
Due to the large file sizes genesis states are not directly included in the ``index.js`` file
but have to be accessed directly, e.g.:
```
const mainnetGenesisState = require('ethereumjs-common/genesisStates/mainnet')
```
# LICENSE
[MIT](https://opensource.org/licenses/MIT)