Merge branch 'master' into codeSnippet
This commit is contained in:
commit
282b4ae0ea
|
@ -19,7 +19,7 @@ Please make sure your contributions adhere to our coding guidelines:
|
|||
|
||||
Pull requests generally need to be based on and opened against the `master` branch, unless by explicit agreement because the work is contributing to some more complex feature branch.
|
||||
|
||||
All pull requests will be reviewed according to the [Code Review guidelines](/docs/developers/geth-developer/code-review-guidelines.md).
|
||||
All pull requests will be reviewed according to the [Code Review guidelines](/docs/developers/geth-developer/code-review-guidelines).
|
||||
|
||||
We encourage an early pull request approach, meaning pull requests are created as early as possible even without the completed fix/feature. This will let core devs and other volunteers know you picked up an issue. These early PRs should indicate 'in progress' status.
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@ device and exposing an API that developers can use to build mobile apps on top o
|
|||
|
||||
#### Android Studio
|
||||
|
||||
Geth for Mobile bundles can be downloaded directly from [the download page](https://geth.ethereum.org/downloads/) and inserted into a project in Android Studio via `File -> New -> New module... -> Import .JAR/.AAR Package`.
|
||||
Geth for Mobile bundles can be downloaded directly from [the download page](/downloads) and inserted into a project in Android Studio via `File -> New -> New module... -> Import .JAR/.AAR Package`.
|
||||
|
||||
It is also necessary to configure `gradle` to link the mobile library bundle to the application. This can be done by adding a new entry to the `dependencies` section of the `build.gradle` script, pointing it to the module that was just added (named `geth` by default).
|
||||
|
||||
|
@ -47,13 +47,13 @@ Import "build/bin/Geth.framework" to use the library.
|
|||
|
||||
## Mobile API
|
||||
|
||||
Similarly to the reusable [Go libraries](/docs/developers/dapp-developer/native-accounts.md), the mobile wrappers focus on three main usage areas:
|
||||
Similarly to the reusable [Go libraries](/docs/developers/dapp-developer/native-accounts), the mobile wrappers focus on three main usage areas:
|
||||
|
||||
- Simplified client side account management
|
||||
- Remote node interfacing via different transports
|
||||
- Contract interactions through auto-generated bindings
|
||||
|
||||
The Geth mobile API is broadly equivalent to the [Go API](/docs/developers/dapp-developer/native-accounts.md). The source code can be found in the `mobile` section of Geth's
|
||||
The Geth mobile API is broadly equivalent to the [Go API](/docs/developers/dapp-developer/native-accounts). The source code can be found in the `mobile` section of Geth's
|
||||
[Github](https://github.com/ethereum/go-ethereum/tree/master/mobile).
|
||||
|
||||
## Mobile Account Management
|
||||
|
|
|
@ -7,7 +7,7 @@ Ethereum was originally conceptualized to be the base layer for [Web3](https://e
|
|||
|
||||
Before long, web-browser-like graphical interfaces (e.g. Mist) were created to extend clients, and client functions were built into websites built using the time-tested HTML/CSS/JS stack. However, to support the most diverse, complex dapps, developers require programmatic access to client functions through an API. This opens up client technologies as re-usable, composable units that can be applied in creative ways by a global community of developers.
|
||||
|
||||
To support this, Geth ships official Go packages that can be embedded into third party desktop and server applications. There is also a [mobile API](/docs/developers/dapp-developer/mobile.md) that can be used to embed Geth into mobile applications.
|
||||
To support this, Geth ships official Go packages that can be embedded into third party desktop and server applications. There is also a [mobile API](/docs/developers/dapp-developer/mobile) that can be used to embed Geth into mobile applications.
|
||||
|
||||
This page provides a high-level overview of the Go API.
|
||||
|
||||
|
@ -39,7 +39,7 @@ All the Geth packages can be downloaded using:
|
|||
$ go get -d github.com/ethereum/go-ethereum/...
|
||||
```
|
||||
|
||||
More Go API support for dapp developers can be found on the [Go Contract Bindings](/docs/developers/dapp-developer/native-bindings.md) and [Go Account Management](/docs/dapp/native-accounts) pages.
|
||||
More Go API support for dapp developers can be found on the [Go Contract Bindings](/docs/developers/dapp-developer/native-bindings) and [Go Account Management](/docs/dapp/native-accounts) pages.
|
||||
|
||||
## Tutorial
|
||||
|
||||
|
|
|
@ -304,14 +304,14 @@ The output is similar to:
|
|||
|
||||
## Other traces
|
||||
|
||||
This tutorial has focused on `debug_traceTransaction()` which reports information about individual transactions. There are also RPC endpoints that provide different information, including tracing the EVM execution within a block, between two blocks, for specific `eth_call`s or rejected blocks. The full list of trace functions can be explored in the [reference documentation](/docs/interacting_with_geth/RPC/ns-debug.md).
|
||||
This tutorial has focused on `debug_traceTransaction()` which reports information about individual transactions. There are also RPC endpoints that provide different information, including tracing the EVM execution within a block, between two blocks, for specific `eth_call`s or rejected blocks. The full list of trace functions can be explored in the [reference documentation](/docs/interacting_with_geth/RPC/ns-debug).
|
||||
|
||||
## Custom Go tracing
|
||||
|
||||
Custom tracers can also be made more performant by writing them in Go. The gain in performance mostly comes from the fact that Geth doesn't need
|
||||
to interpret JS code and can execute native functions. Geth comes with several built-in [native tracers](https://github.com/ethereum/go-ethereum/tree/master/eth/tracers/native) which can serve as examples. Please note that unlike JS tracers, Go tracing scripts cannot be simply passed as an argument to the API. They will need to be added to and compiled with the rest of the Geth source code.
|
||||
|
||||
In this section a simple native tracer that counts the number of opcodes will be covered. First follow the instructions to [clone and build](/docs/getting_started/Installing-Geth.md) Geth from source code. Next save the following snippet as a `.go` file and add it to `eth/tracers/native`:
|
||||
In this section a simple native tracer that counts the number of opcodes will be covered. First follow the instructions to [clone and build](/docs/getting_started/Installing-Geth) Geth from source code. Next save the following snippet as a `.go` file and add it to `eth/tracers/native`:
|
||||
|
||||
```go
|
||||
package native
|
||||
|
|
|
@ -38,7 +38,7 @@ This means there are limits on the transactions that can be traced imposed by th
|
|||
|
||||
_This image shows the state stored by each sync-mode - red indicates stored state. The full width of each line represents origin to present head_
|
||||
|
||||
More detailed information about syncing is available on the [sync modes page](/docs/fundamentals/sync-modes.md).
|
||||
More detailed information about syncing is available on the [sync modes page](/docs/fundamentals/sync-modes).
|
||||
|
||||
When a trace of a specific transaction is executed, the state is prepared by fetching the state of the parent block from the database. If it is not available, Geth will crawl backwards in time to find the next available state but only up to a limit defined in the `reexec` parameter which defaults to 128 blocks. If no state is available within the `reexec` window then the trace fails with `Error: required historical state unavailable` and the `reexec` parameter must be increased. If a valid state _is_ found in the `reexec` window, then Geth sequentially re-executes the transcations in each block between the last available state and the target block. The greater the value of `reexec` the longer the tracing will take because more blocks have to be re-executed to regenerate the target state.
|
||||
|
||||
|
@ -56,14 +56,14 @@ The tracing API accepts an optional `tracer` parameter that defines how the data
|
|||
functions that do some specific preprocessing on the trace data before it is returned.
|
||||
|
||||
More information about Geth's built-in tracers is available on the
|
||||
[built-in tracers](/docs/developers/evm-tracing/built-in-tracers.md)
|
||||
[built-in tracers](/docs/developers/evm-tracing/built-in-tracers)
|
||||
page.
|
||||
|
||||
### Custom tracers
|
||||
|
||||
In addition to built-in tracers, it is possible to provide custom code that hooks to events in the EVM to process and return data in a consumable format. Custom tracers can be written either in Javascript or Go. JS tracers are good for quick prototyping and experimentation as well as for less intensive applications. Go tracers are performant but require the tracer to be compiled together with the Geth source code. This means developers only have to gather the data they actually need, and do any processing at the source.
|
||||
|
||||
More information about custom tracers is available on the [custom tracers](/docs/developers/evm-tracing/custom-tracers.md) page.
|
||||
More information about custom tracers is available on the [custom tracers](/docs/developers/evm-tracing/custom-tracers) page.
|
||||
|
||||
## Summary
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ description: Entry point for developers working on Geth
|
|||
This document is the entry point for developers who wish to work on Geth. Developers are people who are interested to build, develop, debug, submit
|
||||
a bug report or pull request or otherwise contribute to the Geth source code.
|
||||
|
||||
Please see [Contributing](/docs/developers/contributing.md) for the Geth contribution guidelines.
|
||||
Please see [Contributing](/docs/developers/contributing) for the Geth contribution guidelines.
|
||||
|
||||
## Building and Testing
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@ This guide explains how to set up a private network of multiple Geth nodes. An E
|
|||
|
||||
## Prerequisites
|
||||
|
||||
To follow the tutorial on this page it is necessary to have a working Geth installation (instructions [here](/docs/getting_started/Installing-Geth.md)). It is also helpful to understand Geth fundamentals (see [Getting Started](/docs/getting_started/getting_started.md)).
|
||||
To follow the tutorial on this page it is necessary to have a working Geth installation (instructions [here](/docs/getting_started/Installing-Geth)). It is also helpful to understand Geth fundamentals (see [Getting Started](/docs/getting_started/getting_started)).
|
||||
|
||||
## Private Networks
|
||||
|
||||
|
@ -47,7 +47,7 @@ Every blockchain starts with a genesis block. When Geth is run with default sett
|
|||
|
||||
Below is an example of a `genesis.json` file for a PoA network. The `config` section ensures that all known protocol changes are available and configures the 'clique' engine to be used for consensus. Note that the initial signer set must be configured through the `extradata` field. This field is required for Clique to work.
|
||||
|
||||
The signer account keys can be generated using the [geth account](/docs/fundamentals/account-management.md) command (this command can be run multiple times to create more than one signer key).
|
||||
The signer account keys can be generated using the [geth account](/docs/fundamentals/account-management) command (this command can be run multiple times to create more than one signer key).
|
||||
|
||||
```shell
|
||||
geth account new --datadir data
|
||||
|
|
|
@ -20,7 +20,7 @@ RPC stands for Remote Procedure Call. RPC is a mode of communication between pro
|
|||
|
||||
## What is `jwtsecret`?
|
||||
|
||||
The `jwtsecret` file is required to create an authenticated connection between Geth and a consensus client. JWT stands for JSON Web Token - it is signed using a secret key. The signed token acts as a shared secret used to check that information is sent to and received from the correct peer. Read about how to create `jwt-secret` in Geth on our [Connecting to consensus clients](/docs/getting_started/consensus-clients.md) page.
|
||||
The `jwtsecret` file is required to create an authenticated connection between Geth and a consensus client. JWT stands for JSON Web Token - it is signed using a secret key. The signed token acts as a shared secret used to check that information is sent to and received from the correct peer. Read about how to create `jwt-secret` in Geth on our [Connecting to consensus clients](/docs/getting_started/consensus-clients) page.
|
||||
|
||||
## I noticed my peercount slowly decreasing, and now it is at 0. Restarting doesn't get any peers.
|
||||
|
||||
|
@ -32,7 +32,7 @@ sudo ntpdate -s time.nist.gov
|
|||
|
||||
## I would like to run multiple Geth instances but got the error "Fatal: blockchain db err: resource temporarily unavailable".
|
||||
|
||||
Geth uses a datadir to store the blockchain, accounts and some additional information. This directory cannot be shared between running instances. If you would like to run multiple instances follow [these](/docs/developers/geth-developer/Private-Network.md) instructions.
|
||||
Geth uses a datadir to store the blockchain, accounts and some additional information. This directory cannot be shared between running instances. If you would like to run multiple instances follow [these](/docs/developers/geth-developer/Private-Network) instructions.
|
||||
|
||||
## When I try to use the --password command line flag, I get the error "Could not decrypt key with given passphrase" but the password is correct. Why does this error appear?
|
||||
|
||||
|
@ -90,8 +90,8 @@ For step-by-step instruction for staking and spinning up a validating node, see
|
|||
|
||||
## How do I set up a consensus client/validator and connect it to Geth?
|
||||
|
||||
These docs mainly cover how to set up Geth, but since the switch to proof-of-stake it is also necessary to run a consensus client in order to track the head of the chain, and a validator in order to participate in proof-of-stake consensus. A validator node is also required to deposit 32 ETH into a specific smart contract. Our [consensus clients page](/docs/getting-started/consensus-clients.md) includes a general overview of how to connect a consensus client to Geth. For step by step instructions for specific clients, see their documentation and also see these helpful [online guides](https://github.com/SomerEsat/ethereum-staking-guides).
|
||||
These docs mainly cover how to set up Geth, but since the switch to proof-of-stake it is also necessary to run a consensus client in order to track the head of the chain, and a validator in order to participate in proof-of-stake consensus. A validator node is also required to deposit 32 ETH into a specific smart contract. Our [consensus clients page](/docs/getting-started/consensus-clients) includes a general overview of how to connect a consensus client to Geth. For step by step instructions for specific clients, see their documentation and also see these helpful [online guides](https://github.com/SomerEsat/ethereum-staking-guides).
|
||||
|
||||
## How do I update Geth?
|
||||
|
||||
Updating Geth to the latest version simply requires stopping the node, downloading the latest release and restarting the node. Precisely how to download the latest software depends on the installation method - please refer to our [Installation pages](/docs/install-and-build/Installing-Geth.md).
|
||||
Updating Geth to the latest version simply requires stopping the node, downloading the latest release and restarting the node. Precisely how to download the latest software depends on the installation method - please refer to our [Installation pages](/docs/install-and-build/Installing-Geth).
|
||||
|
|
|
@ -198,7 +198,7 @@ The above is often seen and misinterpreted as a problem with snap sync. In reali
|
|||
WARN [10-03|13:10:26.441] Post-merge network, but no beacon client seen. Please launch one to follow the chain!
|
||||
```
|
||||
|
||||
The above message is emitted when Geth is run without a consensus client on a post-merge proof-of-stake network. Since Ethereum moved to proof-of-stake Geth alone is not enough to follow the chain because the consensus logic is now implemented by a separate piece of software called a consensus client. This log message is displayed when the consensus client is missing. Read more about this on our [consensus clients](/docs/interface/consensus-clients.md) page.
|
||||
The above message is emitted when Geth is run without a consensus client on a post-merge proof-of-stake network. Since Ethereum moved to proof-of-stake Geth alone is not enough to follow the chain because the consensus logic is now implemented by a separate piece of software called a consensus client. This log message is displayed when the consensus client is missing. Read more about this on our [consensus clients](/docs/interface/consensus-clients) page.
|
||||
|
||||
```sh
|
||||
WARN [10-03 |13:10:26.499] Beacon client online, but never received consensus updates. Please ensure your beacon client is operational to follow the chain!
|
||||
|
|
|
@ -8,7 +8,7 @@ The default behaviour for Geth is to connect to Ethereum Mainnet. However, Geth
|
|||
- `--goerli`, Goerli proof-of-authority test network
|
||||
- `--sepolia` Sepolia proof-of-work test network
|
||||
|
||||
These testnets started as proof-of-work and proof-of-authority testnets, but they were transitioned to proof-of-stake in 2022 in preparation for doing the same to Ethereum Mainnet. This means that to run a node on Goerli or Sepolia it is now necessary to run a consensus client connected to Geth. This is also true for Ethereum Mainnet. **Geth does not work on proof-of-stake networks without a consensus client**! The remainder of this page will assume that Geth is connected to a consensus client that is synced to the desired network. For instructions on how to set up a consensus client please see the [Consensus Clients](/docs/interface/consensus-clients.md) page.
|
||||
These testnets started as proof-of-work and proof-of-authority testnets, but they were transitioned to proof-of-stake in 2022 in preparation for doing the same to Ethereum Mainnet. This means that to run a node on Goerli or Sepolia it is now necessary to run a consensus client connected to Geth. This is also true for Ethereum Mainnet. **Geth does not work on proof-of-stake networks without a consensus client**! The remainder of this page will assume that Geth is connected to a consensus client that is synced to the desired network. For instructions on how to set up a consensus client please see the [Consensus Clients](/docs/interface/consensus-clients) page.
|
||||
|
||||
**Note:** Network selection is not persisted from a config file. To connect to a pre-defined network you must always enable it explicitly, even when using the `--config` flag to load other configuration values. For example:
|
||||
|
||||
|
|
|
@ -41,7 +41,7 @@ It is also possible to create a partial/recent archive node where the node was s
|
|||
|
||||
A light node syncs very quickly and stores the bare minimum of blockchain data. Light nodes only process block headers, not entire blocks. This greatly reduces the computation time, storage and bandwidth required relative to a full node. This means light nodes are suitable for resource-constrained devices and can catch up to the head of the chain much faster when they are new or have been offline for a while. The trade-off is that light nodes rely heavily on data served by altruistic full nodes. A light client can be used to query data from Ethereum and submit transactions, acting as a locally-hosted Ethereum wallet. However, because they don't keep local copies of the Ethereum state, light nodes can't validate blocks in the same way as full nodes - they receive a proof from the full node and verify it against their local header chain. To start a node in light mode, pass `--syncmode light`. Be aware that full nodes serving light data are relative scarce so light nodes can struggle to find peers. **Light nodes are not currently working on proof-of-stake Ethereum**.
|
||||
|
||||
Read more about light nodes on our [LES page](/docs/interface/les.md).
|
||||
Read more about light nodes on our [LES page](/docs/interface/les).
|
||||
|
||||
The following diagram shows how Geth stores state data in the different sync modes:
|
||||
|
||||
|
@ -65,7 +65,7 @@ Read more in the [optimistic sync specs](https://github.com/ethereum/consensus-s
|
|||
|
||||
Alternatively, the consensus client can grab a checkpoint from a trusted source which provides a target state to sync up to, before switching to full sync and verifying each block in turn. In this mode, the node trusts that the checkpoint is correct. There are many possible sources for this checkpoint - the gold standard would be to get it out-of-band from another trusted friend, but it could also come from block explorers or [public APIs/web apps](https://eth-clients.github.io/checkpoint-sync-endpoints/).
|
||||
|
||||
Please see the pages on [syncing](/docs/interface/sync-modes.md) for more detail. For troubleshooting, please see the `Syncing` section on the [console log messages](/docs/interface/logs.md) page.
|
||||
Please see the pages on [syncing](/docs/interface/sync-modes) for more detail. For troubleshooting, please see the `Syncing` section on the [console log messages](/docs/interface/logs) page.
|
||||
|
||||
## Summary
|
||||
|
||||
|
|
|
@ -51,7 +51,7 @@ Validators are responsible for securing the Ethereum blockchain. Validators have
|
|||
|
||||
Geth cannot sync until the connected consensus client is synced. This is because Geth needs a target head to sync to. The fastest way to sync a consensus client is using checkpoint sync. To do this, a checkpoint or a url to a checkpoint provider can be provided to the consensus client on startup. There are several sources for these checkpoints. The ideal scenario is to get one from a trusted node operator, organized out-of-band, and verified against a third node or a block explorer or checkpoint provider. Some clients also allow checkpoint syncing by HTTP API access to an existing Beacon node. There are also several [public checkpoint sync endpoints](https://eth-clients.github.io/checkpoint-sync-endpoints/).
|
||||
|
||||
Please see the pages on [syncing](/docs/fundamentals/sync-modes.md) for more detail. For troubleshooting, please see the `Syncing` section on the [console log messages](/docs/fundamentals/logs.md) page.
|
||||
Please see the pages on [syncing](/docs/fundamentals/sync-modes) for more detail. For troubleshooting, please see the `Syncing` section on the [console log messages](/docs/fundamentals/logs) page.
|
||||
|
||||
## Using Geth
|
||||
|
||||
|
|
|
@ -3,9 +3,9 @@ title: Geth and Clef
|
|||
description: Guide to getting up and running with Geth using Clef as an external account management and signing tool.
|
||||
---
|
||||
|
||||
This page explains how to set up Geth and execute some basic tasks using the command line tools. In order to use Geth, the software must first be installed. There are several ways Geth can be installed depending on the operating system and the user's choice of installation method, for example using a package manager, container or building from source. Instructions for installing Geth can be found on the ["Install and Build"](/docs/getting_started/Installing-Geth.md) pages. Geth also needs to be connected to a consensus client in order to function as an Ethereum node. The tutorial on this page assumes Geth and a consensus client have been installed successfully and that a firewall has been configured to block external traffic to the JSON-RPC port `8545` see [Security](/content/docs/fundamentals/security.md).
|
||||
This page explains how to set up Geth and execute some basic tasks using the command line tools. In order to use Geth, the software must first be installed. There are several ways Geth can be installed depending on the operating system and the user's choice of installation method, for example using a package manager, container or building from source. Instructions for installing Geth can be found on the ["Install and Build"](/docs/getting_started/Installing-Geth) pages. Geth also needs to be connected to a consensus client in order to function as an Ethereum node. The tutorial on this page assumes Geth and a consensus client have been installed successfully and that a firewall has been configured to block external traffic to the JSON-RPC port `8545` see [Security](/content/docs/fundamentals/security).
|
||||
|
||||
This page provides step-by-step instructions covering the fundamentals of using Geth. This includes generating accounts, joining an Ethereum network, syncing the blockchain and sending ether between accounts. This tutorial uses [Clef](/docs/tools/Clef/Tutorial.md). Clef is an account management tool external to Geth itself that allows users to sign transactions. It is developed and maintained by the Geth team and is intended to eventually replace the account management tool built in to Geth.
|
||||
This page provides step-by-step instructions covering the fundamentals of using Geth. This includes generating accounts, joining an Ethereum network, syncing the blockchain and sending ether between accounts. This tutorial uses [Clef](/docs/tools/Clef/Tutorial). Clef is an account management tool external to Geth itself that allows users to sign transactions. It is developed and maintained by the Geth team and is intended to eventually replace the account management tool built in to Geth.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
|
@ -16,8 +16,8 @@ In order to get the most value from the tutorials on this page, the following sk
|
|||
- Basic knowledge about HTTP and JavaScript
|
||||
- Basic knowledge of node architecture and consensus clients
|
||||
|
||||
Users that need to revisit these fundamentals can find helpful resources relating to the command line [here](https://developer.mozilla.org/en-US/docs/Learn/Tools_and_testing/Understanding_client-side_tools/Command_line), Ethereum and its testnets [here](https://ethereum.org/en/developers/tutorials/), http [here](https://developer.mozilla.org/en-US/docs/Web/HTTP) and Javascript [here](https://www.javascript.com/learn). Information on node architecture can be found [here](/docs/fundamentals/node-architecture.md) and our guide for configuring Geth to connect to a
|
||||
consensus client is [here](/docs/getting_started/consensus-clients.md).
|
||||
Users that need to revisit these fundamentals can find helpful resources relating to the command line [here](https://developer.mozilla.org/en-US/docs/Learn/Tools_and_testing/Understanding_client-side_tools/Command_line), Ethereum and its testnets [here](https://ethereum.org/en/developers/tutorials/), http [here](https://developer.mozilla.org/en-US/docs/Web/HTTP) and Javascript [here](https://www.javascript.com/learn). Information on node architecture can be found [here](/docs/fundamentals/node-architecture) and our guide for configuring Geth to connect to a
|
||||
consensus client is [here](/docs/getting_started/consensus-clients).
|
||||
|
||||
{% include note.html content="If Geth was installed from source on Linux, `make` saves the binaries for Geth and the associated tools in `/build/bin`. To run these programs it is convenient to move them to the top level project directory (e.g. running `mv ./build/bin/* ./`) from `/go-ethereum`. Then `./` must be prepended to the commands in the code snippets in order to execute a particular program, e.g. `./geth` instead of simply `geth`. If the executables are not moved then either navigate to the `bin` directory to run them (e.g. `cd ./build/bin` and `./geth`) or provide their path (e.g. `./build/bin/geth`). These instructions can be ignored for other installations." %}
|
||||
|
||||
|
@ -428,4 +428,4 @@ This requires approval in Clef. Once the password for the sender account has bee
|
|||
|
||||
## Summary
|
||||
|
||||
This tutorial has demonstrated how to generate accounts using Clef, fund them with testnet ether and use those accounts to interact with Ethereum (Goerli) through a Geth node. Checking account balances, sending transactions and retrieving transaction details were explained using the web3.js library via the Geth console and using the JSON-RPC directly using Curl. For more detailed information about Clef, please see [the Clef docs](/docs/tools/Clef/Tutorial.md).
|
||||
This tutorial has demonstrated how to generate accounts using Clef, fund them with testnet ether and use those accounts to interact with Ethereum (Goerli) through a Geth node. Checking account balances, sending transactions and retrieving transaction details were explained using the web3.js library via the Geth console and using the JSON-RPC directly using Curl. For more detailed information about Clef, please see [the Clef docs](/docs/tools/Clef/Tutorial).
|
||||
|
|
|
@ -3,9 +3,9 @@ title: Getting Started with Geth
|
|||
description: Instructions for getting up and running with Geth
|
||||
---
|
||||
|
||||
This page explains how to set up Geth and execute some basic tasks using the command line tools. In order to use Geth, the software must first be installed. There are several ways Geth can be installed depending on the operating system and the user's choice of installation method, for example using a package manager, container or building from source. Instructions for installing Geth can be found on the ["Install and Build"](/docs/getting_started/Installing-Geth.md) pages. Geth also needs to be connected to a consensus client in order to function as an Ethereum node. The tutorial on this page assumes Geth and a consensus client have been installed successfully and that a firewall has been configured to block external traffic to the JSON-RPC port `8545` see [Security](/docs/fundamentals/security.md).
|
||||
This page explains how to set up Geth and execute some basic tasks using the command line tools. In order to use Geth, the software must first be installed. There are several ways Geth can be installed depending on the operating system and the user's choice of installation method, for example using a package manager, container or building from source. Instructions for installing Geth can be found on the ["Install and Build"](/docs/getting_started/Installing-Geth) pages. Geth also needs to be connected to a consensus client in order to function as an Ethereum node. The tutorial on this page assumes Geth and a consensus client have been installed successfully and that a firewall has been configured to block external traffic to the JSON-RPC port `8545` see [Security](/docs/fundamentals/security).
|
||||
|
||||
This page provides step-by-step instructions covering the fundamentals of using Geth. This includes generating accounts, joining an Ethereum network, syncing the blockchain and sending ether between accounts. This page uses Geth's built in account management tool. This is the simplest method for creating and accessing accounts in Geth, is sufficiently secure for many purposes and provides a good entry point for understanding some of the basic Geth workflows. However, Geth also comes bundled with an external signer and account management tool called [Clef](/tools/Clef/introduction). It is best practise to use Clef instead of Geth's built-in account management tools because Clef is decoupled from Geth and can be run in a separate, secure environment. This page should be used as an initial entry point into basic Geth and readers should plan to advance from this page to [Getting started with Geth and Clef](/docs/getting_started/getting-started-with-clef.md). Eventually, Clef is intended to replace Geth's built-in account management tools.
|
||||
This page provides step-by-step instructions covering the fundamentals of using Geth. This includes generating accounts, joining an Ethereum network, syncing the blockchain and sending ether between accounts. This page uses Geth's built in account management tool. This is the simplest method for creating and accessing accounts in Geth, is sufficiently secure for many purposes and provides a good entry point for understanding some of the basic Geth workflows. However, Geth also comes bundled with an external signer and account management tool called [Clef](/tools/Clef/introduction). It is best practise to use Clef instead of Geth's built-in account management tools because Clef is decoupled from Geth and can be run in a separate, secure environment. This page should be used as an initial entry point into basic Geth and readers should plan to advance from this page to [Getting started with Geth and Clef](/docs/getting_started/getting-started-with-clef). Eventually, Clef is intended to replace Geth's built-in account management tools.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
|
@ -17,8 +17,8 @@ necessary:
|
|||
- Basic knowledge about HTTP and JavaScript
|
||||
- Basic knowledge of node architecture and consensus clients
|
||||
|
||||
Users that need to revisit these fundamentals can find helpful resources relating to the command line [here](https://developer.mozilla.org/en-US/docs/Learn/Tools_and_testing/Understanding_client-side_tools/Command_line), Ethereum and its testnets [here](https://ethereum.org/en/developers/tutorials/), http [here](https://developer.mozilla.org/en-US/docs/Web/HTTP) and Javascript [here](https://www.javascript.com/learn). Information on node architecture can be found [here](/docs/fundamentals/node-architecture.md) and our guide for configuring Geth to connect to a
|
||||
consensus client is [here](/docs/getting_started/consensus-clients.md).
|
||||
Users that need to revisit these fundamentals can find helpful resources relating to the command line [here](https://developer.mozilla.org/en-US/docs/Learn/Tools_and_testing/Understanding_client-side_tools/Command_line), Ethereum and its testnets [here](https://ethereum.org/en/developers/tutorials/), http [here](https://developer.mozilla.org/en-US/docs/Web/HTTP) and Javascript [here](https://www.javascript.com/learn). Information on node architecture can be found [here](/docs/fundamentals/node-architecture) and our guide for configuring Geth to connect to a
|
||||
consensus client is [here](/docs/getting_started/consensus-clients).
|
||||
|
||||
{% include note.html content="If Geth was installed from source on Linux, `make` saves the binaries for Geth and the associated tools in `/build/bin`. To run these programs it is convenient to move them to the top level project directory (e.g. running `mv ./build/bin/* ./`) from `/go-ethereum`. Then `./` must be prepended to the commands in the code snippets in order to execute a particular program, e.g. `./geth` instead of simply `geth`. If the executables are not
|
||||
moved then either navigate to the `bin` directory to run them (e.g. `cd ./build/bin` and `./geth`) or provide their path (e.g. `./build/bin/geth`). These instructions can be ignored for other installations." %}
|
||||
|
@ -201,7 +201,7 @@ eth.sendTransaction({
|
|||
});
|
||||
```
|
||||
|
||||
This command will return an error message indicating that `authentication is needed: password or unlock`. This is a security feature that prevents unauthorized access to sensitive account operations. There are two ways to unlock the account. The first is to start Geth with the account permanently unlocked (by passing `--unlock <address>` at startup). This is not recommended because the account remains unlocked all the time Geth is running, creating a security weakness. Instead, it is better to temporarily unlock the account for the specific transaction using Clef. This requires Geth to be started with Clef as an external signer, and for Clef to know the location of the keystore (please see the [account management](/docs/fundamentals/account-management.md) or [Clef](/docs/tools/clef/Introduction.md) pages for setup details).
|
||||
This command will return an error message indicating that `authentication is needed: password or unlock`. This is a security feature that prevents unauthorized access to sensitive account operations. There are two ways to unlock the account. The first is to start Geth with the account permanently unlocked (by passing `--unlock <address>` at startup). This is not recommended because the account remains unlocked all the time Geth is running, creating a security weakness. Instead, it is better to temporarily unlock the account for the specific transaction using Clef. This requires Geth to be started with Clef as an external signer, and for Clef to know the location of the keystore (please see the [account management](/docs/fundamentals/account-management) or [Clef](/docs/tools/clef/Introduction) pages for setup details).
|
||||
|
||||
In the Javascript console, the transaction hash is displayed. This will be used in the next section to retrieve the transaction details.
|
||||
|
||||
|
|
|
@ -28,7 +28,7 @@ The previous command installs the latest stable release. Developers that wish to
|
|||
brew install ethereum --devel
|
||||
```
|
||||
|
||||
These commands install the core Geth software and the following developer tools: `clef`, `devp2p`, `abigen`, `bootnode`, `evm`, `rlpdump` and `puppeth`. The binaries for each of these tools are saved in `/usr/local/bin/`. The full list of command line options can be viewed [here](/docs/fundamentals/Command-Line-Options.md) or in the terminal by running `geth --help`.
|
||||
These commands install the core Geth software and the following developer tools: `clef`, `devp2p`, `abigen`, `bootnode`, `evm`, `rlpdump` and `puppeth`. The binaries for each of these tools are saved in `/usr/local/bin/`. The full list of command line options can be viewed [here](/docs/fundamentals/Command-Line-Options) or in the terminal by running `geth --help`.
|
||||
|
||||
Updating an existing Geth installation to the latest version can be achieved by stopping the node and running the following commands:
|
||||
|
||||
|
@ -64,7 +64,7 @@ sudo apt-get update
|
|||
sudo apt-get install ethereum-unstable
|
||||
```
|
||||
|
||||
These commands install the core Geth software and the following developer tools: `clef`, `devp2p`, `abigen`, `bootnode`, `evm`, `rlpdump` and `puppeth`. The binaries for each of these tools are saved in `/usr/local/bin/`. The full list of command line options can be viewed [here](/docs/fundamentals/Command-Line-Options.md) or in the terminal by running `geth --help`.
|
||||
These commands install the core Geth software and the following developer tools: `clef`, `devp2p`, `abigen`, `bootnode`, `evm`, `rlpdump` and `puppeth`. The binaries for each of these tools are saved in `/usr/local/bin/`. The full list of command line options can be viewed [here](/docs/fundamentals/Command-Line-Options) or in the terminal by running `geth --help`.
|
||||
|
||||
Updating an existing Geth installation to the latest version can be achieved by stopping the node and running the following commands:
|
||||
|
||||
|
@ -78,7 +78,7 @@ When the node is started again, Geth will automatically use all the data from th
|
|||
|
||||
### Windows
|
||||
|
||||
The easiest way to install Geth is to download a pre-compiled binary from the [downloads](/content/downloads.md) page. The page provides an installer as well as a zip file containing the Geth source code. The install wizard offers the user the option to install Geth, or Geth and the developer tools. The installer adds `geth` to the system's `PATH` automatically. The zip file contains the command `.exe` files that can be run from the command prompt. The full list of command line options can be viewed [here](/docs/fundamentals/Command-Line-Options.md) or in the terminal by running `geth --help`.
|
||||
The easiest way to install Geth is to download a pre-compiled binary from the [downloads](/downloads) page. The page provides an installer as well as a zip file containing the Geth source code. The install wizard offers the user the option to install Geth, or Geth and the developer tools. The installer adds `geth` to the system's `PATH` automatically. The zip file contains the command `.exe` files that can be run from the command prompt. The full list of command line options can be viewed [here](/docs/fundamentals/Command-Line-Options) or in the terminal by running `geth --help`.
|
||||
|
||||
Updating an existing Geth installation can be achieved by stopping the node, downloading and installing the latest version following the instructions above. When the node is started again, Geth will automatically use all the data from the previous version and sync the blocks that were missed while the node was offline.
|
||||
|
||||
|
@ -92,7 +92,7 @@ pkg install go-ethereum
|
|||
|
||||
These commands install the core Geth software and the following developer tools: `clef`, `devp2p`, `abigen`, `bootnode`, `evm`, `rlpdump` and `puppeth`.
|
||||
|
||||
The full list of command line options can be viewed [here](/docs/fundamentals/Command-Line-Options.md) or in the terminal by running `geth --help`.
|
||||
The full list of command line options can be viewed [here](/docs/fundamentals/Command-Line-Options) or in the terminal by running `geth --help`.
|
||||
|
||||
Updating an existing Geth installation to the latest version can be achieved by stopping the node and running the following commands:
|
||||
|
||||
|
@ -113,7 +113,7 @@ make install
|
|||
|
||||
These commands install the core Geth software and the following developer tools: `clef`, `devp2p`, `abigen`, `bootnode`, `evm`, `rlpdump` and `puppeth`. The binaries for each of these tools are saved in `/usr/local/bin/`.
|
||||
|
||||
The full list of command line options can be viewed [here](/docs/fundamentals/Command-Line-Options.md) or in the terminal by running `geth --help`.
|
||||
The full list of command line options can be viewed [here](/docs/fundamentals/Command-Line-Options) or in the terminal by running `geth --help`.
|
||||
|
||||
Updating an existing Geth installation can be achieved by stopping the node and running the following command:
|
||||
|
||||
|
@ -133,7 +133,7 @@ pacman -S geth
|
|||
|
||||
These commands install the core Geth software and the following developer tools: `clef`, `devp2p`, `abigen`, `bootnode`, `evm`, `rlpdump` and `puppeth`. The binaries for each of these tools are saved in `/usr/bin/`.
|
||||
|
||||
The full list of command line options can be viewed [here](/docs/fundamentals/Command-Line-Options.md) or in the terminal by running `geth --help`.
|
||||
The full list of command line options can be viewed [here](/docs/fundamentals/Command-Line-Options) or in the terminal by running `geth --help`.
|
||||
|
||||
Updating an existing Geth installation can be achieved by stopping the node and running the following command:
|
||||
|
||||
|
@ -155,7 +155,7 @@ The following standalone bundles are available:
|
|||
|
||||
Some archives contain only Geth, while other archives containing Geth and the various developer tools (`clef`, `devp2p`, `abigen`, `bootnode`, `evm`, `rlpdump` and `puppeth`). More information about these executables is available at the [`README`](https://github.com/ethereum/go-ethereum#executables).
|
||||
|
||||
The standalone bundles can be downloaded from the [Geth Downloads](content/downloads.md) page. To update an existing installation, download and manually install the latest version.
|
||||
The standalone bundles can be downloaded from the [Geth Downloads](/downloads) page. To update an existing installation, download and manually install the latest version.
|
||||
|
||||
## Docker container
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@ title: 'JavaScript Console 2: Contracts'
|
|||
description: Instructions for working with contracts in the Javascript console.
|
||||
---
|
||||
|
||||
The [Introduction to the Javascript console](/docs/interacting-with-geth/javascript-console.md) page outlined how a Javascript console can be attached to Geth to provide a more user-friendly interface to Ethereum than interacting directly with the JSON-RPC API. This page will describe how to deploy contracts and interact with contracts using the attached console. This page will assume the Javascript console is attached to a running Geth instance using IPC. Clef should be used to manage accounts.
|
||||
The [Introduction to the Javascript console](/docs/interacting-with-geth/javascript-console) page outlined how a Javascript console can be attached to Geth to provide a more user-friendly interface to Ethereum than interacting directly with the JSON-RPC API. This page will describe how to deploy contracts and interact with contracts using the attached console. This page will assume the Javascript console is attached to a running Geth instance using IPC. Clef should be used to manage accounts.
|
||||
|
||||
## Deploying a contract
|
||||
|
||||
|
@ -28,7 +28,7 @@ contract Storage{
|
|||
}
|
||||
```
|
||||
|
||||
The contract needs to be compiled before Geth can understand it. Compiling the contract creates an [Application Binary Interface](/docs/tools/abigen.md) and the contract bytecode. This requires a Solidity compiler (e.g. `solc`) to be installed on the local machine. Then, compile and save the ABI and bytecode to a new `build` subdirectory using the following terminal commands:
|
||||
The contract needs to be compiled before Geth can understand it. Compiling the contract creates an [Application Binary Interface](/docs/tools/abigen) and the contract bytecode. This requires a Solidity compiler (e.g. `solc`) to be installed on the local machine. Then, compile and save the ABI and bytecode to a new `build` subdirectory using the following terminal commands:
|
||||
|
||||
```sh
|
||||
cd ~/go-ethereum/storage-contract
|
||||
|
|
|
@ -3,7 +3,7 @@ title: GraphQL Server
|
|||
description: Documentation for Geth's GraphQL API
|
||||
---
|
||||
|
||||
In addition to the [JSON-RPC APIs](/docs/interacting_with_geth/RPC/server.md), Geth supports the GraphQL API as specified by [EIP-1767](https://eips.ethereum.org/EIPS/eip-1767). GraphQL lets you specify which fields of an objects you need as part of the query, eliminating the extra load on the client for filling in fields which are not needed. It also allows for combining several traditional JSON-RPC requests into one query which translates into less overhead and more performance.
|
||||
In addition to the [JSON-RPC APIs](/docs/interacting_with_geth/RPC/server), Geth supports the GraphQL API as specified by [EIP-1767](https://eips.ethereum.org/EIPS/eip-1767). GraphQL lets you specify which fields of an objects you need as part of the query, eliminating the extra load on the client for filling in fields which are not needed. It also allows for combining several traditional JSON-RPC requests into one query which translates into less overhead and more performance.
|
||||
|
||||
The GraphQL endpoint piggybacks on the HTTP transport used by JSON-RPC. Hence the relevant `--http` flags and the `--graphql` flag should be passed to Geth:
|
||||
|
||||
|
|
|
@ -116,7 +116,7 @@ to subscribe to events. HTTP is a familiar and idempotent transport that closes
|
|||
|
||||
## Engine-API
|
||||
|
||||
The Engine-API is a set of RPC methods that enable communication between Geth and the [consensus client](/docs/getting_started/consensus-clients.md). These are not designed to be exposed to the user - instead they are called automatically by the clients when they need to exchange information. The Engine API is enabled by default - the user is not required to pass any instruction to Geth to enable these methods.
|
||||
The Engine-API is a set of RPC methods that enable communication between Geth and the [consensus client](/docs/getting_started/consensus-clients). These are not designed to be exposed to the user - instead they are called automatically by the clients when they need to exchange information. The Engine API is enabled by default - the user is not required to pass any instruction to Geth to enable these methods.
|
||||
|
||||
Read more in the [Engine API spec](https://github.com/ethereum/execution-apis/blob/main/src/engine/specification.md).
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@ Documentation for the API methods in the `eth` namespace can be found on [ethere
|
|||
|
||||
### eth_subscribe, eth_unsubscribe
|
||||
|
||||
These methods are used for real-time events through subscriptions. See the [subscription documentation](/docs/interacting_with_geth/RPC/pubsub.md) for more information.
|
||||
These methods are used for real-time events through subscriptions. See the [subscription documentation](/docs/interacting_with_geth/RPC/pubsub) for more information.
|
||||
|
||||
### eth_call
|
||||
|
||||
|
@ -19,7 +19,7 @@ The method takes 3 parameters: an unsigned transaction object to execute in read
|
|||
|
||||
##### 1. `Object` - Transaction call object
|
||||
|
||||
The _transaction call object_ is mandatory. Please see [here](/docs/interacting_with_geth/RPC/objects.md) for details.
|
||||
The _transaction call object_ is mandatory. Please see [here](/docs/interacting_with_geth/RPC/objects) for details.
|
||||
|
||||
##### 2. `Quantity | Tag` - Block number or the string `latest` or `pending`
|
||||
|
||||
|
|
|
@ -209,7 +209,7 @@ See ecRecover to verify the signature.
|
|||
|
||||
## personal_signTransaction
|
||||
|
||||
SignTransaction will create a transaction from the given arguments and tries to sign it with the key associated with `tx.from`. If the given passwd isn't able to decrypt the key it fails. The transaction is returned in RLP-form, not broadcast to other nodes. The first argument is a [transaction object](/docs/interacting_with_geth/RPC/objects.md) and the second argument is the password, similar to `personal_sendTransaction`.
|
||||
SignTransaction will create a transaction from the given arguments and tries to sign it with the key associated with `tx.from`. If the given passwd isn't able to decrypt the key it fails. The transaction is returned in RLP-form, not broadcast to other nodes. The first argument is a [transaction object](/docs/interacting_with_geth/RPC/objects) and the second argument is the password, similar to `personal_sendTransaction`.
|
||||
|
||||
| Client | Method invocation |
|
||||
| :------ | ---------------------------------------------------------------- |
|
||||
|
|
|
@ -72,7 +72,7 @@ InfluxDB is running and configured to store metrics from Geth.
|
|||
## Preparing Geth {#preparing-geth}
|
||||
|
||||
After setting up database, metrics need to be enabled in Geth. Various options are available, as documented in the `METRICS AND STATS OPTIONS`
|
||||
in `geth --help` and in our [metrics page](/pages/docs/monitoring/metrics.md). In this case Geth will be configured to push data into InfluxDB. Basic setup specifies the endpoint where InfluxDB is reachable and authenticates the database.
|
||||
in `geth --help` and in our [metrics page](/docs/monitoring/metrics). In this case Geth will be configured to push data into InfluxDB. Basic setup specifies the endpoint where InfluxDB is reachable and authenticates the database.
|
||||
|
||||
```sh
|
||||
geth --metrics --metrics.influxdb --metrics.influxdb.endpoint "http://0.0.0.0:8086" --metrics.influxdb.username "geth" --metrics.influxdb.password "chosenpassword"
|
||||
|
|
|
@ -137,4 +137,4 @@ type Storage struct {
|
|||
|
||||
`Storage.go` contains all the bindings required to interact with `Storage.sol` from a Go application.
|
||||
|
||||
For instructions on how to deploy this contract to Ethereum from a Go native application read our [Go bindings page](/docs/developers/dapp-developer/native.md). To browse the Abigen source code visit the Geth [Github repository](https://github.com/ethereum/go-ethereum/tree/master/cmd/abigen).
|
||||
For instructions on how to deploy this contract to Ethereum from a Go native application read our [Go bindings page](/docs/developers/dapp-developer/native). To browse the Abigen source code visit the Geth [Github repository](https://github.com/ethereum/go-ethereum/tree/master/cmd/abigen).
|
||||
|
|
|
@ -25,7 +25,7 @@ The ruleset engine acts as a gatekeeper to the command line interface - it auto-
|
|||
|
||||
![Clef ruleset logic](/images/docs/clef_ruleset.png)
|
||||
|
||||
When Clef receives a request, the ruleset engine evaluates a Javascript file for each method defined in the internal [UI API docs](/docs/tools/Clef/apis.md). For example the code snippet below is an example ruleset that calls the function `ApproveTx`. The call to `ApproveTx` is invoking the `ui_approveTx` [JSON_RPC API endpoint](/docs/tools/Clef/apis.md). Every time an RPC method is invoked the Javascript code is executed in a freshly instantiated virtual machine.
|
||||
When Clef receives a request, the ruleset engine evaluates a Javascript file for each method defined in the internal [UI API docs](/docs/tools/Clef/apis). For example the code snippet below is an example ruleset that calls the function `ApproveTx`. The call to `ApproveTx` is invoking the `ui_approveTx` [JSON_RPC API endpoint](/docs/tools/Clef/apis). Every time an RPC method is invoked the Javascript code is executed in a freshly instantiated virtual machine.
|
||||
|
||||
```js
|
||||
function asBig(str) {
|
||||
|
|
|
@ -208,7 +208,7 @@ For example, well defined rules such as:
|
|||
|
||||
### Rule files
|
||||
|
||||
Rules are implemented as Javascript code in `js` files. The ruleset engine includes the same methods as the JSON_RPC defined in the [UI Protocol](/docs/_clef/datatypes.md). The following code snippet demonstrates a rule file that approves a transaction if it satisfies the following conditions:
|
||||
Rules are implemented as Javascript code in `js` files. The ruleset engine includes the same methods as the JSON_RPC defined in the [UI Protocol](/docs/_clef/datatypes). The following code snippet demonstrates a rule file that approves a transaction if it satisfies the following conditions:
|
||||
|
||||
- the recipient is `0xae967917c465db8578ca9024c205720b1a3651a9`
|
||||
- the value is less than 50000000000000000 wei (0.05 ETH)
|
||||
|
@ -568,7 +568,7 @@ cat ~/.clef/02f90c0603f4f2f60188/config.json
|
|||
This tutorial has bounced back and forth between demonstrating Clef as a standalone tool by making 'manual` JSON RPC requests from the terminal and integrating it as a backend singer for Geth. Using Clef for account management is considered best practise for Geth users because of the additional
|
||||
security benefits it offers over and above what it offered by Geth's built-in accounts module. Clef is far more flexible and composable than Geth's built-in account management tool and can interface directly with hardware wallets, while Apps and wallets can request signatures directly from Clef.
|
||||
|
||||
Ultimately, the goal is to deprecate Geth's account management tools completely and replace them with Clef. Until then, users are simply encouraged to choose to use Clef as an optional backend signer for Geth. In addition to the examples on this page, the [Getting started tutorial](/docs/_getting-started/index.md) also demonstrates Clef/Geth integration.
|
||||
Ultimately, the goal is to deprecate Geth's account management tools completely and replace them with Clef. Until then, users are simply encouraged to choose to use Clef as an optional backend signer for Geth. In addition to the examples on this page, the [Getting started tutorial](/docs/_getting-started/index) also demonstrates Clef/Geth integration.
|
||||
|
||||
## Summary
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@ For each account, replace NodeId with Node 1, 2, 3 etc. This saves the details a
|
|||
|
||||
Geth will prompt for a password. Once provided, the public address of the new account and the location of the secret key file is displayed to the terminal. It is a good idea to copy these details down in a text document because they will be needed later. This account generation step should be repeated until the number of accounts is at least equal to the desired number of nodes on the proof-of-authority network plus a few extra that will act as non-sealing nodes. Make sure the account passwords are also securely backed up for each new account.
|
||||
|
||||
See more on the [account management pages](/docs/fundamentals/account-management.md).
|
||||
See more on the [account management pages](/docs/fundamentals/account-management).
|
||||
|
||||
## Starting Puppeth
|
||||
|
||||
|
|
|
@ -0,0 +1,49 @@
|
|||
import Head from 'next/head';
|
||||
import { useRouter } from 'next/router';
|
||||
|
||||
import { SITE_NAME, SITE_URL } from '../../constants';
|
||||
|
||||
interface Props {
|
||||
title: string;
|
||||
description: string;
|
||||
image?: string;
|
||||
}
|
||||
|
||||
export const PageMetadata: React.FC<Props> = ({ title, description, image }) => {
|
||||
const router = useRouter();
|
||||
const url = `${SITE_URL}${router.asPath}`;
|
||||
const fullTitle = `${title} | ${SITE_NAME}`;
|
||||
const defaultOgImage = `${SITE_URL}/images/pages/gopher-downloads-front-light.svg`; // TODO: update with right image
|
||||
const ogImage = !image ? defaultOgImage : `${SITE_URL}${image}`;
|
||||
|
||||
return (
|
||||
<Head>
|
||||
<title>{fullTitle}</title>
|
||||
<meta name='title' content={fullTitle} />
|
||||
<meta name='description' content={description} />
|
||||
<meta name='application-name' content={SITE_NAME} />
|
||||
<meta name='image' content={ogImage} />
|
||||
{/* OpenGraph */}
|
||||
<meta property='og:title' content={fullTitle} />
|
||||
<meta property='og:description' content={description} />
|
||||
<meta property='og:type' content='website' />
|
||||
<meta property='og:site_name' content={SITE_NAME} />
|
||||
<meta property='og:url' content={url} />
|
||||
<meta property='og:image' content={ogImage} />
|
||||
<meta property='og:image:url' content={ogImage} />
|
||||
<meta property='og:image:secure_url' content={ogImage} />
|
||||
<meta property='og:image:alt' content={SITE_NAME} />
|
||||
<meta property='og:image:type' content='image/png' />
|
||||
{/* Twitter */}
|
||||
<meta name='twitter:card' content='summary_large_image' />
|
||||
<meta property='twitter:url' content={url} />
|
||||
<meta name='twitter:creator' content='@go_ethereum' />
|
||||
<meta name='twitter:site' content='@go_ethereum' />
|
||||
<meta name='twitter:title' content={fullTitle} />
|
||||
<meta name='twitter:description' content={description} />
|
||||
{/* patch to force a cache invalidation of twitter's card bot */}
|
||||
<meta name='twitter:image' content={`${ogImage}/#`} />
|
||||
<link rel='icon' href='/images/favicon.png' />
|
||||
</Head>
|
||||
);
|
||||
};
|
|
@ -1,3 +1,4 @@
|
|||
export * from './ButtonLinkSecondary';
|
||||
export * from './DataTable';
|
||||
export * from './Header';
|
||||
export * from './PageMetadata';
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { Flex, Link, Stack, Text } from '@chakra-ui/react';
|
||||
import { Center, Flex, Link, Text } from '@chakra-ui/react';
|
||||
import { FC } from 'react';
|
||||
import NextLink from 'next/link';
|
||||
|
||||
|
@ -29,7 +29,7 @@ export const Footer: FC = () => {
|
|||
}}
|
||||
borderColor='primary'
|
||||
>
|
||||
<Stack
|
||||
<Center
|
||||
flex={1}
|
||||
color='primary'
|
||||
_hover={{
|
||||
|
@ -37,18 +37,18 @@ export const Footer: FC = () => {
|
|||
bg: 'primary',
|
||||
color: 'bg !important'
|
||||
}}
|
||||
justifyContent='center'
|
||||
borderRight='2px solid'
|
||||
borderColor='primary'
|
||||
p={4}
|
||||
>
|
||||
<NextLink href={DOWNLOADS_PAGE} passHref>
|
||||
<Link _hover={{ textDecoration: 'none' }}>
|
||||
<Text textStyle='home-section-link-label'>DOWNLOADS</Text>
|
||||
<Text textStyle='footer-link-label'>DOWNLOADS</Text>
|
||||
</Link>
|
||||
</NextLink>
|
||||
</Stack>
|
||||
</Center>
|
||||
|
||||
<Stack
|
||||
<Center
|
||||
flex={1}
|
||||
color='primary'
|
||||
_hover={{
|
||||
|
@ -61,18 +61,18 @@ export const Footer: FC = () => {
|
|||
md: '2px solid'
|
||||
}}
|
||||
borderColor='primary'
|
||||
justifyContent='center'
|
||||
p={4}
|
||||
>
|
||||
<NextLink href={DOCS_PAGE} passHref>
|
||||
<Link _hover={{ textDecoration: 'none' }}>
|
||||
<Text textStyle='home-section-link-label'>DOCUMENTATION</Text>
|
||||
<Text textStyle='footer-link-label'>DOCUMENTATION</Text>
|
||||
</Link>
|
||||
</NextLink>
|
||||
</Stack>
|
||||
</Center>
|
||||
</Flex>
|
||||
|
||||
<Flex sx={{ mt: '0 !important' }}>
|
||||
<Stack
|
||||
<Center
|
||||
flex={1}
|
||||
data-group
|
||||
borderLeft={{
|
||||
|
@ -84,23 +84,21 @@ export const Footer: FC = () => {
|
|||
_hover={{
|
||||
bg: 'primary'
|
||||
}}
|
||||
alignItems='center'
|
||||
p={4}
|
||||
>
|
||||
<NextLink href={GETH_TWITTER_URL} passHref>
|
||||
<Link isExternal>
|
||||
<TwitterIcon w={8} height={8} _groupHover={{ color: 'bg' }} color='primary' />
|
||||
<TwitterIcon w={8} height='22px' _groupHover={{ color: 'bg' }} color='primary' />
|
||||
</Link>
|
||||
</NextLink>
|
||||
</Stack>
|
||||
</Center>
|
||||
|
||||
<Stack
|
||||
<Center
|
||||
data-group
|
||||
flex={1}
|
||||
_hover={{
|
||||
bg: 'primary'
|
||||
}}
|
||||
alignItems='center'
|
||||
borderWidth='2px'
|
||||
borderStyle='none solid'
|
||||
borderColor='primary'
|
||||
|
@ -108,33 +106,30 @@ export const Footer: FC = () => {
|
|||
>
|
||||
<NextLink href={GETH_DISCORD_URL} passHref>
|
||||
<Link isExternal>
|
||||
<DiscordIcon w={8} height={8} _groupHover={{ color: 'bg' }} color='primary' />
|
||||
<DiscordIcon w={8} height='22px' _groupHover={{ color: 'bg' }} color='primary' />
|
||||
</Link>
|
||||
</NextLink>
|
||||
</Stack>
|
||||
</Center>
|
||||
|
||||
<Stack
|
||||
<Center
|
||||
data-group
|
||||
flex={1}
|
||||
_hover={{
|
||||
bg: 'primary'
|
||||
}}
|
||||
alignItems='center'
|
||||
p={4}
|
||||
>
|
||||
<NextLink href={GETH_REPO_URL} passHref>
|
||||
<Link isExternal>
|
||||
<GitHubIcon w={7} height={7} _groupHover={{ color: 'bg' }} color='primary' />
|
||||
<GitHubIcon w={7} height='22px' _groupHover={{ color: 'bg' }} color='primary' />
|
||||
</Link>
|
||||
</NextLink>
|
||||
</Stack>
|
||||
</Center>
|
||||
</Flex>
|
||||
</Flex>
|
||||
|
||||
<Stack
|
||||
<Center
|
||||
p={4}
|
||||
textAlign='center'
|
||||
justifyContent='center'
|
||||
borderWidth='2px'
|
||||
borderStyle={{
|
||||
base: 'none solid solid solid',
|
||||
|
@ -144,7 +139,7 @@ export const Footer: FC = () => {
|
|||
flex={1}
|
||||
>
|
||||
<Text textStyle='footer-text'>{`© 2013–${new Date().getFullYear()}. The go-ethereum Authors.`}</Text>
|
||||
</Stack>
|
||||
</Center>
|
||||
</Flex>
|
||||
);
|
||||
};
|
||||
|
|
|
@ -76,6 +76,17 @@ export const DOWNLOAD_OPENPGP_DEVELOPER_HEADERS = [
|
|||
'Fingerprint'
|
||||
];
|
||||
|
||||
// Metadata
|
||||
export const SITE_URL = 'https://geth.ethereum.org';
|
||||
export const SITE_NAME = 'go-ethereum';
|
||||
export const METADATA = {
|
||||
HOME_TITLE: 'Home',
|
||||
HOME_DESCRIPTION:
|
||||
'Go-ethereum website, home for the official Golang execution layer implementation of the Ethereum protocol',
|
||||
DOWNLOADS_TITLE: 'Downloads',
|
||||
DOWNLOADS_DESCRIPTION: 'All Geth releases and builds, available for download'
|
||||
};
|
||||
|
||||
// GitHub urls
|
||||
export const LATEST_GETH_RELEASE_URL =
|
||||
'https://api.github.com/repos/ethereum/go-ethereum/releases/latest';
|
||||
|
|
|
@ -6,6 +6,7 @@ import { Heading } from '@chakra-ui/react';
|
|||
import MDXComponents from '../components/';
|
||||
import { ParsedUrlQuery } from 'querystring';
|
||||
import type { GetStaticPaths, GetStaticProps, NextPage } from 'next';
|
||||
import { PageMetadata } from '../components/UI';
|
||||
|
||||
const MATTER_OPTIONS = {
|
||||
engines: {
|
||||
|
@ -70,6 +71,11 @@ interface Props {
|
|||
const DocPage: NextPage<Props> = ({ frontmatter, content }) => {
|
||||
return (
|
||||
<>
|
||||
<PageMetadata
|
||||
title={frontmatter.title}
|
||||
description={frontmatter.description}
|
||||
/>
|
||||
|
||||
<main>
|
||||
<Heading as='h1'>{frontmatter.title}</Heading>
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@ import {
|
|||
DownloadsTable,
|
||||
SpecificVersionsSection
|
||||
} from '../components/UI/downloads';
|
||||
import { DataTable } from '../components/UI';
|
||||
import { DataTable, PageMetadata } from '../components/UI';
|
||||
|
||||
import {
|
||||
ALL_GETH_COMMITS_URL,
|
||||
|
@ -16,6 +16,7 @@ import {
|
|||
DOWNLOAD_OPENPGP_BUILD_HEADERS,
|
||||
DOWNLOAD_OPENPGP_DEVELOPER_HEADERS,
|
||||
GETH_REPO_URL,
|
||||
METADATA,
|
||||
LATEST_GETH_RELEASE_URL,
|
||||
LATEST_SOURCES_BASE_URL,
|
||||
LINUX_BINARY_BASE_URL,
|
||||
|
@ -112,7 +113,10 @@ const DownloadsPage: NextPage<Props> = ({ data }) => {
|
|||
|
||||
return (
|
||||
<>
|
||||
{/* TODO: add PageMetadata */}
|
||||
<PageMetadata
|
||||
title={METADATA.DOWNLOADS_TITLE}
|
||||
description={METADATA.DOWNLOADS_DESCRIPTION}
|
||||
/>
|
||||
|
||||
<main>
|
||||
<Stack spacing={4}>
|
||||
|
|
|
@ -10,6 +10,7 @@ import {
|
|||
WhatIsEthereum,
|
||||
WhyRunANode
|
||||
} from '../components/UI/homepage';
|
||||
import { PageMetadata } from '../components/UI';
|
||||
import { GopherHomeLinks } from '../components/UI/svgs';
|
||||
|
||||
import {
|
||||
|
@ -18,13 +19,17 @@ import {
|
|||
ETHEREUM_FOUNDATION_URL,
|
||||
ETHEREUM_ORG_URL,
|
||||
GETH_REPO_URL,
|
||||
GO_URL
|
||||
GO_URL,
|
||||
METADATA
|
||||
} from '../constants';
|
||||
|
||||
const HomePage: NextPage = ({}) => {
|
||||
return (
|
||||
<>
|
||||
{/* TODO: add PageMetadata */}
|
||||
<PageMetadata
|
||||
title={METADATA.HOME_TITLE}
|
||||
description={METADATA.HOME_DESCRIPTION}
|
||||
/>
|
||||
|
||||
<main>
|
||||
<Stack spacing={4}>
|
||||
|
|
|
@ -58,6 +58,13 @@ export const textStyles = {
|
|||
fontSize: '13px',
|
||||
fontFamily: '"Inter", sans-serif'
|
||||
},
|
||||
'footer-link-label': {
|
||||
fontFamily: '"JetBrains Mono", monospace',
|
||||
fontWeight: 700,
|
||||
textTransform: 'uppercase',
|
||||
lineHeight: '21.12px',
|
||||
letterSpacing: '2%'
|
||||
},
|
||||
'footer-text': {
|
||||
fontFamily: '"Inter", sans-serif',
|
||||
lineHeight: '22px',
|
||||
|
|
Loading…
Reference in New Issue