good morning!!!!

Skip to content
Snippets Groups Projects
README.md 12.7 KiB
Newer Older
G. Kay Lee's avatar
G. Kay Lee committed
## Go Ethereum
Jeffrey Wilcke's avatar
Jeffrey Wilcke committed

Official Golang implementation of the Ethereum protocol.
Jeffrey Wilcke's avatar
Jeffrey Wilcke committed

Jaynti Kanani's avatar
Jaynti Kanani committed
[![API Reference](https://camo.githubusercontent.com/915b7be44ada53c290eb157634330494ebe3e30a/68747470733a2f2f676f646f632e6f72672f6769746875622e636f6d2f676f6c616e672f6764646f3f7374617475732e737667)](https://godoc.org/github.com/maticnetwork/bor)
[![Go Report Card](https://goreportcard.com/badge/github.com/maticnetwork/bor)](https://goreportcard.com/report/github.com/maticnetwork/bor)
[![CircleCI](https://circleci.com/gh/maticnetwork/bor/tree/master.svg?style=shield)](https://circleci.com/gh/maticnetwork/bor/tree/master)
[![Discord](https://img.shields.io/badge/discord-join%20chat-blue.svg)](https://discord.gg/nthXNEv)
Jeffrey Wilcke's avatar
Jeffrey Wilcke committed

Jaynti Kanani's avatar
Jaynti Kanani committed
Automated builds are available for stable releases and the unstable master branch. Binary
archives are published at https://geth.ethereum.org/downloads/.
Jeffrey Wilcke's avatar
Jeffrey Wilcke committed

## Building the source
Jaynti Kanani's avatar
Jaynti Kanani committed
For prerequisites and detailed build instructions please read the [Installation Instructions](https://github.com/maticnetwork/bor/wiki/Building-Ethereum) on the wiki.
Jaynti Kanani's avatar
Jaynti Kanani committed
Building `bor` requires both a Go (version 1.10 or later) and a C compiler. You can install
Jaynti Kanani's avatar
Jaynti Kanani committed
them using your favourite package manager. Once the dependencies are installed, run
Jaynti Kanani's avatar
Jaynti Kanani committed
```shell
Jaynti Kanani's avatar
Jaynti Kanani committed
make bor
Jaynti Kanani's avatar
Jaynti Kanani committed
```
or, to build the full suite of utilities:

Jaynti Kanani's avatar
Jaynti Kanani committed
```shell
make all
```
## Executables
Jeffrey Wilcke's avatar
Jeffrey Wilcke committed

Jaynti Kanani's avatar
Jaynti Kanani committed
The go-ethereum project comes with several wrappers/executables found in the `cmd`
directory.
Jeffrey Wilcke's avatar
Jeffrey Wilcke committed

Jaynti Kanani's avatar
Jaynti Kanani committed
|    Command    | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| :-----------: | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|   **`bor`**   | Our main Ethereum CLI client. It is the entry point into the Ethereum network (main-, test- or private net), capable of running as a full node (default), archive node (retaining all historical state) or a light node (retrieving data live). It can be used by other processes as a gateway into the Ethereum network via JSON RPC endpoints exposed on top of HTTP, WebSocket and/or IPC transports. `geth --help` and the [CLI Wiki page](https://github.com/maticnetwork/bor/wiki/Command-Line-Options) for command line options.          |
Jaynti Kanani's avatar
Jaynti Kanani committed
|   `abigen`    | Source code generator to convert Ethereum contract definitions into easy to use, compile-time type-safe Go packages. It operates on plain [Ethereum contract ABIs](https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI) with expanded functionality if the contract bytecode is also available. However, it also accepts Solidity source files, making development much more streamlined. Please see our [Native DApps](https://github.com/maticnetwork/bor/wiki/Native-DApps:-Go-bindings-to-Ethereum-contracts) wiki page for details. |
Jaynti Kanani's avatar
Jaynti Kanani committed
|  `bootnode`   | Stripped down version of our Ethereum client implementation that only takes part in the network node discovery protocol, but does not run any of the higher level application protocols. It can be used as a lightweight bootstrap node to aid in finding peers in private networks.                                                                                                                                                                                                                                                             |
|     `evm`     | Developer utility version of the EVM (Ethereum Virtual Machine) that is capable of running bytecode snippets within a configurable environment and execution mode. Its purpose is to allow isolated, fine-grained debugging of EVM opcodes (e.g. `evm --code 60ff60ff --debug`).                                                                                                                                                                                                                                                                 |
| `gethrpctest` | Developer utility tool to support our [ethereum/rpc-test](https://github.com/ethereum/rpc-tests) test suite which validates baseline conformity to the [Ethereum JSON RPC](https://github.com/ethereum/wiki/wiki/JSON-RPC) specs. Please see the [test suite's readme](https://github.com/ethereum/rpc-tests/blob/master/README.md) for details.                                                                                                                                                                                                 |
|   `rlpdump`   | Developer utility tool to convert binary RLP ([Recursive Length Prefix](https://github.com/ethereum/wiki/wiki/RLP)) dumps (data encoding used by the Ethereum protocol both network as well as consensus wise) to user-friendlier hierarchical representation (e.g. `rlpdump --hex CE0183FFFFFFC4C304050583616263`).                                                                                                                                                                                                                             |
|   `puppeth`   | a CLI wizard that aids in creating a new Ethereum network.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
Jaynti Kanani's avatar
Jaynti Kanani committed
## Running `bor`

Going through all the possible command line flags is out of scope here (please consult our
Jaynti Kanani's avatar
Jaynti Kanani committed
[CLI Wiki page](https://github.com/ethereum/go-ethereum/wiki/Command-Line-Options)),
Jaynti Kanani's avatar
Jaynti Kanani committed
but we've enumerated a few common parameter combos to get you up to speed quickly
Jaynti Kanani's avatar
Jaynti Kanani committed
on how you can run your own `bor` instance.

### Full node on the main Ethereum network

Jaynti Kanani's avatar
Jaynti Kanani committed
By far the most common scenario is people wanting to simply interact with the Ethereum
network: create accounts; transfer funds; deploy and interact with contracts. For this
particular use-case the user doesn't care about years-old historical data, so we can
fast-sync quickly to the current state of the network. To do so:
Jaynti Kanani's avatar
Jaynti Kanani committed
```shell
Jaynti Kanani's avatar
Jaynti Kanani committed

- Start `geth` in fast sync mode (default, can be changed with the `--syncmode` flag),
  causing it to download more data in exchange for avoiding processing the entire history
  of the Ethereum network, which is very CPU intensive.
Jaynti Kanani's avatar
Jaynti Kanani committed
- Start up `geth`'s built-in interactive [JavaScript console](https://github.com/ethereum/go-ethereum/wiki/JavaScript-Console),
Jaynti Kanani's avatar
Jaynti Kanani committed
  (via the trailing `console` subcommand) through which you can invoke all official [`web3` methods](https://github.com/ethereum/wiki/wiki/JavaScript-API)
Jaynti Kanani's avatar
Jaynti Kanani committed
  as well as `geth`'s own [management APIs](https://github.com/ethereum/go-ethereum/wiki/Management-APIs).
Jaynti Kanani's avatar
Jaynti Kanani committed
  This tool is optional and if you leave it out you can always attach to an already running
  `geth` instance with `geth attach`.
### A Full node on the Ethereum test network
Jaynti Kanani's avatar
Jaynti Kanani committed
Transitioning towards developers, if you'd like to play around with creating Ethereum
contracts, you almost certainly would like to do that without any real money involved until
you get the hang of the entire system. In other words, instead of attaching to the main
network, you want to join the **test** network with your node, which is fully equivalent to
the main network, but with play-Ether only.
Jaynti Kanani's avatar
Jaynti Kanani committed
```shell
Jaynti Kanani's avatar
Jaynti Kanani committed
The `console` subcommand has the exact same meaning as above and they are equally
useful on the testnet too. Please see above for their explanations if you've skipped here.

Specifying the `--testnet` flag, however, will reconfigure your `geth` instance a bit:

Jaynti Kanani's avatar
Jaynti Kanani committed
- Instead of using the default data directory (`~/.ethereum` on Linux for example), `geth`
  will nest itself one level deeper into a `testnet` subfolder (`~/.ethereum/testnet` on
  Linux). Note, on OSX and Linux this also means that attaching to a running testnet node
  requires the use of a custom endpoint since `geth attach` will try to attach to a
  production node endpoint by default. E.g.
  `geth attach <datadir>/testnet/bor.ipc`. Windows users are not affected by
  this.
- Instead of connecting the main Ethereum network, the client will connect to the test
  network, which uses different P2P bootnodes, different network IDs and genesis states.

_Note: Although there are some internal protective measures to prevent transactions from
Jaynti Kanani's avatar
Jaynti Kanani committed
crossing over between the main network and test network, you should make sure to always
use separate accounts for play-money and real-money. Unless you manually move
accounts, `geth` will by default correctly separate the two networks and will not make any
Jaynti Kanani's avatar
Jaynti Kanani committed
accounts available between them._
Jaynti Kanani's avatar
Jaynti Kanani committed
As an alternative to passing the numerous flags to the `bor` binary, you can also pass a
Jaynti Kanani's avatar
Jaynti Kanani committed
configuration file via:
Jaynti Kanani's avatar
Jaynti Kanani committed
```shell
Jaynti Kanani's avatar
Jaynti Kanani committed
$ bor --config /path/to/your_config.toml
Jaynti Kanani's avatar
Jaynti Kanani committed
To get an idea how the file should look like you can use the `dumpconfig` subcommand to
export your existing configuration:
Jaynti Kanani's avatar
Jaynti Kanani committed
```shell
Jaynti Kanani's avatar
Jaynti Kanani committed
$ bor --your-favourite-flags dumpconfig
Jaynti Kanani's avatar
Jaynti Kanani committed
_Note: This works only with `geth` v1.6.0 and above._
Jaynti Kanani's avatar
Jaynti Kanani committed
### Programmatically interfacing `bor` nodes
Jaynti Kanani's avatar
Jaynti Kanani committed
As a developer, sooner rather than later you'll want to start interacting with `geth` and the
Ethereum network via your own programs and not manually through the console. To aid
this, `geth` has built-in support for a JSON-RPC based APIs ([standard APIs](https://github.com/ethereum/wiki/wiki/JSON-RPC)
Jaynti Kanani's avatar
Jaynti Kanani committed
and [`bor` specific APIs](https://github.com/maticnetwork/bor/wiki/Management-APIs)).
Jaynti Kanani's avatar
Jaynti Kanani committed
These can be exposed via HTTP, WebSockets and IPC (UNIX sockets on UNIX based
platforms, and named pipes on Windows).
Jaynti Kanani's avatar
Jaynti Kanani committed
The IPC interface is enabled by default and exposes all the APIs supported by `geth`,
whereas the HTTP and WS interfaces need to manually be enabled and only expose a
subset of APIs due to security reasons. These can be turned on/off and configured as
you'd expect.

HTTP based JSON-RPC API options:

Jaynti Kanani's avatar
Jaynti Kanani committed
- `--rpc` Enable the HTTP-RPC server
- `--rpcaddr` HTTP-RPC server listening interface (default: `localhost`)
- `--rpcport` HTTP-RPC server listening port (default: `8545`)
- `--rpcapi` API's offered over the HTTP-RPC interface (default: `eth,net,web3`)
- `--rpccorsdomain` Comma separated list of domains from which to accept cross origin requests (browser enforced)
- `--ws` Enable the WS-RPC server
- `--wsaddr` WS-RPC server listening interface (default: `localhost`)
- `--wsport` WS-RPC server listening port (default: `8546`)
- `--wsapi` API's offered over the WS-RPC interface (default: `eth,net,web3`)
- `--wsorigins` Origins from which to accept websockets requests
- `--ipcdisable` Disable the IPC-RPC server
- `--ipcapi` API's offered over the IPC-RPC interface (default: `admin,debug,eth,miner,net,personal,shh,txpool,web3`)
- `--ipcpath` Filename for IPC socket/pipe within the datadir (explicit paths escape it)
Jaynti Kanani's avatar
Jaynti Kanani committed
You'll need to use your own programming environments' capabilities (libraries, tools, etc) to
connect via HTTP, WS or IPC to a `geth` node configured with the above flags and you'll
need to speak [JSON-RPC](https://www.jsonrpc.org/specification) on all transports. You
can reuse the same connection for multiple requests!
Jaynti Kanani's avatar
Jaynti Kanani committed
**Note: Please understand the security implications of opening up an HTTP/WS based
transport before doing so! Hackers on the internet are actively trying to subvert
Ethereum nodes with exposed APIs! Further, all browser tabs can access locally
running web servers, so malicious web pages could try to subvert locally available
APIs!**
Jaynti Kanani's avatar
Jaynti Kanani committed
The bor library (i.e. all code outside of the `cmd` directory) is licensed under the
Jaynti Kanani's avatar
Jaynti Kanani committed
[GNU Lesser General Public License v3.0](https://www.gnu.org/licenses/lgpl-3.0.en.html),
also included in our repository in the `COPYING.LESSER` file.
Jaynti Kanani's avatar
Jaynti Kanani committed
The bor binaries (i.e. all code inside of the `cmd` directory) is licensed under the
Jaynti Kanani's avatar
Jaynti Kanani committed
[GNU General Public License v3.0](https://www.gnu.org/licenses/gpl-3.0.en.html), also
included in our repository in the `COPYING` file.