Official Go implementation of the Ethereum protocol

Overview

Go Ethereum

Official Golang implementation of the Ethereum protocol.

API Reference Go Report Card Travis Discord

Automated builds are available for stable releases and the unstable master branch. Binary archives are published at https://geth.ethereum.org/downloads/.

Building the source

For prerequisites and detailed build instructions please read the Installation Instructions.

Building geth requires both a Go (version 1.14 or later) and a C compiler. You can install them using your favourite package manager. Once the dependencies are installed, run

make geth

or, to build the full suite of utilities:

make all

Executables

The go-ethereum project comes with several wrappers/executables found in the cmd directory.

Command Description
geth 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 page for command line options.
clef Stand-alone signing tool, which can be used as a backend signer for geth.
devp2p Utilities to interact with nodes on the networking layer, without running a full blockchain.
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 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 page for details.
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 run).
rlpdump Developer utility tool to convert binary RLP (Recursive Length Prefix) 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.

Running geth

Going through all the possible command line flags is out of scope here (please consult our CLI Wiki page), but we've enumerated a few common parameter combos to get you up to speed quickly on how you can run your own geth instance.

Full node on the main Ethereum network

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 sync quickly to the current state of the network. To do so:

$ geth console

This command will:

  • Start geth in snap 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.
  • Start up geth's built-in interactive JavaScript console, (via the trailing console subcommand) through which you can interact using web3 methods (note: the web3 version bundled within geth is very old, and not up to date with official docs), as well as geth's own management APIs. 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 Görli test network

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.

$ geth --goerli console

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 --goerli flag, however, will reconfigure your geth instance a bit:

  • Instead of connecting the main Ethereum network, the client will connect to the Görli test network, which uses different P2P bootnodes, different network IDs and genesis states.
  • Instead of using the default data directory (~/.ethereum on Linux for example), geth will nest itself one level deeper into a goerli subfolder (~/.ethereum/goerli 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>/goerli/geth.ipc. Windows users are not affected by this.

Note: Although there are some internal protective measures to prevent transactions from 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 accounts available between them.

Full node on the Rinkeby test network

Go Ethereum also supports connecting to the older proof-of-authority based test network called Rinkeby which is operated by members of the community.

$ geth --rinkeby console

Full node on the Ropsten test network

In addition to Görli and Rinkeby, Geth also supports the ancient Ropsten testnet. The Ropsten test network is based on the Ethash proof-of-work consensus algorithm. As such, it has certain extra overhead and is more susceptible to reorganization attacks due to the network's low difficulty/security.

$ geth --ropsten console

Note: Older Geth configurations store the Ropsten database in the testnet subdirectory.

Configuration

As an alternative to passing the numerous flags to the geth binary, you can also pass a configuration file via:

$ geth --config /path/to/your_config.toml

To get an idea how the file should look like you can use the dumpconfig subcommand to export your existing configuration:

$ geth --your-favourite-flags dumpconfig

Note: This works only with geth v1.6.0 and above.

Docker quick start

One of the quickest ways to get Ethereum up and running on your machine is by using Docker:

docker run -d --name ethereum-node -v /Users/alice/ethereum:/root \
           -p 8545:8545 -p 30303:30303 \
           ethereum/client-go

This will start geth in snap-sync mode with a DB memory allowance of 1GB just as the above command does. It will also create a persistent volume in your home directory for saving your blockchain as well as map the default ports. There is also an alpine tag available for a slim version of the image.

Do not forget --http.addr 0.0.0.0, if you want to access RPC from other containers and/or hosts. By default, geth binds to the local interface and RPC endpoints is not accessible from the outside.

Programmatically interfacing geth nodes

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 and geth specific APIs). These can be exposed via HTTP, WebSockets and IPC (UNIX sockets on UNIX based platforms, and named pipes on Windows).

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:

  • --http Enable the HTTP-RPC server
  • --http.addr HTTP-RPC server listening interface (default: localhost)
  • --http.port HTTP-RPC server listening port (default: 8545)
  • --http.api API's offered over the HTTP-RPC interface (default: eth,net,web3)
  • --http.corsdomain Comma separated list of domains from which to accept cross origin requests (browser enforced)
  • --ws Enable the WS-RPC server
  • --ws.addr WS-RPC server listening interface (default: localhost)
  • --ws.port WS-RPC server listening port (default: 8546)
  • --ws.api API's offered over the WS-RPC interface (default: eth,net,web3)
  • --ws.origins 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)

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 on all transports. You can reuse the same connection for multiple requests!

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!

Operating a private network

Maintaining your own private network is more involved as a lot of configurations taken for granted in the official networks need to be manually set up.

Defining the private genesis state

First, you'll need to create the genesis state of your networks, which all nodes need to be aware of and agree upon. This consists of a small JSON file (e.g. call it genesis.json):

{
  "config": {
    "chainId": <arbitrary positive integer>,
    "homesteadBlock": 0,
    "eip150Block": 0,
    "eip155Block": 0,
    "eip158Block": 0,
    "byzantiumBlock": 0,
    "constantinopleBlock": 0,
    "petersburgBlock": 0,
    "istanbulBlock": 0,
    "berlinBlock": 0,
    "londonBlock": 0
  },
  "alloc": {},
  "coinbase": "0x0000000000000000000000000000000000000000",
  "difficulty": "0x20000",
  "extraData": "",
  "gasLimit": "0x2fefd8",
  "nonce": "0x0000000000000042",
  "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "timestamp": "0x00"
}

The above fields should be fine for most purposes, although we'd recommend changing the nonce to some random value so you prevent unknown remote nodes from being able to connect to you. If you'd like to pre-fund some accounts for easier testing, create the accounts and populate the alloc field with their addresses.

"alloc": {
  "0x0000000000000000000000000000000000000001": {
    "balance": "111111111"
  },
  "0x0000000000000000000000000000000000000002": {
    "balance": "222222222"
  }
}

With the genesis state defined in the above JSON file, you'll need to initialize every geth node with it prior to starting it up to ensure all blockchain parameters are correctly set:

$ geth init path/to/genesis.json

Creating the rendezvous point

With all nodes that you want to run initialized to the desired genesis state, you'll need to start a bootstrap node that others can use to find each other in your network and/or over the internet. The clean way is to configure and run a dedicated bootnode:

$ bootnode --genkey=boot.key
$ bootnode --nodekey=boot.key

With the bootnode online, it will display an enode URL that other nodes can use to connect to it and exchange peer information. Make sure to replace the displayed IP address information (most probably [::]) with your externally accessible IP to get the actual enode URL.

Note: You could also use a full-fledged geth node as a bootnode, but it's the less recommended way.

Starting up your member nodes

With the bootnode operational and externally reachable (you can try telnet <ip> <port> to ensure it's indeed reachable), start every subsequent geth node pointed to the bootnode for peer discovery via the --bootnodes flag. It will probably also be desirable to keep the data directory of your private network separated, so do also specify a custom --datadir flag.

$ geth --datadir=path/to/custom/data/folder --bootnodes=<bootnode-enode-url-from-above>

Note: Since your network will be completely cut off from the main and test networks, you'll also need to configure a miner to process transactions and create new blocks for you.

Running a private miner

Mining on the public Ethereum network is a complex task as it's only feasible using GPUs, requiring an OpenCL or CUDA enabled ethminer instance. For information on such a setup, please consult the EtherMining subreddit and the ethminer repository.

In a private network setting, however a single CPU miner instance is more than enough for practical purposes as it can produce a stable stream of blocks at the correct intervals without needing heavy resources (consider running on a single thread, no need for multiple ones either). To start a geth instance for mining, run it with all your usual flags, extended by:

$ geth <usual-flags> --mine --miner.threads=1 --miner.etherbase=0x0000000000000000000000000000000000000000

Which will start mining blocks and transactions on a single CPU thread, crediting all proceedings to the account specified by --miner.etherbase. You can further tune the mining by changing the default gas limit blocks converge to (--miner.targetgaslimit) and the price transactions are accepted at (--miner.gasprice).

Contribution

Thank you for considering to help out with the source code! We welcome contributions from anyone on the internet, and are grateful for even the smallest of fixes!

If you'd like to contribute to go-ethereum, please fork, fix, commit and send a pull request for the maintainers to review and merge into the main code base. If you wish to submit more complex changes though, please check up with the core devs first on our Discord Server to ensure those changes are in line with the general philosophy of the project and/or get some early feedback which can make both your efforts much lighter as well as our review and merge procedures quick and simple.

Please make sure your contributions adhere to our coding guidelines:

  • Code must adhere to the official Go formatting guidelines (i.e. uses gofmt).
  • Code must be documented adhering to the official Go commentary guidelines.
  • Pull requests need to be based on and opened against the master branch.
  • Commit messages should be prefixed with the package(s) they modify.
    • E.g. "eth, rpc: make trace configs optional"

Please see the Developers' Guide for more details on configuring your environment, managing project dependencies, and testing procedures.

License

The go-ethereum library (i.e. all code outside of the cmd directory) is licensed under the GNU Lesser General Public License v3.0, also included in our repository in the COPYING.LESSER file.

The go-ethereum binaries (i.e. all code inside of the cmd directory) is licensed under the GNU General Public License v3.0, also included in our repository in the COPYING file.

Issues
  • Rinkeby Faucet Down

    Rinkeby Faucet Down

    https://faucet.rinkeby.io/

    I'm not sure if this is the right place to put this, but I hear one of the mods here runs the rinkeby faucet. A ton of new developers are trying to use the rinkeby testnet, and the faucet is malfunctioning.

    Is there someone here who owns it and can bring it back up to speed?

    type:bug 
    opened by PatrickAlphaC 470
  • Rinkeby faucet not working again?

    Rinkeby faucet not working again?

    Is it possible that Rinkeby faucet not working again?

    as in #21637

    I'm trying to retrieve some founds with a twitter but I always get an No Ethereum address found to fund message(https://twitter.com/aubsptest/status/1340407355704532994)

    type:docs 
    opened by ips219 291
  • What is the upper bound of

    What is the upper bound of "imported new state entries"?

    System information

    Geth version: 1.6.5 OS & Version: Windows 7 x64 geth Command: geth --fast --cache 8192

    Expected behaviour

    Geth should start in full mode.

    Actual behaviour

    After nearing the current block geth is continuously "imported new state entries".

    Steps to reproduce the behaviour

    Currently running since 10 days.

    Geth console info

    eth.blockNumber 6 eth.syncing { currentBlock: 3890742, highestBlock: 3890893, knownStates: 17124512, pulledStates: 17105895, startingBlock: 3890340 }

    Backtrace

    INFO [06-18|10:10:31] Imported new state entries count=384 elapsed=22.001ms processed=17118951 pending=24263 INFO [06-18|10:10:32] Imported new state entries count=384 elapsed=33.001ms processed=17119335 pending=23819 INFO [06-18|10:10:33] Imported new state entries count=384 elapsed=111.006ms processed=17119719 pending=23875 INFO [06-18|10:10:34] Imported new state entries count=384 elapsed=131.007ms processed=17120103 pending=23855 INFO [06-18|10:10:35] Imported new state entries count=384 elapsed=116.006ms processed=17120487 pending=23978 INFO [06-18|10:10:36] Imported new state entries count=384 elapsed=134.007ms processed=17120871 pending=24186 INFO [06-18|10:10:38] Imported new state entries count=384 elapsed=305.017ms processed=17121255 pending=27727 INFO [06-18|10:10:42] Imported new state entries count=384 elapsed=448.025ms processed=17121639 pending=33614 INFO [06-18|10:10:46] Imported new state entries count=384 elapsed=441.025ms processed=17122023 pending=39642 INFO [06-18|10:10:48] Imported new state entries count=384 elapsed=44.002ms processed=17122407 pending=39170 INFO [06-18|10:10:52] Imported new state entries count=384 elapsed=427.024ms processed=17122791 pending=45142 INFO [06-18|10:10:55] Imported new state entries count=384 elapsed=473.027ms processed=17123175 pending=51166 INFO [06-18|10:10:58] Imported new state entries count=384 elapsed=448.025ms processed=17123559 pending=57128 INFO [06-18|10:11:01] Imported new state entries count=384 elapsed=444.025ms processed=17123943 pending=63129 INFO [06-18|10:11:04] Imported new state entries count=384 elapsed=441.025ms processed=17124327 pending=69173 INFO [06-18|10:11:04] Imported new state entries count=1 elapsed=0s processed=17124328 pending=69172 INFO [06-18|10:11:07] Imported new state entries count=384 elapsed=442.025ms processed=17124712 pending=75182 INFO [06-18|10:11:10] Imported new state entries count=384 elapsed=470.026ms processed=17125096 pending=81186 INFO [06-18|10:11:11] Imported new state entries count=384 elapsed=335.019ms processed=17125480 pending=81736 INFO [06-18|10:11:14] Imported new state entries count=384 elapsed=440.025ms processed=17125864 pending=87718 INFO [06-18|10:11:15] Imported new state entries count=384 elapsed=140.008ms processed=17126248 pending=87812 INFO [06-18|10:11:16] Imported new state entries count=384 elapsed=31.001ms processed=17126632 pending=87226 INFO [06-18|10:11:18] Imported new state entries count=384 elapsed=88.005ms processed=17127016 pending=87040 INFO [06-18|10:11:19] Imported new state entries count=384 elapsed=39.002ms processed=17127400 pending=86803 INFO [06-18|10:11:20] Imported new state entries count=384 elapsed=36.002ms processed=17127784 pending=86585 INFO [06-18|10:11:23] Imported new state entries count=1 elapsed=0s processed=17127785 pending=86272 INFO [06-18|10:11:23] Imported new state entries count=384 elapsed=1.610s processed=17128169 pending=86271 INFO [06-18|10:11:25] Imported new state entries count=384 elapsed=143.008ms processed=17128553 pending=87792 INFO [06-18|10:11:28] Imported new state entries count=384 elapsed=183.010ms processed=17128937 pending=90117 INFO [06-18|10:11:28] Imported new state entries count=1 elapsed=1ms processed=17128938 pending=90120 INFO [06-18|10:11:28] Imported new state entries count=1 elapsed=0s processed=17128939 pending=90118 INFO [06-18|10:11:29] Imported new state entries count=384 elapsed=102.005ms processed=17129323 pending=90022 INFO [06-18|10:11:30] Imported new state entries count=384 elapsed=184.010ms processed=17129707 pending=92320 INFO [06-18|10:11:32] Imported new state entries count=384 elapsed=185.010ms processed=17130091 pending=94665 INFO [06-18|10:11:34] Imported new state entries count=384 elapsed=187.010ms processed=17130475 pending=97053 INFO [06-18|10:11:36] Imported new state entries count=384 elapsed=194.011ms processed=17130859 pending=99550 INFO [06-18|10:11:38] Imported new state entries count=384 elapsed=183.010ms processed=17131243 pending=101954 INFO [06-18|10:11:40] Imported new state entries count=384 elapsed=202.011ms processed=17131627 pending=104395 INFO [06-18|10:11:42] Imported new state entries count=384 elapsed=196.011ms processed=17132011 pending=106904 INFO [06-18|10:11:44] Imported new state entries count=384 elapsed=186.010ms processed=17132395 pending=109176 INFO [06-18|10:11:47] Imported new state entries count=384 elapsed=184.010ms processed=17132779 pending=111554 INFO [06-18|10:11:47] Imported new state entries count=2 elapsed=184.010ms processed=17132781 pending=111554 INFO [06-18|10:11:48] Imported new state entries count=384 elapsed=34.002ms processed=17133165 pending=110760 INFO [06-18|10:11:50] Imported new state entries count=384 elapsed=193.011ms processed=17133549 pending=113172

    opened by sonulrk 224
  • "Nonce too low" error message on faucet.rinkeby.io

    Hi,

    Request ether via https://faucet.rinkeby.io/ throws an error message "Nonce too low" using both Twitter and G+.

    System information OS & Version: Mac, Chrome(version 65) and Safari.

    Expected behaviour Requesting ether using Google+/Twitter URL should transfer ether.

    Actual behaviour Clicking "Give me ether" throws an error "Nonce too low".

    Steps to reproduce the behaviour chrome-ether-rinkeby

    screen shot 2018-04-29 at 14 12 59

    Open Chrome (or Safari), input https://faucet.rinkeby.io/, and copy URL, and then click "give me ether".

    opened by zceejkr 153
  • geth --fast stalls before crossing finish line

    geth --fast stalls before crossing finish line

    System information

    Geth version: geth version 1.5.9-stable, Go1.7.4 OS & Version: OSX 10.12.6 MacMini 4GB RAM (latest MacMini doesn't support field RAM upgrade anymore) VDSL connection with an average of 20-40Mbit throughput. Ethereum Wallet 0.9.0 Commit hash : (if develop)

    Expected behaviour

    fast sync to current latest block followed by auto disabling

    Actual behaviour

    stalling from a few thousand blocks up to a few hundred to current latest block. Tries to catch up to latest block, but number of new blocks is greater than the speed of adding fast blocks. Never auto disables fast sync mode.

    Steps to reproduce the behaviour

    Removedb and geth --fast --cache=1024. 5 times on that machine over the last weeks.

    Fast sync is already my workaround, starting a fresh fast sync from scratch. Before I was unsuccessful on that machine trying to sync with existing blockchain data instead. This was also a lost race of catching up to the latest block on that machine. This workaround was good until now.

    Today even the workaround in fast sync mode (cache -1024) will not completely load the blockchain anymore. It catches up some hundred blocks to the latest block and stalls for hours. By the time it catches up a few hundred blocks, the latest block moved ahead again. The closer geth is getting to import to the latest block (at time of writing 4173161), the slower it gets. It does not catch up anymore. Tried 5 times now over the last weeks and giving up at around 4-5 days each.

    Does the machine not meet todays minimum hardware requirement anymore or is this a major bug?

    Backtrace

    latest block 13 hours ago (!)

    I0818 00:15:26.444933 core/blockchain.go:805] imported 148 receipts in 2.775s. #4169952 [e3f556fc… / 36f4d3c9…]

    ...

    latest header chain 50 minutes ago

    I0818 12:47:45.107445 core/headerchain.go:342] imported 1 headers in 4.954ms. #4173009 [350d1426… / 350d1426…]

    ...

    currently only importing nothing but state entries

    I0818 13:36:41.103101 eth/downloader/downloader.go:966] imported 172 state entries in 10.009s: processed 10010213, pending at least 129361 I0818 13:36:41.103131 eth/downloader/downloader.go:966] imported 384 state entries in 783.519ms: processed 10010597, pending at least 129361 I0818 13:36:41.103154 eth/downloader/downloader.go:966] imported 381 state entries in 6.963s: processed 10010978, pending at least 129361 I0818 13:36:41.103167 eth/downloader/downloader.go:966] imported 25 state entries in 87.654ms: processed 10011003, pending at least 129360 I0818 13:36:46.014244 eth/downloader/downloader.go:966] imported 384 state entries in 2.482s: processed 10011387, pending at least 127584 I0818 13:36:49.074483 eth/downloader/downloader.go:966] imported 381 state entries in 7.082s: processed 10011768, pending at least 127105 I0818 13:36:49.074553 eth/downloader/downloader.go:966] imported 384 state entries in 7.971s: processed 10012152, pending at least 127105 I0818 13:36:49.074574 eth/downloader/downloader.go:966] imported 384 state entries in 3.772s: processed 10012536, pending at least 127105 I0818 13:36:49.074603 eth/downloader/downloader.go:966] imported 162 state entries in 5.822s: processed 10012698, pending at least 127105 I0818 13:36:49.074622 eth/downloader/downloader.go:966] imported 25 state entries in 4.050s: processed 10012723, pending at least 127105 I0818 13:36:49.074639 eth/downloader/downloader.go:966] imported 381 state entries in 3.060s: processed 10013104, pending at least 127105 I0818 13:36:49.074742 eth/downloader/downloader.go:966] imported 85 state entries in 7.117s: processed 10013189, pending at least 127105 I0818 13:36:49.074765 eth/downloader/downloader.go:966] imported 375 state entries in 2.219s: processed 10013564, pending at least 127105 I0818 13:36:49.074782 eth/downloader/downloader.go:966] imported 87 state entries in 3.915s: processed 10013651, pending at least 127105 I0818 13:36:49.074795 eth/downloader/downloader.go:966] imported 23 state entries in 271.734ms: processed 10013674, pending at least 127104

    opened by Dirksterson 152
  • eth_listTransactions

    eth_listTransactions

    This feature has been discussed on gitter in the past and we would like to see this get implemented for accounts and contracts.

    Proposal

    eth_listTransactions

    Returns a list of transaction hashes for a given external or contract account

    Parameters

    String - the account or contract address

    params: [
      "0x385acafdb80b71ae001f1dbd0d65e62ec2fff055"
    ]
    

    Returns

    DATA - A list of transaction hashes

    opened by tymat 130
  • Rinkeby Faucet: No Ethereum address found to fund

    Rinkeby Faucet: No Ethereum address found to fund

    this is the tweet that clearly contains an ethereum address: https://twitter.com/mr_ligi/status/1268171687159357443

    Rinkeby: Authenticated Faucet - Brave_579

    Guess there is something off with the twitter connection

    opened by ligi 113
  • eth_compilers, eth_compileSolidity are gone in go-ethereum 1.6.0

    eth_compilers, eth_compileSolidity are gone in go-ethereum 1.6.0

    System information

    Geth version: v1.6.0-unstable-6d038e76/linux/go1.7.3 OS & Version: Linux/Ubuntu 16.04.1 LTS (x86_64) Commit hash : 6d038e76

    Expected behaviour

    Running eth.getCompilers() in the geth console should return an array of compilers ['solidity'] that could even be empty ( [] )

    Actual behaviour

    The command returns Error: The method eth_getCompilers does not exist/is not available but I have started the node with --ipcapi "admin,db,eth,debug,miner,net,shh,txpool,personal,web3" and I am able to run other eth commands. I was actually trying to execute the command via RPC with web3j and was getting an error then realized it didn't work in the console either.

    > eth.compile
    {
      lll: function(),
      serpent: function(),
      solidity: function()
    }
    
    

    Steps to reproduce the behaviour

    1. Attach the console to a running node with -ipc enabled
    2. Run eth.getCompilers()
    3. If no compilers are installed you should get [], not an error message
    opened by beatrizsanchez 96
  • Can't Unlock Any Of My Four Geth-Generated Accounts, 30,000 ETH Inside

    Can't Unlock Any Of My Four Geth-Generated Accounts, 30,000 ETH Inside

    I thought I should edit to include an update right at the top of the body: three of the four Geth accounts have been unlocked thanks to @DcyMatrix's suggestion below

    Requesting advice/help in solving this problem:

    I created four Geth accounts in late May, and gave each a different password, which I carefully noted down (I wrote the passwords down on paper, then I entered them into the Geth command line).

    Yesterday I tried to unlock the accounts, and none of the passwords worked, for any of the accounts. I'm transcribing the passwords from the same piece of paper that I initially read from when entering them into the Geth client, so it's very unlikely that this was an input error.

    I've searched the internet and found these four links where people report having similar problems:

    Mist Wallet password problem - https://www.reddit.com/r/ethereum/comments/4na19x/mist_wallet_password_problem/

    Mist Wallet says wrong password, be careful - https://www.reddit.com/r/ethereum/comments/4jzxft/mist_wallet_says_wrong_password_be_careful/

    Mist password wrong error 0.7.6 - https://github.com/ethereum/mist/issues/923

    Password Assistance Needed :) - https://forum.ethereum.org/discussion/8422/password-assistance-needed

    A common factor in all of these is accounts being created in May, so it may have something to do with a version of Geth that was in wide use in May.

    Someone in the discussion linked by the second URL from the top mentioned fixing their problem with Jaxx Kryptokit. I tried importing one of the accounts into the Jaxx Kryptokit wallet:

    https://ethereumwallet.com/beta/index.html#dYb9

    and put in the password, and it did not work, so I do believe that the password is wrong.

    I found this bug report relating to both Mist and Geth:

    https://github.com/ethereum/mist/issues/182#issuecomment-198908871

    I'm wondering if this could be related.

    I created two new accounts today with two new passwords, and was able to unlock both with their passwords, but I did that with Geth 1.5.0-unstable and the version I was running in late May was different.

    If I lose this ETH this would set me back a few years, so I'm very anxious right now. Any help would be appreciated.

    Edit, more details:

    I was running Geth 1.5.0 unstable, with this snapshot: 1.5.0+986SNAPSHOT20160511110231trusty-0ubuntu1

    So this is the snapshot as of May 11th 2016

    need:documentation 
    opened by testerguy 96
  • Transactions not being broadcasted

    Transactions not being broadcasted

    System information

    Geth version:

    Geth
    Version: 1.6.5-stable
    Git Commit: cf87713dd42162861b7ed227f79f0638a33571df
    Architecture: amd64
    Protocol Versions: [63 62]
    Network Id: 1
    Go Version: go1.7
    Operating System: linux
    GOPATH=
    GOROOT=/usr/local/go
    

    OS & Version: Ubuntu 14.04.5 LTS, Trusty Tahr

    Expected behaviour

    eth.sendTransaction returns a hash and the transaction should be broadcasted to the network.

    Actual behaviour

    eth.sendTransaction returns a hash but the transaction is never broadcasted to the network.

    Steps to reproduce the behaviour

    This tends to happen when the network is congested (usually around large ICOs). But calling sendTransaction during this time returns transaction hashes and these seem to just get lost in the ether.

    More background

    We operate an ETH exchange and stopped withdrawals about 18 hours ago to prevent getting ourselves into a bigger mess and stop adding things to the queue. We had to upgrade and restart geth yesterday as 1.6.0 was refusing to sync and was losing peers. 1.6.5 is now syncing without issues.

    When sending transactions we use dynamic gas prices, using the recommended value returned by eth.gasPrice.

    Even after upgrading to 1.6.5 we see this behavior. Our node hasn't restarted since we upgraded to 1.6.5, we have txhashes returned by geth when calling sendTransaction, but txpool.content.pending[sending_address] returns undefined.

    More questions

    1. When is it safe to credit funds back to users? I understand it's theoretically possible that after calling sendTransaction the txs were broadcasted and are still in some other node's txpool
    2. How do we prevent this from happening in the future?
    3. What else can we do to help you debug this issue?
    status:triage need:investigation status:backlog 
    opened by vogelito 92
  • Rinkeby Faucet No Ethereum Address Found

    Rinkeby Faucet No Ethereum Address Found

    So I clearly have a tweet with a valid ethereum address, but it says no ethereum address found.

    https://twitter.com/josmans1/status/1339595978567892993?s=20

    type:bug 
    opened by anti-seal 83
  • Unable to deploy ethstats: ssh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey], no supported methods remain

    Unable to deploy ethstats: ssh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey], no supported methods remain

    System information

    Geth version: 1.10.21-unstable OS & Version: Ubuntu 22.04

    Expected behaviour

    SSH connects appropriately to remote server, as it does via standard SSH command.

    Actual behaviour

    Puppeth throws an unable to authenticate error despite id_rsa being present and working in standalone SSH command.

    Steps to reproduce the behaviour

    Which server do you want to interact with?
     1. Connect another server
    > 1
    
    What is the remote server's address ([username[:identity]@]hostname[:port])?
    > 10.0.25.175
    WARN [07-01|21:36:15.021] Unable to dial SSH agent, falling back to private keys err="dial unix: missing address"
    
    The authenticity of host '10.0.25.175:22 (10.0.25.175:22)' can't be established.
    SSH key fingerprint is 02:bd:c3:91:9e:f0:fc:a9:73:1d:15:49:07:ca:3a:52 [MD5]
    Are you sure you want to continue connecting (yes/no)? yes
    ERROR[07-01|21:36:16.414] Server not ready for puppeth             err="ssh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey], no supported methods remain"
    

    I have attempted this with straight IP, and with [email protected], as well as the full user/host/identity/port with the same result. Here is the SSH verbose message:

    [email protected]:~/go-ethereum/build/bin$ ssh -v 10.0.25.175
    OpenSSH_8.9p1 Ubuntu-3, OpenSSL 3.0.2 15 Mar 2022
    debug1: Reading configuration data /etc/ssh/ssh_config
    debug1: /etc/ssh/ssh_config line 19: include /etc/ssh/ssh_config.d/*.conf matched no files
    debug1: /etc/ssh/ssh_config line 21: Applying options for *
    debug1: Connecting to 10.0.25.175 [10.0.25.175] port 22.
    debug1: Connection established.
    debug1: identity file /home/ubuntu/.ssh/id_rsa type 0
    debug1: identity file /home/ubuntu/.ssh/id_rsa-cert type -1
    debug1: identity file /home/ubuntu/.ssh/id_ecdsa type -1
    debug1: identity file /home/ubuntu/.ssh/id_ecdsa-cert type -1
    debug1: identity file /home/ubuntu/.ssh/id_ecdsa_sk type -1
    debug1: identity file /home/ubuntu/.ssh/id_ecdsa_sk-cert type -1
    debug1: identity file /home/ubuntu/.ssh/id_ed25519 type -1
    debug1: identity file /home/ubuntu/.ssh/id_ed25519-cert type -1
    debug1: identity file /home/ubuntu/.ssh/id_ed25519_sk type -1
    debug1: identity file /home/ubuntu/.ssh/id_ed25519_sk-cert type -1
    debug1: identity file /home/ubuntu/.ssh/id_xmss type -1
    debug1: identity file /home/ubuntu/.ssh/id_xmss-cert type -1
    debug1: identity file /home/ubuntu/.ssh/id_dsa type -1
    debug1: identity file /home/ubuntu/.ssh/id_dsa-cert type -1
    debug1: Local version string SSH-2.0-OpenSSH_8.9p1 Ubuntu-3
    debug1: Remote protocol version 2.0, remote software version OpenSSH_8.9p1 Ubuntu-3
    debug1: compat_banner: match: OpenSSH_8.9p1 Ubuntu-3 pat OpenSSH* compat 0x04000000
    debug1: Authenticating to 10.0.25.175:22 as 'ubuntu'
    debug1: load_hostkeys: fopen /home/ubuntu/.ssh/known_hosts2: No such file or directory
    debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts: No such file or directory
    debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts2: No such file or directory
    debug1: SSH2_MSG_KEXINIT sent
    debug1: SSH2_MSG_KEXINIT received
    debug1: kex: algorithm: curve25519-sha256
    debug1: kex: host key algorithm: ssh-ed25519
    debug1: kex: server->client cipher: [email protected] MAC: <implicit> compression: none
    debug1: kex: client->server cipher: [email protected] MAC: <implicit> compression: none
    debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
    debug1: SSH2_MSG_KEX_ECDH_REPLY received
    debug1: Server host key: ssh-ed25519 SHA256:2mhCanRHjgNbq+AXIVRPHhsUOW2/BanZBYnSIriVzUI
    debug1: load_hostkeys: fopen /home/ubuntu/.ssh/known_hosts2: No such file or directory
    debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts: No such file or directory
    debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts2: No such file or directory
    debug1: Host '10.0.25.175' is known and matches the ED25519 host key.
    debug1: Found key in /home/ubuntu/.ssh/known_hosts:17
    debug1: rekey out after 134217728 blocks
    debug1: SSH2_MSG_NEWKEYS sent
    debug1: expecting SSH2_MSG_NEWKEYS
    debug1: SSH2_MSG_NEWKEYS received
    debug1: rekey in after 134217728 blocks
    debug1: Will attempt key: /home/ubuntu/.ssh/id_rsa RSA SHA256:mcmRkd9NnbzT1/R5JIWQTcbXQFu/bM5Uk74j1/3wobk
    debug1: Will attempt key: /home/ubuntu/.ssh/id_ecdsa
    debug1: Will attempt key: /home/ubuntu/.ssh/id_ecdsa_sk
    debug1: Will attempt key: /home/ubuntu/.ssh/id_ed25519
    debug1: Will attempt key: /home/ubuntu/.ssh/id_ed25519_sk
    debug1: Will attempt key: /home/ubuntu/.ssh/id_xmss
    debug1: Will attempt key: /home/ubuntu/.ssh/id_dsa
    debug1: SSH2_MSG_EXT_INFO received
    debug1: kex_input_ext_info: server-sig-algs=<ssh-ed25519,[email protected],ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,[email protected],[email protected]>
    debug1: kex_input_ext_info: [email protected]=<0>
    debug1: SSH2_MSG_SERVICE_ACCEPT received
    debug1: Authentications that can continue: publickey
    debug1: Next authentication method: publickey
    debug1: Offering public key: /home/ubuntu/.ssh/id_rsa RSA SHA256:mcmRkd9NnbzT1/R5JIWQTcbXQFu/bM5Uk74j1/3wobk
    debug1: Server accepts key: /home/ubuntu/.ssh/id_rsa RSA SHA256:mcmRkd9NnbzT1/R5JIWQTcbXQFu/bM5Uk74j1/3wobk
    Authenticated to 10.0.25.175 ([10.0.25.175]:22) using "publickey".
    debug1: channel 0: new [client-session]
    debug1: Requesting [email protected]
    debug1: Entering interactive session.
    debug1: pledge: filesystem
    debug1: client_input_global_request: rtype [email protected] want_reply 0
    debug1: client_input_hostkeys: searching /home/ubuntu/.ssh/known_hosts for 10.0.25.175 / (none)
    debug1: client_input_hostkeys: searching /home/ubuntu/.ssh/known_hosts2 for 10.0.25.175 / (none)
    debug1: client_input_hostkeys: hostkeys file /home/ubuntu/.ssh/known_hosts2 does not exist
    debug1: client_input_hostkeys: host key found matching a different name/address, skipping UserKnownHostsFile update
    debug1: Remote: /home/ubuntu/.ssh/authorized_keys:2: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding
    debug1: Remote: /home/ubuntu/.ssh/authorized_keys:2: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding
    debug1: Sending environment.
    debug1: channel 0: setting env LANG = "C.UTF-8"
    debug1: channel 0: setting env LC_TERMINAL = "iTerm2"
    debug1: channel 0: setting env LC_TERMINAL_VERSION = "3.4.15"
    Welcome to Ubuntu 22.04 LTS (GNU/Linux 5.15.0-1011-aws x86_64)
    ...
    Last login: Fri Jul  1 02:32:31 2022 from 10.0.18.164
    [email protected]:~$
    

    It's also worth noting I'm connecting on the private IP of an AWS instance, but I've tried with public IP as well. It works standalone with no issues, but not through puppeth no matter what I try. I've also tried with other versions of go.

    type:bug 
    opened by sion42x 1
  • `attach --exec` opens up the interactive console and does not log the result

    `attach --exec` opens up the interactive console and does not log the result

    System information

    Geth version: Geth Version: 1.10.20-stable Architecture: amd64 Go Version: go1.18.3 Operating System: linux GOPATH= GOROOT=go OS & Version: Ubuntu 20.04 LTS Commit hash : -

    Latest geth seems to have broken attach behavior - the --exec flag does nothing.

    Expected behaviour

    --exec prints out result and quits

    Actual behaviour

    --exec prints out nothing and opens up the interactive console.

    Steps to reproduce the behaviour

    Run any command with attach using --exec on v1.10.20

    Backtrace

    [email protected] ~/eth-node # ./geth_ethereum attach /root/eth-node/datadir/geth.ipc --exec "admin.nodeInfo"
    Welcome to the Geth JavaScript console!
    
    instance: Geth/v1.10.20-stable/linux-amd64/go1.18.3
    at block: 15057827 (Fri Jul 01 2022 19:05:44 GMT+0200 (CEST))
    datadir: /root/eth-node/datadir
    modules: admin:1.0 debug:1.0 eth:1.0 ethash:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0
    
    To exit, press ctrl-d or type exit
    >
    

    image Also seems to be reproduced by discord user schone#2266.

    type:bug 
    opened by SomeGuyCalledBru 1
  • Keycard unable to sign message

    Keycard unable to sign message

    System information

    Version: 1.10.21-unstable Git Commit: de1cecb22e2a18ad70d4cb92bee122f4549c5b79 Git Commit Date: 20220701 Architecture: amd64 Go Version: go1.18.1 Operating System: linux

    Bug description

    I have a Keycard unlocked:

    > personal.listWallets
    [{
        accounts: [{
            address: "0x774a37cbe7e32752ed114b56ac019aa9579b5690",
            url: "keycard://1a14/m/44'/60'/0'/0/0"
        }],
        status: "Online",
        url: "keycard://1a144d65"
    }]
    

    When attempting to sign any message I get the following error:

    > personal.sign("0xdeadbeaf", "0x774a37cbe7e32752ed114b56ac019aa9579b5690", "347390")
    GoError: Error: unexpected response status Cla=0x80, Ins=0xc0, Sw=0x6a80 at web3.js:6365:9(45)
            at github.com/ethereum/go-ethereum/internal/jsre.MakeCallback.func1 (native)
            at <eval>:1:1(5)
    

    Therefore I can't send a transaction either:

    > tx
    {
      from: "0x774a37cbe7e32752ed114b56Ac019aA9579b5690",
      to: "0x3b15ba77fd4f389dafbbf3d8ecb241f781eec943",
      value: "1000000000000000"
    }
    > personal.sendTransaction(tx, "347390")
    Error: unexpected response status Cla=0x80, Ins=0xc0, Sw=0x6a80
            at web3.js:6365:9(45)
            at send (web3.js:5099:62(34))
            at <eval>:1:25(5)
    

    According to this page, the error 6A80 is "The parameters in the data field are incorrect."

    Note:

    • I can easily sign messages using keycard-cli.
    • I can perform other task with the Keycard with Geth, like generate new keys.

    Reference

    • https://blog.ethereum.org/2019/07/10/geth-v1-9-0/
    • https://geth.ethereum.org/docs/rpc/ns-personal
    type:bug 
    opened by willianpaixao 2
  • SimulatedBackend: Cannot use `AdjustTime` after `Fork`

    SimulatedBackend: Cannot use `AdjustTime` after `Fork`

    System information

    OS & Version: Linux Commit hash : de1cecb22e2a18ad70d4cb92bee122f4549c5b79 (master)

    Expected behaviour

    When using AdjustTime directly after a Fork, the following Commit should still create a block in the side-chain, the same goes for all other AdjustTime and Commit calls afterwards.

    Actual behaviour

    AdjustTime uses the current head (b.blockchain.CurrentBlock()), which is the canonical head and thus not the block we just rolled back to when calling Fork. Thus the following call to Commit creates a block with parent h3 instead of with parent h1, resulting in the same bahavior as if Fork was never called.

    Fix

    Use b.blockchain.GetBlockByHash(b.pendingBlock.ParentHash()) instead of b.blockchain.CurrentBlock() in SimulatedBackend.AdjustTime.

    Steps to reproduce the behaviour

    // Create a new SimulatedBackend (should be possible without allocations)
    sb := backends.NewSimulatedBackend(
    		core.GenesisAlloc{},
    		30_000_000,
    	)
    sb.Commit() // h1
    h1 := sb.Blockchain().CurrentHeader().Hash()
    sb.Commit() // h2
    sb.Fork(context.Background(), h1)
    sb.AdjustTime(1 * time.Second)
    sb.Commit() // Should have h1 as parent but has h2
    
    type:bug 
    opened by DragonDev1906 0
Releases(v1.10.20)
  • v1.10.20(Jun 29, 2022)

    Geth v1.10.20 is a maintenance release, adding built-in configuration for the merge fork on the Sepolia testnet.

    Specifically, this release defines a terminal total difficulty for Sepolia (#25179).

    Geth command changes

    • Geth and most other command-line tools now use a newer version of the command-line argument/flag handling library. There is one new restriction with this change: flags must now be given before other arguments. Very few of Geth's subcommands take arguments, so this is unlikely to cause issues. (#24751)
    • The geth js subcommand has been removed. (#25000)
    • The new --discovery.port flag allows configuring a separate port for the UDP listener. (#24979)
    • Setting p2p bootstrap nodes in the config file now works even when a pre-defined network is selected on the command-line. (#25174)

    RPC API changes

    • eth_chainId now always returns the configured chain ID regardless of sync status. This is a violation of EIP-695, but the previous behavior caused issues with CL clients. (#25166, #25168)
    • Transaction objects returned by RPC (e.g. from eth_getTransactionByHash) now always include the chainId field, even for untyped (legacy) transactions. (#25155)
    • The deprecated RPC method personal_signAndSendTransaction has been removed. (#25111)
    • Handling of certain reorg corner cases is improved in the Engine API. (#25187, #25139)
    • A performance regression in JS tracing is resolved. (#25156)

    Build changes

    • Bash and zsh completions are now installed by the geth Ubuntu package. (#25195, #25204)

    For a full rundown of the changes please consult the Geth 1.10.20 release milestone


    As with all our previous releases, you can find the:

    Source code(tar.gz)
    Source code(zip)
  • v1.10.19(Jun 15, 2022)

    Geth v1.10.19 is yet another feature release.

    The release contains the Gray Glacier fork definition. The Gray Glacier fork is a difficulty-bomb postponement, which is expected to go live on Ethereum Mainnet towards the end of June.

    In other words: all users are required to upgrade before the Gray Glacier hardfork activates at block 15050000 (#25088)

    Changes which may cause incompatibilities:

    • The engine API is now only available with JWT authentication.
    • Geth will refuse to start if legacy receipts are present in the database. The check can be disabled with --ignore-legacy-receipts, but we strongly recommend you run the conversion in this case (#24943).
    • The RPC method debug_traceCall will now reject execution against the pending block (#24871).
    • RPC timer metrics have been changed into histograms (#25044).

    Other changes in this release:

    • Updates related to The Merge on Ropsten, which is now a proof-of-stake network (#25018, #24975, #25078)!
    • The debug_traceCall RPC method now also supports block overrides; making fields like timestamp or the block number settable by the caller (#24871).
    • A new diagnostic tool, geth snapshot inspect-account, allows investigations of snapshot data (#24765).
    • Fixes and preparatory work related to The Merge (#24946, #25006, #24955, #24997).
    • Preparatory work for the upcoming path-based trie storage feature (#24750).
    • Introduce eth/67 protocol, dropping support for GetNodeData (#24093).
    • Optimizations related to block processing (#23500, #24958, #24616).
    • Tests/fuzzing improvements (#25033, #25038, #25037, #25036, #25016, #24249 #24928).
    • Many updates to documentation (#25086, #25058, #25057, #25056, #25040, #25032).
    • Nicer format when showing chain config (#24904).

    For a full rundown of the changes please consult the Geth 1.10.19 release milestone.


    As with all our previous releases, you can find the:

    Source code(tar.gz)
    Source code(zip)
  • v1.10.18(May 25, 2022)

    After a long train of maintenance releases, we are happy to announce this feature release of Geth!

    This release is ready for the Merge transition on the Ropsten testnet, and will activate the Merge on Ropsten when the testnet reaches a total difficulty of 43531756765713534.

    Please ensure you have a beacon chain node configured for the transition. You can find more information about preparing for the Merge in our guide: https://geth.ethereum.org/docs/interface/merge.

    Note: the Merge transition on Ropsten was unsuccessful because the configured TD was reached earlier than expected. Please run geth with --override.terminaltotaldifficulty 100000000000000000000000 on Ropsten for the time being.

    The tracing subsystem has been another focus area of this release cycle. We have replaced the JavaScript interpreter used by the tracing engine with Goja, which offers slightly better performance and implements many ES6 language features. There are minor differences in JS tracing semantics: The built-in functions memory.slice, memory.getUint, stack.peek will now throw an exception and interrupt tracing when accessing out-of-bounds data. They previously returned an empty value for invalid args instead.

    This release contains further breaking changes to tracing APIs. Be sure to check the tracing changelog section. Please also report any incompatibilities you encounter.

    Changes related to the Merge

    • Ropsten: terminal total difficulty is configured for the Merge. (#24876)
    • In RPC APIs where a block number can be given, you can now use "finalized" to refer to the latest finalized block. (#24282)
    • Geth can now serve CL requests to build a new block with very low latency because new blocks are constructed in the background. (#24866)
    • For CL-induced reorgs to a block with unavailable state, Geth now recomputes the state by re-processing ancestor blocks. (#24613)
    • The "engine" API implementation complies with the latest specification version. (#24802, #24855, #24915)
    • Several annoyances related to sync after the Merge have been fixed. (#24691, #24670, #24610)

    Geth changes

    • Geth's default gas limit target is now 30M. (#24680)
    • Geth now prints a warning when launching on the deprecated Rinkeby testnet. (#24884)
    • The free disk space monitor is more aggressive and the critical level at which it will initiate a shutdown is now set to 256 MB by default. (#24781)
    • Geth now prints a small guide when started in --dev mode. (#24759)
    • Geth no longer reports 'Snapshot extension registration failed' as an error. (#24475)
    • The --eth.requiredblocks flag was fixed to work correctly. (#24817)
    • Using geth --dev with a datadir previously initialized by geth init should now work correctly. (#24693)
    • geth init will now complain when creating a Clique-based chain without any configured signers. (#24470)
    • The new geth db check-state-content command checks integrity of trie nodes in the database. (#24840)
    • geth snapshot verify-state now checks for 'dangling' storage entries. (#24643, #24677)
    • evm t8n can now run post-merge state transitions. (#24546)
    • The hex input data of evm run is now verified to have even length. (#24721)
    • Using Clef for clique block signing should be fixed. (#24941)
    • The example code that shows how to use Clef from Python works again. (#24440)

    Core changes

    • When generating a state snapshot from the state trie, Geth now ensures that 'dangling' storage entries from previous snapshots are removed from the database. This fixes an issue that could lead to incorrect EVM execution results after snap sync in certain cases. (#24811)
    • The transaction pool now correctly drops the oldest transactions when truncating the queue to stay below the configured global limit. (#24908)
    • The reference tests have been upgraded to version 10.4. (#24899)
    • EVM MSTORE is now 75% faster. (#24847, #24860)
    • The EVM now implements EIP-3855 (PUSH0 instruction). This feature is not yet active in any fork. (#24039)
    • The ancient store ('freezer') implementation is now exported in package ethdb, and can be used independently of the chain database. (#24684)
    • The miner no longer commits the in-progress block to disk when interrupted by a new chain head event. This improves block creation latency. (#24638)
    • The Goerli testnet has new bootstrap nodes. (#24900)
    • An crash in LES ultralight sync is resolved. (#24641)
    • Several data races related to snap sync are fixed in this release. (#24685)
    • The snap protocol server no longer includes superfluous account proofs when a storage response hits the size limit. (#24885)
    • The snap client now de-duplicates trie node heal requests better, sorting them by the requested state trie path. This can slightly reduce the overall amount of data transferred during snap sync. (#24779)
    • The eth block fetcher now disconnects peers that repeatedly fail to reply to header requests. (#24652)
    • The trie implementation can now optionally trace nodes which were deleted/overwritten by state updates. (#24403)

    Go library changes

    • common/compiler: The Solidity and Vyper wrappers have been removed. This is a breaking change. (#24936)
    • abigen --sol does not work anymore. (#24936)
    • ethclient: Client now has a PeerCount method. (#24849)
    • ethclient/gethclient: GetProof now also returns storage proofs (#24697)
    • accounts/abi: decoder no longer crashes for invalid struct field names. (#24932)
    • accounts/abi: logs are now decoded correctly when all arguments are indexed. (#24792)
    • accounts/abi: ParseSelector now handles tuple arrays. (#24587)
    • signer/fourbyte: 4byte signatures have been updated. (#22865, #24842)
    • mobile: Receipt.EncodeJSON now actually returns JSON instead of RLP. (#24701)
    • accounts/abi/bind: contract calls on the pending block now correctly return the eth_call RPC error, if any. (#24649)
    • core/types: the miner field is now optional when decoding block headers from JSON (#24666)
    • ethdb/remotedb: it is now possible to attach a chain database via RPC. This feature is meant to be used for debugging. (#24905, #24836)

    Tracing changes

    • The JavaScript tracing environment now uses the Goja interpreter instead of Duktape. There should be no noticable differences in semantics resulting from this change. (#23773, #24934)
    • In JS tracers, the log.memory object now has a length method. (#24887)
    • API change: In all tracers (JS, native, structlog), memory content is now captured before the EVM expands it. Previously, tracing would see memory after it had already been affected by the current instruction. (#24867)
    • API change: debug_traceTransaction, in the default structured-logging mode, now returns the refund counter for every EVM execution step. (#24567)
    • API change: in structlog steps, the fields memory and returnData will only be present when they contain non-empty data. (#24547)
    • Tracing now takes refunds and access list costs into account. This fixes inaccuracies: in JS tracers, the intrinsicGas property is now correct even when there are refunds. In the built-in "prestate" tracer, the sender balance added to the result should now be the true balance at the beginning of the transaction. (#24510)
    • In native (Go) tracers, the txhash/blockhash being traced is now available. (#24679)

    RPC / GraphQL changes

    • The GraphQL API now supports retrieving the binary representation of consensus objects. (#24816, #24738)
    • In GraphQL queries, values of type Long (representing a block number, for example) can now be set using a query variable. (#24864)
    • Error messages printed/returned when accessing missing block logs are improved. (#24617)
    • debug_testSignCliqueBlock is not available anymore. (#24837)
    • The new debug_getRawReceipts RPC method returns the binary representation of block receipts. (#24773)
    • The new debug_dbGet method can be used to read from the chain database. (#24739)

    Build changes

    • This release is built with Go 1.18.1 (#24689)
    • Our PPA now publishes .deb packages for Ubuntu 22.04 LTS. (#24813)
    • Incremental builds of Docker images of Geth should be faster. (#24796)
    • Code generation tools are now tracked by go.mod, making go generate more deterministic. (#24682)
    • go-ethereum now uses the toolchain feature 'embed' instead of go-bindata. It is no longer necessary to run go generate after changing certain assets such as JS files. (#24744)
    • go-ethereum now takes advantage of several standard library features available in Go 1.16 and later. (#24886, #24869, #24890, #24861, #24835, #24633)
    • Dependency conflicts related to github.com/btcsuite/btcd v0.22.0 are fixed. (#24700, #24939)

    For a full rundown of the changes please consult the Geth 1.10.18 release milestone.


    As with all our previous releases, you can find the:

    Source code(tar.gz)
    Source code(zip)
  • v1.10.17(Mar 29, 2022)

    This is a maintenance release. This release contains a lot of work in preparation for The Merge, and work for an upcoming change to the way state is stored in go-ethereum.

    This release also adds a new tool to convert 'legacy' receipts into a newer format. During startup, geth will check the database and tell you if you need to perform the conversion. Converting receipts is only needed if geth's ancients database has not been resynced from scratch during the last couple of years. It is recommended to back-up your receipts freezer table (ancients/receipts*) before performing the conversion.

    Compatibility note about core/types: For optimization purposes, types.Header and other types in this package now implement the rlp.Encoder interface. This change can cause incompatibilities because the new method is implemented with pointer receiver. Attempting to RLP-encode unadressable (i.e. non-pointer) values of type Header does not work anymore and will result in an error.

    Change Log

    For a full rundown of the changes please consult the Geth 1.10.17 release milestone.


    As with all our previous releases, you can find the:

    Source code(tar.gz)
    Source code(zip)
  • v1.10.16(Feb 16, 2022)

    The focus of this release is bugfixes.

    Bugfixes

    • Block tracing via debug.traceBlockByHash has sometimes produced inconsistent/corrupt results. Fixed via (#24286).
    • The --whitelist CLI parameter functionality was broken in v1.10.14, and is fixed in this release (#24210).
    • A bug was introduced, and subsequently fixed, which could cause data corruption during mining (#24349).
    • When signing complex datatypes in EIP712-type data, the signing-hash was incorrect. Fixed via (#24220).
    • Evm execution times exported via metrics, were sometimes incorrect. Fixed in (#24304).
    • Range prover edgecases found and fixed (#24266, #24257).
    • Fix an error related to HTTP2 handling (#24292).
    • A lot of spleling-mistkaes and issues related to correctness were fixed (#24194, #24196, #24198, #24205, #24207, #24244, #24270, #24271, #24224, #24372, #24323, #24289, #24263 and #24211).

    New features

    • Work on The Merge includes support for RANDOM opcode (#24141) and various other internal refactorings (#24328, #24280, #24236, #23256).
    • The devp2p binary now supports doing snap/v1 protocol testing against a remote node, which can be used for Hive-testing (#24276).
    • New diagnostic command to show database metadata (#23900)
    • ethclient support for CallContractAtHash (#24355).
    • Support chainId for GnosisSafeTx (#24231).

    Performance

    • Tracing was improved by making the prestate tracer be a native tracer (#24320, #24268).
    • Potentially reduce database allocations in some cases (#24117).
    • Add a set of cross-client external benchmarks (#24050).
    • Improve transaction indexing performance (#24197).

    For a full rundown of the changes please consult the Geth 1.10.16 release milestone.


    As with all our previous releases, you can find the:

    Source code(tar.gz)
    Source code(zip)
  • v1.10.15(Jan 5, 2022)

    This release resolves a few regressions introduced by the previous release. Most importantly, it fixes an issue that could cause peer-to-peer 'eth' connections to lock up.

    Please upgrade ASAP if you are running geth v1.10.12 / .13 / .14.

    • A hang in ancient data serving caused by double-locking is fixed. (#24189)
    • A crash in the LES server related to reorg handling is resolved. (#24189)
    • The SyncProgress method of ethclient.Client works again. (#24199)
    • Several inconsistencies in the GraphQL API are also fixed in this release. (#24190, #24188, #24191)

    For a full rundown of the changes please consult the Geth 1.10.15 release milestone.


    As with all our previous releases, you can find the:

    Source code(tar.gz)
    Source code(zip)
  • v1.10.14(Dec 23, 2021)

    The focus of this release is bug fixes and performance improvements.

    We are especially pleased to announce that this release contains a prototype implementation of the PoW to PoS transition (a.k.a. 'The Merge'). As of this version, Geth is compatible with the Kintsugi testnet spec v3.

    We would also like to thank Team Ipsilon for their development of the EVM optimizations included in this release. EVM bytecode evaluation is now ~20% faster.

    Geth changes

    • A regression in txpool limit handling is resolved. This affects the --pricelimit option, which has been reverted to work exactly as it did in geth v1.10.12. (#24080)
    • Geth can now handle the transition from PoW to PoS. (#23761)
    • In the JavaScript console, long-running JS computation (i.e. for/while loops) can now be interrupted with Ctrl-C. (#23387)
    • A corner-case issue in the transaction hash indexer is resolved. (#24024)
    • Unclean shutdown markers are now updated regularly and report more accurate geth startup/shutdown times. (#24077)
    • In log messages related to RPC method invocations, the key "t" is now called "duration" to prevent a name clash when using the JSON output format. (#24112)

    RPC API changes

    • The engine APIs (enabled in geth --catalyst mode) are now up-to-date for Kintsugi testnet v3. (#23984, #24067, #24075)
    • A panic in the clique_getSigner RPC method is resolved. (#23961)

    Go library changes

    • The EVM implementation has been cleaned up and interpreter loop performance is improved. (#24120, #24048, #24085, #24026, #24031, #24040, #23970, #23952, #23974, #23977, #23967, #24066)
    • In preparation for EIP-3670, the EVM now recognizes the INVALID opcode 0xFE. (#24017)
    • Internal opcode names have been modernized to match Solidity: SHA3 is now KECCAK256, SUICIDE is now SELFDESTRUCT. (#23976, #24022, #24016)
    • Generating Go/Java bindings for contracts with struct-typed constructor parameters now works correctly. (#23940)
    • Built-in EVM trace loggers have moved from core/vm to a dedicated package. (#23892)
    • EIP-712 (typed data signing) structs have moved from signer/core to package signer/core/apitypes. (#24029)

    Networking

    • The eth protocol implementation now uses request IDs (added by eth/66) internally. (#23576)
    • Hashing of eth response data now uses multiple threads, improving sync performance. (#24032)
    • The now-unused 2GB fast sync bloom filter has been removed. (#24047)
    • Serving ancient headers to other peers has been optimized. (#23105)
    • The discv4 test suite is more robust and logs received packets better. (#23966)
    • There are now fuzz tests for the snap protocol message handler. (#23957)

    For a full rundown of the changes please consult the Geth 1.10.14 release milestone.


    As with all our previous releases, you can find the:

    Source code(tar.gz)
    Source code(zip)
  • v1.10.13(Nov 24, 2021)

    Geth v1.10.13 is a scheduled maintenance release. It introduces a few polishes, though nothing major. Fixes wise, it does address a few thorns that affect a small portion of our users.

    New features:

    • Retrospectively enforce account nonces to be less than 2^64-1 (#23853).
    • Configurable genesis gas limit in dev mode via dev.gaslimit (#23686).
    • Sanitize history config fields in the GPO when using toml (#23886).
    • Add support for custom freezer paths in db inspect (#23946).
    • Create evm b11r to build and seal blocks from json (#23843).
    • Extend evm t8n to support signing unprotected txs (#23937).
    • Polish evm t8n to have more meaningful CLI flags (#23934).
    • Implement the 4byte tracer natively in Go (#23882, #23916).
    • Use faster freezer scanning when reiniting leveldb (#23612).
    • Expose the gasUsed field in the evm command (#23919).
    • Improve error messages in the freezer (#23901).

    New fixes:

    • Fix price filtering in tx pool to prevent low price legacy transaction from spamming the pool (#23855).
    • Fix log retrievals for users with very old archive nodes having legacy database formats (#23879).
    • Fix a snap sync issue where a malicious response could crash the syncing node (#23960).
    • Fix a data race in the simulated backed's gas price suggestion (#23898).
    • Fix receiptsRoot field name in the evm command output (#23924).
    • Fix setHead when pointing it back to the genesis (#23949).
    • Fix transaction sender recovery in ethclient (#23877).
    • Fix DNS discovery entry TTLs on Clouflare (#23885).
    • Fix intrinsicGas output in the t9n tool (#23889).

    For a full rundown of the changes please consult the Geth 1.10.13 release milestone.


    As with all our previous releases, you can find the:

    Source code(tar.gz)
    Source code(zip)
  • v1.10.12(Nov 8, 2021)

    Geth v1.10.12 is a scheduled maintenance release, but also contains some significant features!

    The release enables the Arrow Glacier hard-fork, scheduled approximately for the 8th of December. The sole change is to postpone the difficulty-bomb until summer 2022, by which time hopefully The Merge will have happened.

    The release also ships support for a new PoW testnet called Sepolia. This testnet was dreamed up during the merge interop in Athens and it's purpose is to replace Ropsten after the merge as the main cross client testnet. You can access it via geth --sepolia. Being a PoW testnet, it's possible to mine it for Ether to use as test funds.

    Lastly, the release also contains a brand new call tracer implemented in Go, which should be significantly (2.5x) faster than the one currently used. You can use the new tracer via debug.traceTransaction("0xhash", {tracer: "callTracer"}). The original JavaScript tracer is still available for fallback purposes called callTracerLegacy. The latter will be dropped if nobody reports issues with the native one.

    Improvements:

    • Implement the Arrow Glacier hard fork and schedule (#23810).
    • Bake in support for the Sepolia PoW test network (#23730).
    • Switch the call tracer to a fast native Go implementation (#23867, #23708).
    • Optimize nonce handling performance in the txpool (#22231).
    • Support password protected SSH key files in puppeth (#22148).
    • Optimize request/response matching in RPC batch queries (#23856).
    • Support transferring snapshots via geth db export snapshot (#22931).
    • Read chain data atomically from ancients/leveldb, avoiding an extra read (#23566).
    • Improve the hexutil package's big-int encoding performance by 50% (#23780)
    • Remove the xgo cross compiler as docker auto-build limits killed it (#23800).
    • Support invalid RLP blobs (at least fail gracefully) in the state t8n tool (#23771).

    Bug-fixes:

    • Fix a crash in LES serving code (#23865).
    • Fix a data race in the miner's receipt copying code (#23835).
    • Fix a missing snapshot error after recovering from a crash (#23496).
    • Fix a memory leak in Clique if the network temporarilly halts (#23861).
    • Fix a crash if the disk gets full during ethash DAG generation (#23799).
    • Fix chain tracing to not go OOM during long running sessions (#23736).
    • Fix the simulated backend to allow running EIP-1559 transactions (#23838, #23840).
    • Fix an RPC crash when getting the signer of an empty Clique chain (#23832).
    • Fix the total difficulty number of nil-diff genesis blocks in the database (#23793).
    • Fix a crash in abigen generated code if backend header retrieval fails (#23781).

    For a full rundown of the changes please consult the Geth 1.10.12 release milestone.


    As with all our previous releases, you can find the:

    Source code(tar.gz)
    Source code(zip)
  • v1.10.11(Oct 20, 2021)

    Geth v1.10.11 is another bug fix release, fixing an issue with sender not being recovered on pending transactions, and fixing a data corruption issue.

    Changes in this release

    • For pending transactions returned by RPC, the sender address is again reported correctly. This was broken in the previous release. (#23765)
    • The rlpdump command can now turn structured text into RLP. (#23745)
    • A database corruption issue caused by the snapshot system is resolved. (#23635)
    • The evm tool's t9n mode performs even stricter transaction validation. (#23743)
    • You can now use line editing at the puppeth prompt. (#23718)
    • The geth db subcommands now accept (non-hex) string keys. (#23744)

    For a full rundown of the changes please consult the Geth 1.10.11 release milestone.


    As with all our previous releases, you can find the:

    Source code(tar.gz)
    Source code(zip)
  • v1.10.10(Oct 15, 2021)

    Geth v1.10.10 is another bug fix release.

    Geth changes

    • Geth is much less likely to crash during shutdown, especially when mining is active. (#23435, #21992, #22853)
    • The new --rpc.evmtimeout flag allows setting the internal timeout for eth_call. The default timeout is still 5s. (#23645)
    • The geth console supports some ECMAScript 6 features like arrow functions, typed arrays and let bindings (#23721)
    • The console no longer crashes when trying to complete on properties with value 'null' or 'undefined'. (#23701)
    • The evm debugging/testing tool now validates transaction gas limits in 't9n' mode. (#23694)

    RPC API changes

    • A regression in the JS-based call tracer is resolved. (#23667)
    • The new debug_getAccessibleState RPC method finds a block number at which full state is available. (#23646)
    • The new debug_getHeaderRlp RPC method fetches RLP-encoded headers from the database. (#23670, #23677)
    • The sender address is once again returned correctly for very old Frontier-era transactions. (#23683)

    Go library changes

    • For contract calls using accounts/abi/bind, a regression that could lead to incorrect gas estimation is fixed. (#23719)
    • Package accounts/abi now has basic support for Solidity error types. (#23161)
    • Miner stress test tools work again (they were broken in the previous release) (#23699)
    • The transaction recipient address stored in types.Transaction is now truly independent of the address pointer passed to the constructor. (#23376)
    • The Receipt type now implements encoding.BinaryMarshaler, like Transaction (#22806)
    • TxPool.Pending no longer returns an error (#23720)

    Build

    • As a workaround for tracing issues on Alpine Linux, we now set the C stack size to 8MB for release builds. (#23676)
    • Go module vendoring issues related to github.com/karalable/usb are finally resolved. (#23684)
    • This release is built with Go 1.17.2. (#23698)

    For a full rundown of the changes please consult the Geth 1.10.10 release milestone.


    As with all our previous releases, you can find the:

    Source code(tar.gz)
    Source code(zip)
  • v1.10.9(Sep 29, 2021)

    Geth v1.10.9 is a maintenance release containing mostly bug fixes.

    Chain tracing has received quite a bit of attention during this release cycle. JS-based tracing now supports additional callbacks for entry and exit of contract calls, improving performance if processing individual opcodes is not needed.

    Geth command changes

    • The 'evm' command has a new subcommand for testing tx decoding. (#23494)
    • 'evm t8n' now calculates and returns block difficulty. (#23353, #23507)
    • Legacy flags --rpc, --rpcaddr, --rpcport, etc. are no longer supported. (#23358)
    • Legacy debugging flags --pprofport, --pprofaddr, etc. are also no longer supported. (#23368)
    • When initializing Clique-based private networks, zero-length extradata in genesis.json now prints an error message instead of crashing. (#23538)

    Go library changes

    • Contract bindings created by accounts/abi/bind now validate log event signatures. This prevents accidentally decoding events with the wrong signature. (#23230)
    • A crash in accounts/abi when decoding struct-typed Solidity return values is resolved. (#23573)
    • Writes to the ancient database are now batched internally for improved performance. (#23462)
    • Multiple data races in transaction pool code are fixed. (#23474)
    • Comprehensive benchmarks for RLP encoding/decoding of consensus types have been added. (#23190)
    • RLP encoding of slices and arrays is slightly faster. (#23467)
    • rpc.BlockNumber now implements encoding.TextMarshaler. (#23324)
    • The Account type has been moved from package core/state to core/types. (#23567)
    • For crypto/cloudflare/bn256 EC curve, in-place addition and unmarshalling now works correctly. (#23419)
    • A very rare crash in the background 'bloombits' indexer is resolved. (#23437)

    RPC/GraphQL changes

    • JS tracing of EVM execution now provides additional callbacks for call entry/exit. Using these callbacks instead of 'step' can yield a 10-100x tracing speedup if you don't need to process every VM opcode. (#23087)
    • The '4byte' built-in tracer now uses enter/exit. (#23622)
    • A state database corruption bug caused by tracer re-execution of old blocks is resolved. (#23632)
    • The new debug_intermediateRoots method computes per-transaction state roots of a block. (#23594)
    • EVM memory and return data are no longer captured by default when tracing. (#23558)
    • EVM execution is now aborted on the server side when tracing is interrupted. (#23580)
    • Broken WebSocket connections are now detected better and their subscriptions report an error instead of hanging indefinitely. (#23556)
    • personal_sendTransaction now supports both "input" and "data" arguments, just like eth_sendTransaction. (#23476)
    • Log filtering performance is improved. (#23147)
    • Transaction access lists returned by GraphQL are now correct. (#23650)
    • The debug_stacks method now supports an optional filter expression. (#23605)
    • For clique blocks returned by RPC, the "miner" field once again contains the actual block coinbase field instead of the derived block signer. This fixes a regression where clients would no longer be able to verify the block seal signature. (#23466)

    Networking

    • The eth/65 peer-to-peer protocol is no longer supported. Geth only supports eth/66 as of this release. (#23456)
    • The cross-client eth protocol tests suite better distinguishes eth/65 and eth/66. (#23568)
    • ENR sequence numbers are now initialized as a timestamp. This prevents issues when the p2p nodes database is dropped/re-created while keeping the nodekey the same. (#19903)
    • Several data races are resolved in packages p2p and p2p/enode. (#23434)
    • Note: to simplify the ongoing rewrite of eth/downloader, the package has been duplicated temporarily. The additional copy will be removed later. (#23561)

    Build

    • This release is built with Go 1.17. (#23464, #23465, #23468)
    • 32 bit builds of Geth should be fully functional again. (#23543, #23542)
    • We no longer publish .deb packages for Ubuntu 20.10 Gorilla because this version is not supported by Launchpad anymore. (#23470)
    • The 'node' package no longer depends on wallet backends. Specifically, this removes the dependencies on libusb for contract bindings and other uses of the go-ethereum library. If you are using package node, you must now register required account manager backends individually. (#23019)
    • The 'metrics' package, and many packages that depend on it can now be compiled for WebAssembly. (#23449)
    • EVM performance tests no longer run on CI. (#23304)

    For a full rundown of the changes please consult the Geth 1.10.9 release milestone.


    As with all our previous releases, you can find the:

    Source code(tar.gz)
    Source code(zip)
  • v1.10.8(Aug 24, 2021)

    Geth v1.10.8 is a pre-announced hotfix release to patch a vulnerability in the EVM (CVE-2021-39137).

    The exact attack vector will be provided at a later date to give node operators and dependent downstream projects time to update their nodes and software. All Geth versions supporting the London hard fork are vulnerable (the bug is older than London), so all users should update.

    Credits for the discovery go to @guidovranken (working for Sentnl during an audit of the Telos EVM) and reported via [email protected]

    Beside the fix, we're merged in a few tiny polishes and fixes. For a rundown, please consult the Geth 1.10.8 release milestone.


    As with all our previous releases, you can find the:

    Source code(tar.gz)
    Source code(zip)
  • v1.10.7(Aug 12, 2021)

    Geth v1.10.7 is a maintenance release, mostly focusing on a few post-London polishes.

    A few important notes to keep in mind:

    • The return type for oldestBlock in eth_feeHistory was changed from decimal to hex. This is to conform to the updated spec that was released after Geth's London hard-fork release was already made. The input blockCount parameter was also updated, but there Geth will accept both hex and decimal to keep backward compatibility.
    • The -miner.gastarget CLI flag was deprecated and is a noop. This flag is already a noop for networks running the London hard-fork, since it London miners only take into account the -miner.gaslimit flag. For non-London private networks and Geth forks, this might result in a gas bump depending on how the miners are configured.
    • Docker builds were changed from DockerHub Automated Builds to offsite builds and manual pushes to DockerHub. At the same time, we've added support for multi-arch images, the original tags being the metadata image, linking a -amd64 and a -arm64 tags together. No changes are needed for docker users, but keep us posted if something strange happens. On the upside, Geth now has official arm64 docker images too.

    Changes made:

    • Change the oldestBlock return type in eth_feeHistory to hex, accept both decimal and hex as the block count (#23239, #23363).
    • Cap max usable gas in eth_estimateGas better for 1559 transactions (#23309).
    • When deploying multiple contracts via abigen, only parse the ABI once (#22583).
    • Return maxFeePerGas for the gasPrice of pending transactions (#23345).
    • Check cached blocks too when attempting to retrieve a header (#23299).
    • Reject transactions imitated from non EOA accounts (#23303).
    • Reduce allocations a bit while CPU mining ethash (#23199).
    • Deprecate the -miner.gastarget CLI flag (#23213).
    • Switch over to manual docker pushes (#23373).

    Bugs fixed:

    • Fix a nil pointer panic for certain abigen generated code due to missing context initialization (#23188).
    • Fix nil pointer panic in certain automatic access list generation RPC API calls (#23225).
    • Fix a regression that prevented clef from signing a legacy transaction (#23274).
    • Fix a permission error during snapshot based pruning on Windows (#23370).
    • Fix the marshaling of errors from the tracers (#23292).

    For a full rundown of the changes please consult the Geth 1.10.7 release milestone.


    As with all our previous releases, you can find the:

    Source code(tar.gz)
    Source code(zip)
  • v1.10.6(Jul 22, 2021)

    Geth v1.10.6 is a hotfix release. This resolves a consensus failure on the Ropsten testnet.

    Users of Geth on the Ethereum mainnet must upgrade to this release before the London hard-fork activates to remain in consensus. Reminder: the London hard fork is scheduled to occur at block #12965000 on mainnet (~ August 4th, 2021).

    More information about the Ropsten incident

    During testing of the London hardfork on Ropsten, a consensus failure occurred in block 10679538, leading to a network split between OpenEthereum/Besu and Geth/Nethermind. The block contained a transaction from an account with enough funds to cover the effective fee, but too little funds for the transaction's maximum gas price. EIP-1559 mandates that such transactions should be rejected. Geth's implementation of EIP-1559 did not perform the check correctly and accepted the transaction.

    For more information see PR #23244 and the post-mortem writeup.

    Other changes in this release

    • Compatibility with old receipt formats stored in the database is restored. This fixes a regression introduced in Geth v1.10.4 for people with very old chain databases. (#23247)
    • A regression for eth_sendTransaction in light client mode is fixed. (#23215)
    • The Go API function Node.Close() has been fixed to stop the WebSocket server correctly (#23211)

    For a full rundown of the changes please consult the Geth 1.10.6 release milestone.


    As with all our previous releases, you can find the:

    Source code(tar.gz)
    Source code(zip)
  • v1.10.5(Jul 14, 2021)

    Geth v1.10.5 enables the London hard fork for the Ethereum mainnet at block #12965000, estimated for the 4th of August, 2021. Reiterating the London hardfork summary from our previous release (note, extended):

    London Fork EIPs

    Additional notes about the London changes

    • This release contains mainnet activation block number for the London hard fork. (#23176)

    • As with all previous fork-related releases, we have added an override flag which can be used to set the activation block. This flag is temporary and will be removed some time after the fork has successfully activated on mainnet. (#22822, #22972)

    • The Geth transaction pool has been redesigned in order to handle the new fee market created by EIP-1559. Our new pool design attempts to cater to the demands of users—timely inclusion of transactions—as well as allowing efficient ordering of transactions by their effective mining reward. You can read more about how the new pool functions in the transaction pool design document. (#22898)

    • For miners: The transaction selection algorithm provided by Geth specifically picks transactions with the highest effective reward. If a minimum price is configured using the --miner.gasprice command-line flag, transactions providing less miner tips will not be included in blocks. (#22896, #22995)

      EIP-1559 also changes the gas limit voting system. After the London fork, the block gas amount available for transactions is adjusted based on demand. The block capacity is called the gas target, and EIP-1559 defines this target as half the gas limit.

      To ensure that the gas available for transactions is the same as before the fork, the gas limit is doubled at the fork block. If you are using the --miner.gaslimit flag to participate in voting, you need to double the value of this flag to keep voting for the same value as before. You can use the miner_setGasLimit RPC API to update the target without downtime, but be aware that this does not survive a restart. The previous --miner.gastarget flag is deprecated post London and its value will be ignored.

      Example: You are using --miner.gaslimit to vote for a limit of 20M, and the actual block gas limit is 20M. When London activates, the block gas limit will adjust to 40M, but you will still be voting it down towards to 20M if you keep using the same --miner.gaslimit setting. So at some point after the fork, you need to double your --miner.gaslimit value to ensure the gas limit stays at 40M gas.

    • For wallet providers: The default transaction price calculation algorithm for EIP-1559 (eth_maxPriorityFeePerGas) follows the old mechanism, setting the max priority fee to the effective price paid on the network minus the current base fee; and setting the max fee to the priority fee + 2x base fee. This ensures that the total price paid per gas remains the same after the London transition if no explicit user involvement has been made.

      Alternatively, Geth exposes a new eth_feeHistory(blocks, head, percentiles) API endpoint which allows the user to query recent statistical infos about the amount of tips paid to miners and fees burned by transactions. Wallets are recommended to use this endpoint to give users multiple fee options to choose from (#23033).

    • Note for JSON-RPC users: eth_sendTransaction and eth_fillTransaction will create EIP-1559 transactions by default after the fork has activated.

    • Note for users of Go/Java/ObjC contract bindings: accounts/abi/bind will create EIP-1559 transactions automatically after the fork. To take advantage of EIP-1559 in Go applications, please remember to update the go-ethereum module dependency to v1.10.4 or newer in your application's go.mod file. (#23038)

    • Note for users of ethclient: If you send transactions using the ethclient package and want to take advantage of the new fee model provided by EIP-1559, you must adapt your code to create transactions using types.NewTx(&types.DynamicFeeTx{...}). In order to know whether the fork has activated and the new transaction type can be used yet, simply check whether the BaseFee field of the latest block header is non-nil.

    Other changes in this release:

    • Expose contextual infos (block/tx hash, tx index) into the transaction tracer (#23104, #23108).
    • Implement fee history API for better 1559 transaction price suggestions (#23033, #23178).
    • Implement clique_getSinger API for deriving the miner on Clique neworks (#22987).
    • Implement txpool_contentFrom API for retrieving txs of a single account (#22992).
    • Implement miner_setGasPrice API modify the mining gas limit on the fly (#23134).
    • Create new gethclient package for accessing Geth specific RPC APIs. (#22977).
    • Increase the downloader's scratch space to better saturate fast links (#23074).
    • Introduce a mechanism to deprecate config file fields without errors (#23118).
    • Remove the notions of a block hash from the state db (#23126).
    • Improve opcode tracing speed by around 80% (#23016).
    • Sanity check the length of the baseFee field (#23171).
    • Shorter shutdown time for the trie syncer (#23020).
    • Avoid some memory allocations in Clique (#23149).
    • Better build constraints for the fuzzers (#23089, #23137).
    • Alternate builders for docker images (#23069, #23078, #23082, #23083).
    • Remove make as a Dockerfile dependency (#23167).
    • Remove the deprecated LogforStorage type (#23173).

    And of course, the various fixes:

    • Fix a panic in the access list creation RPC API (#23133).
    • Fix transaction queries in GraphQL when backed by a light client (#23052).
    • Fix the tracer to correctly decide if a contract is a precompile or not (#23097).
    • Fix transaction submission for the personal namespace post 1559 (#23179).
    • Fix an ethstats regression that caused transaction counts to not report (#23159).
    • Fix a compatibility issue between old Geth nodes and new abigen code (#23102).
    • Fix a light client hang if the chain is reverted to before the trusted CHT (#23162).
    • Fix incorrect file permissions for the transaction pool local journal (#23090).
    • Fix a context error when calling certain APIs with invalid params (#23062).
    • Fix puppeth dashboard caused by an updated base image (#23168).
    • Fix a shutdown hang in light client mode (#23139).

    For a full rundown of the changes please consult the Geth 1.10.5 release milestone.


    As with all our previous releases, you can find the:

    Source code(tar.gz)
    Source code(zip)
  • v1.10.4(Jun 17, 2021)

    Geth v1.10.4 is a feature release and adds compatibility with the upcoming London hard fork. For more information about the content and scheduling of the fork, please check the London specification document.

    After a long R&D process, and extensive testing, we are pleased to announce that Geth v1.10.4 enables snap sync by default. At the time of this release, geth is able to fully synchronize the Ethereum mainnet in approximately 7 hours (using AWS i3.2xlarge with NVMe SSD).

    London Fork EIPs

    Additional notes about the London changes

    • This release contains testnet activation block numbers for the London hard fork. The numbers are: Ropsten - 10499401, Goerli - 5062605, Rinkeby - 8897988. (#23041)

    • This release does not contain automatic activation of the fork on mainnet. A release containing the mainnet activation block will be provided later, following the ACD decision.

    • As with all previous fork-related releases, we have added an override flag which can be used to set the activation block. This flag is temporary and will be removed some time after the fork has successfully activated on mainnet. (#22822, #22972)

    • The Geth transaction pool has been redesigned in order to handle the new fee market created by EIP-1559. Our new pool design attempts to cater to the demands of users—timely inclusion of transactions—as well as allowing efficient ordering of transactions by their effective mining reward. You can read more about how the new pool functions in the transaction pool design document. (#22898)

    • For miners: The transaction selection algorithm provided by geth specifically picks transactions with the highest effective reward. If a minimum price is configured using the --miner.gasprice command-line flag, transactions providing less fees will not be included in blocks. (#22896, #22995)

      EIP-1559 also changes the gas limit voting system. After the London fork, the block gas amount available for transactions is adjusted based on demand. The block capacity is called the gas target, and EIP-1559 defines this target as half the gas limit.

      To ensure that the gas available for transactions is the same as before the fork, the gas limit is doubled at the fork block. If you are using the --miner.gaslimit flag to participate in voting, you need to double the value of this flag to keep voting for the same value as before.

      Example: You are using --miner.gaslimit to vote for a limit of 20M, and the actual block gas limit is 20M. When London activates, the block gas limit will adjust to 40M, but you will still be voting it down towards to 20M if you keep using the same --miner.gaslimit setting. So at some point after the fork, you need to double your --miner.gaslimit value to ensure the gas limit stays at 40M gas.

    • Note for JSON-RPC users: eth_sendTransaction and eth_fillTransaction will create EIP-1559 transactions by default after the fork has activated.

    • Note for users of Go/Java/ObjC contract bindings: accounts/abi/bind will create EIP-1559 transactions automatically after the fork. To take advantage of EIP-1559 in Go applications, please remember to update the go-ethereum module dependency to v1.10.4 in your application's go.mod file. (#23038)

    • Note for users of ethclient: If you send transactions using the ethclient package and want to take advantage of the new fee model provided by EIP-1559, you must adapt your code to create transactions using types.NewTx(&types.DynamicFeeTx{...}). In order to know whether the fork has activated and the new transaction type can be used yet, simply check whether the BaseFee field of the latest block header is non-nil.

    Command changes

    • For private networks and future public testnets, the initial EIP-1559 basefee can also be set in genesis.json using the baseFeePerGas key. (#23013, #23039)
    • The Clef tool also supports signing EIP-1559 transactions. (#22966)
    • geth --dev no longer allocates excessive amounts of memory on startup. (#22949)
    • The geth --ethstats option now supports special characters such as @ in the node name portion of the URL, specifically so you can put your Twitter handle in there. (#21640)
    • geth db inspect now properly counts internal config data stored in leveldb instead of warning about it being 'unaccounted'. (#22978)
    • There is a new geth snapshot dump command for debugging purposes. (#22795)
    • Geth can no longer read databases created before April 2019. (#22852)
    • The --jspath flag can now expand ~ to the home directory. (#22900)
    • Puppeth can no longer deploy the wallet web page for you. (#22940)
    • The evm tool now exits in error if JSON data provided on stdin is invalid. (#22871)

    RPC/GraphQL changes

    • JSON-RPC and GraphQL APIs have been extended for EIP-1559, following the official OpenRPC specification. (#22964, #23010, #23028, #23027, #23050)
    • You can now configure the lower bound of gas prices returned by eth_gasPrice using the new --gpo.ignoreprice command-line flag of geth. (#22752)
    • JS tracing via debug_traceTransaction and debug_traceBlockByNumber will no longer crash geth if the tracer function result object exceeds duktape's JSON object limits. (#22857)
    • The internal argument object representations of eth_call, eth_sendTransaction, eth_estimateGas have been unified because their fields are very similar. This change should not lead to any differences in behavior, but do let us know via GitHub issues if you find any new argument handling bugs in those methods. (#22718, #22942)
    • The 'catalyst' API handler now properly reverts the effects of failed transactions when creating a block. (#22989)

    Networking

    • Snap sync is enabled by default! (#22973)
    • Snap sync now tracks peer latency/capacity and adjusts request sizes accordingly. (#22876, #22943)
    • The RLPx wire protocol implementation has been optimized, reducing memory allocations and system call load. (#22899)
    • The eth protocol cross-client test suite has been further extended and is more reliable. (#22843, #22535, #22957)
    • Spurious warning logs about failure to 'unregister' eth peers are gone now. (#22908)
    • DNS discovery no longer crashes when geth is started and immediately shut down again. (#22906)
    • A long-standing issue in the validation of eth/64 fork IDs is resolved. (#22879)

    Go library changes

    • Package rlp now supports optional struct fields. This feature was added to simplify the EIP-1559 implementation, but is also generally useful in other contexts. (#22832, #22842)
    • RLP encoding/decoding has been optimized for reduced memory allocations and better performance under high concurrency. (#22858, #22902, #22924, #22927, #22841)
    • On shutdown, the database now waits for background ancient store writes to finish, fixing database corruption issues related to a gap in the chain between ancients and leveldb. (#22878)
    • The consensus test runner and ethereum/tests submodule reference have been updated for London. (#22976, #23047)
    • Mining stress tests have been fixed up and extended for EIP-1559. (#22919, #22930)
    • The elliptic.Curve implementation provided by crypto/secp256k1 is now more correct regarding the point at infinity. This change is not relevant for go-ethereum itself because the affected curve operations are not used, but may be an improvement for alternative/experimental uses of the secp256k1 package. (#22621)
    • Users of SimulatedBackend in package accounts/abi/bind/backends can now simulate blockchain reorgs using the new Fork method. (#22624)
    • A minor correctness issue in transaction pool size accounting is resolved. (#22933)
    • The Compact method of database tables created by rawdb.NewTable now applies the key prefix of the table correctly. (#22911)
    • Commit of trie.Database would no longer writes state key preimages twice. (#23001)
    • The clique consensus engine now checks common invariants on block headers, matching ethash engine behavior. (#22836)
    • Errors are now checked when creating the state root of a genesis block. (#22780)
    • The core/asm EVM assembler no longer treats numbers starting with 00 as hexadecimal. (#22883)

    For a full rundown of the changes please consult the Geth 1.10.4 release milestone.


    As with all our previous releases, you can find the:

    Source code(tar.gz)
    Source code(zip)
  • v1.10.3(May 5, 2021)

    Geth v1.10.3 is a maintenance release, containing bug fixes and performance improvements.

    The performance of the snapshot system has been a big focus in this release cycle. Generating a snapshot after a snap sync is approximately 10 times faster.

    Geth command changes

    • Several race conditions in database access are resolved, reducing the potential of database corruption (#22739, #22728)
    • Large numbers in log messages now have thousands separators (#22665, #22679)
    • Geth no longer warns about database upgrades when starting with an empty database (#22803)
    • The new geth db freezer-index debugging command prints the contents of a freezer table (#22633)
    • geth --dev --datadir ... works again (#22738)
    • Geth now includes the experimental --catalyst mode for eth2 merge testing (#22641, #22697, #22770)
    • Puppeth now supports using ssh-agent for authentication (#22634)

    Go library changes

    • State snapshot generator performance is much improved in this release (#22667, #22470, #22504)
    • It is no longer possible to upgrade snapshot databases generated by pre-Berlin geth (#22663)
    • The RPC client now returns non-2xx HTTP responses as rpc.HTTPError (#22677)
    • The ethash engine now performs less database lookups when verifying uncle headers (#21467)
    • trie.StackTrie has been refactored to improve API semantics. StackTrie methods previously took ownership of key/value byte slices passed to it, which was unintuitive for calling code (#22673, #22686, #22685)

    RPC/GraphQL API changes

    • The gas price oracle deals much better with blocks containing transactions of very low price. Such transactions are typically generated by miners using MEV techniques (#22722)
    • eth_hashrate works again (#22765)
    • debug_traceCall now supports state overrides like eth_call (#22245)
    • EVM Tracing now reports correct gas costs for EIP-2929 state access (#22702)
    • Clef and the external signer account backend now support signing of EIP-2930 access list transactions (#22585)

    Networking

    • Support for eth/64 has been removed. The minimum protocol version is now eth/65 (#22636)
    • The core of snap sync has been re-architected to allow for dynamic request sizes (#22668, #22777)
    • Several other correctness issues in the snap sync client are resolved (#22678, #22789, #22760, #22762, #22761)
    • DNS discovery for the snap protocol now uses the eth protocol node list. The snap-specific node list will be retired later. This is possible because more than 75% of all eth nodes support serving snap (#22808)
    • For eth and snap, the protocol handlers now report additional metrics about response latency (#22608, #22751, #22753). A Grafana dashboard incorporating the new metrics is available here.
    • Several new tests have been added in the cross-client eth protocol test suite. The tests are now more reliable and run as part of pull request CI on Travis (#22698, #22630, #22757, #22749, #22754, #22801)
    • The discv5 message handler now reflects IPv4-in-IPv6 addresses correctly when handling PING (#22703)
    • The DNS node list tools in cmd/devp2p now support setting a size limit for node lists. This was added because the list of mainnet snap protocol nodes overflowed our AWS Route53 account (#22694, #22695)

    Build

    • The Windows build environment has been cleaned up and updated to use GCC 10 (#22811, #22788, #22804, #22821)
    • The crypto/bn256 and crypto/bls12381 packages are now fuzz-tested against gnark-crypto (#22755)
    • go-ethereum now builds correctly on OpenBSD/arm64 (#22693)

    For a full rundown of the changes please consult the Geth 1.10.3 release milestone.


    As with all our previous releases, you can find the:

    Source code(tar.gz)
    Source code(zip)
  • v1.10.2(Apr 8, 2021)

    Geth v1.10.2 is a maintenance release, containing bug fixes and a few minor new features.

    Geth command changes

    • Mining work package notifications can now be changed to contain the complete pending block header instead of a work package array. To enable this functionality, use the --miner.notify.full flag (#22558)
    • Geth will now open chain databases in read-only mode when performing commands that should not modify the database. This fixes several cases where indexing operations and snapshot generation would run as part of commands like geth inspect (#22498)
    • Geth now supports JSON log output using the --log.json flag (#22341)
    • The geth copydb command has been removed because it had been broken for quite a while (#22501)
    • The new geth db dumptrie command shows the state tree entries of an account (#22563)
    • When exporting a chain segment using geth export, the end block is now validated against the chain head to prevent fatal error at the end of export (#22387)
    • geth snapshot commands now support setting the freezer directory using the --datadir.ancient flag (#22486)
    • geth snapsnot prune-state now considers pruning successful before performing a long-running leveldb compaction. This avoids issues when the compaction process is interrupted by an abnormal exit (#22579)
    • geth dumpgenesis and the geth db commands now support the --datadir flag and the network selection flags (--rinkeby, etc.) (#22406, #22407)

    RPC/GraphQL API changes

    • The new eth_createAccessList RPC method allows auto-creating access lists for EIP-2718 transactions (#22604)
    • RPC methods ethash_submitHashrate and miner_hashrate have been renamed from their previous incorrect spelling *hashRate (#22604)
    • The GraphQL API now supports EIP-2718 access list transactions (#22491)
    • eth_chainId now supports chain IDs larger than 64 bits (#22243)
    • The admin_startRPC and admin_stopRPC methods have been renamed to (start|stop)HTTP (#22461)
    • In LES server RPC APIs, the node ID can now be supplied as an enode:// URL or 32-byte hex ID (#22423)
    • Several bugs related to interactions between chain tracing and the snapshot system are resolved (#22473, #22333, #22629)
    • Tracing now reports correct gas amounts for EIP-2718 transactions (#22480)

    Go library changes

    • TransactOpts of accounts/abi/bind now support the NoSend option, which prevents sending the transaction. This can be used with Go contract bindings to 'dry-run' the binding (#22446)
    • The Ledger USB wallet backend now supports EIP-712 'typed data signing' (#22378)
    • Several critical issues related to state snapshot handling are fixed in this release (#22540, #22582, #22551)
    • Background transaction indexing no longer fails for EIP-2718 transactions (#22457)
    • The InfluxDB metrics reporter no longer reports spurious zero values when a histogram has not been updated since the last report (#22590)
    • LES metrics have been renamed to avoid issues in the Prometheus reporter (#22459)
    • The ethstats client no longer crashes when Geth exits immediately after starting (#22587)
    • A rare crash in RPC client subscription handling has been fixed (#22597)

    Networking

    • Several bugs in the implementation of snap sync are fixed in this release, but it is still considered experimental and not yet enabled by default (#22596, #22513, #22553, #22591)
    • When metrics are enabled, the 'eth' protocol handler now measures the latency of message handling (#22581, #22586)
    • The DNS discovery client was fixed to avoid hot-spinning when a DNS node trees contains many invalid/incompatible ENRs (#22566)
    • The DNS discovery deployer tool has been updated to resolve some long-standing bugs. Publishing of large trees is now much more efficient because needless updates are avoided, and better batching means the deployer waits less for the server. The tool now uses the latest AWS and CloudFlare SDK versions. (#22572, #22538, #22537, #22588, #22360)
    • The branch factor of DNS discovery trees has been reduced to ensure that all TXT records fit into the 512-byte limit of DNS/UDP packets (#22533)
    • devp2p nodeset filter -les-server was fixed to deal with the new format of the "les" ENR entry (#22565)
    • The cross-client test suite of the 'eth' protocol has been improved a bit, and now skips eth/66 tests when the node under test does not support protocol version 66 (#22460, #22508, #22482, #22474)
    • LES connection pre-negotiation via UDP now works correctly (#22451)

    For a full rundown of the changes please consult the Geth 1.10.2 release milestone.


    As with all our previous releases, you can find the:

    Source code(tar.gz)
    Source code(zip)
  • v1.10.1(Mar 8, 2021)

    Geth v1.10.1 is a minor release with the sole purpose of enabling the Berlin hard-fork! This hard-fork takes a step towards making opcodes fairer and lays the groundwork to new types of transactions, with lots of interesting features to be built on top.

    The Ethereum Foundation will have a dedicated blog post for Berlin. The essential parts from Geth's perspective is that v1.10.1 is required for Berlin on all testnets and the mainnet too. Below you can find the fork blocks for the different networks and their expected schedules. Please ensure you are upgraded well in advance of the forks to ensure a smooth transition.

    • Ropsten 9,812,189 (10 Mar 2021)
    • Goerli 4,460,644 (17 Mar 2021)
    • Rinkeby 8,290,928 (24 Mar 2021)
    • Mainnet 12,244,000 (14 Apr 2021)

    For a full rundown of the changes please consult the Geth 1.10.1 release milestone.


    As with all our previous releases, you can find the:

    Source code(tar.gz)
    Source code(zip)
  • v1.10.0(Mar 3, 2021)

    After three months of development, we are proud to announce the Geth 1.10.0 release, which is the first release in the 1.10 series.

    There are a lot of new features in this release. While we review the highlights and list individual changes in this overview, we also invite you to read the Geth 1.10 release blog post, which explains the changes in more detail.

    State snapshot system

    In this release, the new snapshot mechanism is enabled by default. Snapshots provide O(1) access to state during EVM execution and also serve as the backbone of the snap sync and state pruning features. Note: should you run into any issues with snapshots, they can still be disabled using the --snapshot=false command-line flag. (#22280, #22177, #22288)

    Snap sync

    This is a new sync mode, which is a replacement for 'fast sync'. In snap sync, the node downloads Ethereum state data much more efficiently than fast sync ever could. With snap sync, we can also finally provide a progress indicator for the state download. Since this is a new feature, and few peers will support snap sync initially, snap sync is not yet enabled by default. We will make it the default in a couple of weeks. (#21482, #22171, #22235, #22272, #22334)

    Berlin fork support

    As of Geth 1.10.0, all EIPs scheduled for the Berlin hard fork are supported in Geth. However, due to ongoing debates about the content and timing of the fork, this release does not activate Berlin at any block number.

    The following Berlin EIPs were already implemented in Geth 1.9.x:

    • EIP-2929: gas cost increases for state access opcodes
    • EIP-2315: simple subroutines for the EVM

    In Geth 1.10.0, support for the following EIPs has been added:

    • EIP-2565: modexp precompile gas cost changes (#22213)
    • EIP-2718: typed transaction envelope (#21502)
    • EIP-2930: access list transactions (#21502)

    We have also updated to the latest consensus tests. (#22009, #22290)

    Offline state pruning

    We have finally added a way to remove old state from the database. Using the geth snapshot prune-state command, you can instruct geth to rebuild the database from the stored snapshot while discarding any data that isn't part of the snapshot window of 128 blocks. Note that this feature is experimental. The pruning process takes a lot of time and geth cannot be used while it is running. We hope to improve this in future releases. (#21724, #22386, #22291, #22294)

    Database changes

    Geth 1.10.0 contains some changes which remove unnecessary data in the blockchain database. In particular, Geth no longer keeps transaction inclusion info for all transactions, and instead limits the storage of inclusion records to one year. For application developers, this change means that very old transactions can no longer be accessed by hash. Note: if you would like to disable this behavior and keep inclusion information for all historical transactions, you can re-enable indexing using the --txlookuplimit=0 command-line flag. (#22293, #22419)

    Storing trie key preimages is now disabled by default. This data is mostly used for contract debugging, e.g. in remix. You can re-enable storing preimages using the --cache.preimages flag. (#22350)

    eth/66 protocol

    Geth now supports eth protocol version 66, which adds request IDs. While the new protocol version is supported on the server side, Geth does not use request IDs yet. (#22241)

    We have also added a cross-client test suite for the new protocol version in the devp2p tool. (#22363)

    les/4 protocol

    Geth 1.10.0 updates the light client protocol to version 4. The new protocol version uses the eth2 Discovery v5 DHT, has better support for servers which can't serve old transactions, and adds support for EIP-2364 ForkID in the handshake. (#21909, #22321, #22357, #22343, #22125, #22347, #21940, #22349, #21930)

    Geth command changes

    • We have fully removed many deprecated command-line flags. (#22263)
    • Geth will now terminate gracefully when the disk is almost full, to avoid database corruption. (#22103)
    • Geth now tracks unclean shutdowns and warns you about them when starting back up. (#21893)
    • Whisper-related flags have been removed. (#22421)
    • USB hardware wallet support is now off by default in geth. It can be enabled using the --usb flag. (#21984, #22130)
    • Using the new --log.json flag, you can instruct geth to output machine-readable logs. (#22207)
    • Geth now provides some low-level leveldb commands for debugging. (#22014)
    • Geth now has a --mainnet flag, which is useful for scripting. (#21932)
    • Geth has a new flag --light.nosyncserve to enable serving light clients before sync completes. This is meant to be used for testing. (#22250)

    RPC changes

    • Non-EIP155 transactions (i.e. transactions which are not replay-protected) are now rejected by the RPC API. Note: you can disable this restriction using the --rpc.allow-unprotected-txs command-line flag. (#22339)
    • More transaction details are logged when submitting through RPC. (#22170)
    • It is now possible to configure the JSON-RPC server on a custom path prefix. (#22184)
    • eth_chainID now returns an error when the chain has not activated EIP-155 yet. (#21686)
    • The WebSocket transport now limits RPC messages to 15MB. They were previously limited to 5MB. (#22385)
    • The 'bad blocks' tracker now persists some recently seen bad blocks, so they can still be accessed after a restart. (#21827)

    GraphQL changes

    We have made several backwards-incompatible changes to GraphQL APIs to better match the specification. In cases where the specification was vague, we have coordinated with the Besu development team to match their implementation.

    • Receipt status is now returned as an integer instead of a hex string. (#22187)
    • estimateGas and cumulativeGas queries now return an integer instead of a hex string. (#22126)
    • The gasLimit and gasUsed fields in responses are now integers instead of hex strings. (#21883)
    • Retrieving blocks by number now works correctly. (#22153)

    Go API changes

    • We have added new constructor functions for transactions in package core/types: types.NewTx and types.SignNewTx. These functions allow creating EIP-2930 access list transactions from Go code. (#21502)
    • The eth.Config type has moved to a new package eth/ethconfig. (#22205)
    • ethconfig.Config has a new field SyncFromCheckpoint, which instructs geth to start syncing at an arbitrary checkpoint (#22123)
    • The event package provides a new helper, event.ResubscribeErr for improved logging of subscription errors. (#22191)
    • The consensus.Engine interface no longer provides the VerifySeal method. (#22274)
    • The rpc.Client.ShhSubscribe method is now deprecated. (#22239)
    • Package accounts/keystore now uses github.com/google/uuid to generate key UUIDs. This affects the type definition of keystore.Key because the type of the Id field is now different. We believe this change won't cause any issues because key UUIDs are not used often. (#22217)

    Build changes

    • We have updated many external dependencies to newer versions. (#22216, #22227, #22134)
    • go-ethereum no longer depends on github.com/wsddn/go-ecdh (#22212)
    • go-ethereum no longer depends on github.com/aristanetworks/goarista (#22211)
    • Automated builds now use Go 1.16 (#22351)
    • Linux builders now use Ubuntu 18.04 Bionic (#22369)
    • The mobile framework is now built against NDK version r21e. (#22368, #22373)

    Optimizations

    This section lists miscellaneous optimizations which were applied during the 1.10.0 development cycle.

    • core: speed up header import (#21967)
    • core/state: convert prefetcher to concurrent per-trie loader (#21047)
    • core: switch to github.com/holiman/bloomfilter/v2 (#22044)
    • core/state/snapshot: write snapshot generator in batch (#22163)
    • core/state/snapshot: merge loops for better performance (#22160)
    • eth/downloader: optimize to avoid a copy in state sync hashing (#22035)
    • eth/protocols/snap: speed up hash checks (#22023)
    • eth: optimize tx broadcast mechanism (#22176)
    • consensus/ethash: implement faster difficulty calculators (#21976)
    • core/txpool: remove "local" notion from the txpool price heap (#21478)
    • eth, core: speed up some tests (#22000)

    Bug fixes

    This section lists miscellaneous bug fixes and changes which were applied during the 1.10.0 development cycle.

    • accounts/abi/bind: fixed unpacking error (#22230)
    • accounts/abi/bind: fix error-handling in wrappers for functions returning structs (#22005)
    • cmd/abigen: clarify abigen alias flag usage (#21875)
    • cmd/clef: don't check file permissions on windows (#22251)
    • cmd/devp2p: fix documentation for eth-test (#22298)
    • cmd/faucet: fix nonce-gap problem (#22145)
    • cmd/faucet: fix websocket race regression after switching to gorilla (#22136)
    • cmd/faucet: sort requests by newest first (#22018)
    • cmd/faucet: support v1.1 Twitter API in faucet, fix puppeth (#22107)
    • cmd/faucet: switch Facebook auth over to mobile site (#22137)
    • cmd/faucet: update the embedded website asset (#22169)
    • cmd/faucet: use Twitter API instead of scraping webpage (#21850)
    • cmd/geth: CLI help fixes (#22220)
    • cmd/geth: dump config for metrics (#22083)
    • cmd/geth: fix js unclean shutdown (#22302)
    • cmd/utils: add workaround for FreeBSD statfs quirk (#22310)
    • cmd/utils: avoid making console preloads absolute (#22109)
    • common/compiler: fix parsing of solc output with solidity v.0.8.0 (#22092)
    • consensus: refactor FinalizeAndAssemble to use Finalize (#21993)
    • core/state/snapshot: ensure Cap retains a min number of layers (#22331)
    • core/state: copy the snap when copying the state (#22340)
    • core/state: fix panic in state dumping (#22225)
    • core: fix temp memory blowup caused by defers holding on to state (#22319)
    • core: reset to genesis when middle block is missing (#22135)
    • core: reset txpool state on sethead (#22247)
    • ethclient: better test suite for ethclient package (#22127)
    • eth/downloader: enhanced test cases for downloader queue (#22114)
    • eth/filters: fix potential deadlock in filter timeout loop (#22178)
    • eth/protocols/eth: fix slice resize flaw (#22181)
    • eth/protocols/snap: track reverts when peer rejects request (#22016)
    • eth/tracers: fix unigram tracer (#22248)
    • eth/tracers: include intrinsic gas in calltracer, expose for all tracers (#22038)
    • eth: improve transaction broadcaset log messages (#22146)
    • internal/ethapi: restore net_version RPC method (#22061)
    • les: don't drop sentTo for normal cases (#22048)
    • metrics: fix cast omission in cpu_syscall.go (#22262)
    • miner, test: fix potential goroutine leak (#21989)
    • miner: avoid sleeping in miner (#22108)
    • node: always show websocket url in logs (#22307)
    • p2p/dnsdisc: fix hot-spin when all trees are empty (#22313)
    • rlp: handle case of normal EOF in Stream.readFull (#22336)
    • tests/fuzzers/abi: better test generation (#22158)
    • tests/fuzzers/abi: fixed one-off panic with int.Min64 value (#22233)
    • tests/fuzzers/les: add fuzzer for les server handler (#22282)
    • tests/fuzzers: added consensys/gurvy library to bn256 differential fuzzer (#21812)
    • tests/fuzzers: fix abi fuzzer (#22199)
    • tests/fuzzers: fix false positive in bitutil fuzzer (#22076)
    • trie: fix bloom crash on fast sync restart (#22332)
    • trie: fix range prover (#22210)

    For a full rundown of the changes please consult the Geth 1.10.0 release milestone


    As with all our previous releases, you can find the:

    Source code(tar.gz)
    Source code(zip)
  • v1.9.25(Dec 11, 2020)

    Geth v1.9.25 is a maintenance release.

    Notable changes in this release:

    • Geth has a new subcommand, geth version-check, which displays known security issues (#21859)
    • The geth --ws.origins flag now supports more expressive origin rules (#21481)
    • Recording of trie key preimages can now be disabled using the --cache.preimages flag (#21402)
    • The accounts/abi/bind package now offers replay-protected transaction signing (#21356)
    • The GraphQL API now always returns status code 400 if there is an error processing the query (#21882)
    • The devp2p nodeset filter command can now find snap-enabled nodes (#21950)
    • The eth protocol test suite has been extended with tests for transaction announcements and malicious announce behavior (#21857, #21792)
    • Support for 'retesteth' has been removed from geth since it is no longer used for tests. Its replacement, the evm t8n tool, was released in Geth v1.9.16 (#21861)
    • We now offer signify/minisign signatures for Geth binary downloads as an alternative to PGP. This is experimental, and not yet advertised on the downloads page (#21798)

    Bug fixes:

    • A crash in LES server handling of the GetProofsV2 message is resolved. See CVE-2020-26264 advisory for more information (#21896)
    • The LES server no longer locks up during geth shutdown (#21927)
    • Clef now correctly derives accounts for Ledger Live devices (#21757)
    • The faucet now ignores URL query parameters in Facebook post URLs (#21838)
    • Light client peer discovery now uses DNS (#21906)
    • go mod vendor of go-ethereum should now work (#21735)
    • The peer connection acceptor doesn't hot-spin anymore when geth runs out of file descriptors (#21878)
    • Using the reexec option for tracing RPC methods no longer crashes the RPC handler (#21830)
    • common.Hash and common.Address now print as hex when using fmt.Println (#21834)
    • A rare deadlock in Discovery v5 message dispatch is fixed (#21858)
    • Failures in internal CPU metrics collection no longer crash geth (#21864)
    • In Go contract bindings generated by abigen, the Raw field of parsed events is now set correctly (#21807)

    For a full rundown of the changes please consult the Geth 1.9.25 release milestone


    As with all our previous releases, you can find the:

    Source code(tar.gz)
    Source code(zip)
  • v1.9.24(Nov 12, 2020)

    Geth v1.9.24 is a security release. It is built with Go v1.15.5, fixing CVE-2020-28362, which has a critical impact for Ethereum. This release also contains a fix for a consensus issue related to mining, which would have triggered a chain split on January 1st 2021.

    We recommend everyone to upgrade to this release or rebuild with Go 1.15.5.

    Although we publish pre-built binaries for many platforms, certain systems may not have Go 1.15.5 available yet. Notably, our official Docker images will most probably not use Go 1.15.5 due to the base image not being updated yet. Please check the end of the release notes on how you can build your custom Docker image with Go 1.15.5.

    If you are building geth from source, please ensure you are building with Go v1.15.5 or above. We do recommend using the latest Geth version, but if you are not mining and cannot upgrade to geth v1.9.24, please rebuild your current version with Go v1.15.5.

    Other changes in this release:

    • Add YOLOv2 testnet definition (#21509, #21745, #21747, #21749).
    • Include the RETURNDATA field to VM traces (#21715).
    • Add fuzz targets for the new stack trie code (#21799).
    • Small optimizations in transaction root derivation (#21728).
    • Further polishes on the black-box eth protocol tester (#21782).
    • Maintain one more snapshot diff layer in preparation of pruning (#21730).
    • Prevent serving snap sync data while snapshot not fully generated (#21682).
    • Implement TAP output for p2p protocol test suites (#21760).
    • Improve snapshot recovery to allow resuming generation after a crash (#21594, #21775).

    Fixed bugs in this release:

    • Fix ethash mining DAG generation for >4GB files (#21793, #21803).
    • Fix a snapshot data corruption if it crashes mid generation (#21804).
    • Fix transaction indexing to better support graceful shutdowns (#21331).
    • Fix a regression that cause the console to terminate on Ctrl+C (#21660).
    • Fix an RPC crash caused by an invalid AccountRange request (#21710).
    • Fix a peer disconnection issue between unsynced LES servers (#21761).
    • Fix an abigen regression that silently discarded an EVM error (#21743).
    • Fix Ledger version parsing to correctly detect data-sign support (#21733).

    For a full rundown of the changes please consult the Geth 1.9.24 release milestone


    You can use the following Dockerfile to build a custom Geth image with Go 1.15.5 while upstream base images get pushed (they usually take quite a few hours):

    # Build Geth in a stock Go builder container
    FROM golang:1.15-alpine as builder
    
    RUN apk add --no-cache make gcc musl-dev linux-headers git bash
    
    # Temporarily pull a custom Go bundle
    ADD https://golang.org/dl/go1.15.5.src.tar.gz /tmp/go.tar.gz
    RUN (cd /tmp && tar -xf go.tar.gz)
    RUN (cd /tmp/go/src && ./make.bash)
    ENV PATH="/tmp/go/bin:${PATH}"
    
    ADD . /go-ethereum
    RUN cd /go-ethereum && make geth
    
    # Pull Geth into a second stage deploy alpine container
    FROM alpine:latest
    
    RUN apk add --no-cache ca-certificates
    COPY --from=builder /go-ethereum/build/bin/geth /usr/local/bin/
    
    EXPOSE 8545 8546 30303 30303/udp
    ENTRYPOINT ["geth"]
    

    As with all our previous releases, you can find the:

    Source code(tar.gz)
    Source code(zip)
  • v1.9.23(Oct 15, 2020)

    Geth v1.9.23 is a maintenance release containing security fixes. This update is recommended for all users.

    Security issues fixed in this release:

    • Mining no longer stops due to sync after the first successful sync round (#21701)
    • Peer-to-peer client names are now truncated in logs to prevent log spam (#21698)

    Other changes in this release:

    • go-ethereum now implements Node Discovery Protocol v5.1 (#21647)
    • The cmd/faucet utility now uses DNS discovery to find LES servers (#21636)
    • Various issues with web3.js console functions are resolved (#21639, #21608, #21629)
    • HTTP/WebSocket upgrade negotiation is more robust (#21646)
    • The 'eth' peer-to-peer protocol test suite now works with more client implementations (#21615)
    • TxPool error handling for invalid transactions is improved (#21683)
    • It is now possible to create BigInt objects from Java using the mobile framework (#21597)
    • The mobile framework build now includes geth-sources.jar, enabling JavaDoc auto-completion (#21596)
    • The Görli testnet bootnode list has been updated (#21659)
    • Clef: the new account_signGnosisSafeTx API method helps with transaction signing using Gnosis Safe (#21593)
    • Clef: account_list requests now work even when when no wallets are present (#21677)

    Optimizations:

    • The new StackTrie implementation is now used for the tx and receipt root hash calculation (#21407, #21699, #21643, #21692)
    • The bloom filter implementation in core/types is now faster and more correct (#21624)
    • The bloombits trie generator is also much faster (#21625)
    • Block header hashes are cached more aggressively in the downloader (#21678)

    For a full rundown of the changes please consult the Geth 1.9.23 release milestone


    As with all our previous releases, you can find the:

    Source code(tar.gz)
    Source code(zip)
  • v1.9.22(Sep 28, 2020)

    Geth v1.9.22 is our usual maintenance release, fixing a few bugs and adding some minor features:

    • Add gpo.maxprice CLI flag to override the upper limit of the automatic gas price suggester (#21531).
    • Add BlockNumber method to ethclient to support retrieving the head block's number (#21500).
    • Extend the call tracer to include additional contextual fields for SELFDESTRUCT (#21549, #21564).
    • Unexpose port 8547 from docker images as GraphQL was merged with HTTP RPC (#21556).
    • Support retroactively setting Petersburg if it coincides with Constantinople (#21473).
    • Support gas estimation against arbitrary blocks, not just pending (#21545. #21601).
    • Extend database inspection results with item counters too beside size (#21495).
    • Dynamically move fast pivot point even during chain sync phase (#21529).
    • Start implementing network protocol testers (#21598, #21603, #21604).
    • Support flexible range proofs for snap sync (#21484. #21199, #21250).
    • Extract rlpx into it's own package for easier protocol tests (#21464).
    • Minor API polishes in the Java mobile framework (#21580).
    • Add fuzzer suite for ABI encoding and decoding (#21217).

    Bugfixes:

    • Print warning if Whisper is present in the config.toml instead of rejecting (#21544).
    • Handle miner suspends/resumption due to sync more gracefully (#21536, #21547).
    • Fix a light client regression that crashed the node after a sync failure (#21537).

    For a full rundown of the changes please consult the Geth 1.9.22 release milestone


    As with all our previous releases, you can find the:

    Source code(tar.gz)
    Source code(zip)
  • v1.9.21(Sep 9, 2020)

    Geth v1.9.21 is a regular maintenance release, the highlights being the removal of whisper, better call tracing and multiple memory stability fixes during fast sync to both stabilize usage as well as to fix a memory leak that lead to crashers before.

    • Remove Whisper as promised a couple months ago (#21487, #21526, #21527)!
    • Minor user experience polishes around legacy Ledger derivation paths (#21517).
    • Implement arbitrary call tracing via debug_traceCall on top of arbitrary blocks (#21338).
    • Expose internal transaction revertals and revert reason in the call_tracer tracer (#21387).
    • Cap the number of in-memory trie nodes during fast sync, fix crasher memory leak (#21491).
    • Prepare the trie syncer for path-based operation to support the upcoming snap sync (#21504).
    • Limit the cached data in the downloader more aggressively to avoid memory fluctuations (#21366).
    • Fix the simulated chain to not allow changing block timestamps if transactions were included (#21334).
    • Fix an ABI parser issue around tuples (#21501).

    For a full rundown of the changes please consult the Geth 1.9.21 release milestone


    As with all our previous releases, you can find the:

    Source code(tar.gz)
    Source code(zip)
  • v1.9.20(Aug 25, 2020)

    Geth v1.9.20 is another maintenance release containing bug fixes and security enhancements. This update is recommended for all users.

    Please note that reverting to Geth v1.9.19 or prior after upgrading to v1.9.20 is not possible without a resync because the blockchain database layout has changed.

    New Features:

    • You can now query the Chain ID using GraphQL (#21451)
    • The evm command can now appends the TX hash to state transition output files (#21406)

    Bug Fixes & Optimizations:

    • Blockchain rewinding and chain repair, i.e. using the SetHead operation, now behave correctly in all cases. An extensive test suite for chain repair has been added. (#21409, #21409)
    • Discovery DHT bootstrapping now works properly in very small private networks. (#21396)
    • Contract code is now stored separately from state tree data in LevelDB. This change will help with future database upgrades. (#21080)
    • Two additional metrics counters for blockchain reorgs have been added. (#21420)
    • Metrics collection is now lock-free, causing less lock contention among peer connections (#21446, #21470)
    • The GetNodeData operation in the eth peer-to-peer protocol now uses the fast-sync bloom filter to speed up request processing. (#21445)
    • Importing block data during fast-sync now performs significantly fewer database reads. (#21468)

    Build Changes:

    • This release is built with the new and shiny Go 1.15 compiler version (#21466)
    • The Ubuntu PPA now contains builds for Ubuntu 20.10 Groovy Gorilla. Ubuntu 19.04 Disco Dingo is no longer supported. (#21461)

    For a full rundown of the changes please consult the Geth 1.9.20 release milestone


    As with all our previous releases, you can find the:

    Source code(tar.gz)
    Source code(zip)
  • v1.9.19(Aug 11, 2020)

    Geth v1.9.19 is our regular biweekly maintenance release. Apart from the numerous bug-fixes however, it also ships a more deterministic transaction sort order during mining (FIFO). The goal is to reduce front-runner spam which abused miner randomness for transactions at the same price level.

    • Sort same-priced transactions by arrival time during mining to reduce front-running (#21358).
    • Persist the trie read cache on shutdown to speed up warmup time after a reboot (#20391).
    • Swap out the block fetcher of les/x to use the same mechanism as eth/6x (#20692).
    • Support setting custom HTTP headers on RCP clients e.g. for authentication (#21392).
    • Refactor node lifecycle management, merge GraphQL onto HTTP endpoint (#21105).
    • Print enode ID of a node too when doing an ENR dump via devp2p (#21270).
    • Trim the build paths to avoid leaking builder infos into the binaries (#21374).
    • Limit concurrent UPnP requests to avoid crashing certain routers (#21390).

    Bugfixes:

    • Fix a potential data corruption by leaking out txpool internals into the miner (#21159).
    • Avoid a light server doing EVM calls during handshake while it's syncing (#21425).
    • Fix the trie clean cache size calculation if snapshots are disabled (#21416).
    • Revert an optimization regression in the JUMPDEST analysis (#21411).
    • Fix EIP 712 structured data signing corner cases (#21306, #21307).
    • Fix round-trip time calculation in the downloader (#21427, #21429).
    • Fix a panic in ethstats on the Görli stats page (#21404, #21434).
    • Fix a hang in the initial fast-sync's state sync phase (#21433).
    • Fix graceful LES server shutdown (#21426).

    Note, if you were using GraphQL previously, it was moved to the HTTP RPC endpoint. The old --graphql.host and --graphql.port flags will not work any more. You might need to adjust your TOML config files accordingly too.

    For a full rundown of the changes please consult the Geth 1.9.19 release milestone


    As with all our previous releases, you can find the:

    Source code(tar.gz)
    Source code(zip)
  • v1.9.18(Jul 27, 2020)

    Geth v1.9.18 is a bugfix release, fixing an occasional fast sync hang in the throttling mechanism (among other improvements):

    • Memory allocation micro-optimizations to improve raw EVM number crunching by 5% (#21336).
    • Fix a regression that made previously persisted --dev chains unable to load back up (#21352).
    • Support configurable developer account (and passphrase) in --dev mode (#21301).
    • Fix downloader throttling that degraded sync and occasionally locked it up (#21263).
    • Fix local gomobile building and fix iOS framework builds (#21361, #21362).
    • Fix stale transaction eviction bug, stabilizing pool churn (#21300).

    For a full rundown of the changes please consult the Geth 1.9.18 release milestone


    As with all our previous releases, you can find the:

    Source code(tar.gz)
    Source code(zip)
  • v1.9.17(Jul 20, 2020)

    Geth v1.9.17 is a small maintenance release (trying to get back onto the biweekly schedule), though it does pack a few punches as well!

    • Enable historical garbage collection for light clients (#19570).
    • Apply --rpc.txfeecap to a few missed endpoints (#21231).
    • Drastically reduce allocations in the transaction pool (#21328).
    • Drastically reduce allocations on certain EVM opcodes (#21222).
    • Raise the default gas limit in --dev mode to 12 million (#21323).
    • Fix ethstats reconnect issue and fix constant Görli drops (#21347).
    • Fix gas estimation if balance / price overflown uint64 (#21346).

    For a full rundown of the changes please consult the Geth 1.9.17 release milestone


    As with all our previous releases, you can find the:

    Source code(tar.gz)
    Source code(zip)
Official Golang implementation of the Ethereum protocol

Go Ethereum Official Golang implementation of the Ethereum protocol. Automated builds are available for stable releases and the unstable master branch

StarWORKS Global 0 Nov 24, 2021
Official Go implementation of the Ethereum protocol

Go Ethereum Official Golang implementation of the Ethereum protocol. Automated builds are available for stable releases and the unstable master branch

null 38.1k Jun 29, 2022
RepoETH - Official Golang implementation of the Ethereum protocol

HANNAGAN ALEXANDRE Powershell Go Ethereum Official Golang implementation of the

Alexandre Hannagan 0 Jan 3, 2022
Official Golang implementation of the Ethereum protocol

Go Ethereum Official Golang implementation of the Ethereum protocol. Automated builds are available for stable releases and the unstable master branch

Covalent 14 Jul 2, 2022
Go language implementation of a blockchain based on the BDLS BFT protocol. The implementation was adapted from Ethereum and Sperax implementation

BDLS protocol based PoS Blockchain Most functionalities of this client is similar to the Ethereum golang implementation. If you do not find your quest

Yongge Wang 0 Jan 1, 2022
A Commander for Go implementation of official Ethereum Client

Young A Commander for Go implementation of official Ethereum Client by zhong-my. Overview Young Dependencies Young stands on the shoulder of many grea

Zhong MingYang 1 Oct 14, 2021
Koisan-chain - Official Golang implementation of the Koisan protocol

Go Ethereum Official Golang implementation of the Koisan protocol. Building the

null 0 Feb 6, 2022
ConsenSys Software 8 Jan 18, 2022
LEO (Low Ethereum Orbit) is an Ethereum Portal Network client.

LEO LEO (Low Ethereum Orbit) is an Ethereum Portal Network client. What makes LEO different from other Portal Network clients is that it uses libp2p f

Valist, Inc. 10 Apr 19, 2022
Ethereum-vanity-wallet - A fork of https://github.com/meehow/ethereum-vanity-wallet but the key can be exported to a JSON keystore file

ethereum-vanity-wallet See https://github.com/meehow/ethereum-vanity-wallet This version: doesn't display the private key let's you interactively expo

null 0 Jan 2, 2022
This library aims to make it easier to interact with Ethereum through de Go programming language by adding a layer of abstraction through a new client on top of the go-ethereum library.

Simple ethereum client Simple ethereum client aims to make it easier for the developers to interact with Ethereum through a new layer of abstraction t

Jero 3 May 1, 2022
Monorepo implementing the Optimistic Ethereum protocol

The Optimism Monorepo TL;DR This is the primary place where Optimism works on stuff related to Optimistic Ethereum. Documentation Extensive documentat

OMG Network 37 Jun 13, 2022
Official Go implementation of the Catcoin project

Go Ethereum Official Golang implementation of the Ethereum protocol. Automated builds are available for stable releases and the unstable master branch

null 1 Jan 7, 2022
Eunomia is a distributed application framework that support Gossip protocol, QuorumNWR algorithm, PBFT algorithm, PoW algorithm, and ZAB protocol and so on.

Introduction Eunomia is a distributed application framework that facilitates developers to quickly develop distributed applications and supports distr

Cong 2 Sep 28, 2021
Go implementation of Ethereum proof of stake

Prysm: An Ethereum Consensus Implementation Written in Go This is the core repository for Prysm, a Golang implementation of the Ethereum Consensus spe

Prysmatic Labs 2.6k Jun 22, 2022
ECIES implementation forked of the `crypto/ecies` package from Ethereum

# NOTE This implementation is direct fork of Kylom's implementation. I claim no authorship over this code apart from some minor modifications. Please

Stichting Nuts 0 Dec 7, 2021
A permissioned implementation of Ethereum supporting data privacy

GoQuorum is an Ethereum-based distributed ledger protocol with transaction/contract privacy and new consensus mechanisms. GoQuorum is a fork of go-eth

ConsenSys Software 4.2k Jun 23, 2022
Mini Blockchain Implementation In Golang Inspired by Go-Ethereum🚀

JP Blockchain ?? ?? Mini Blockchain Implementation In Golang Inspired by Go Ethereum & BlockChain Bar by Lukas (Web3Coach) Features Working Core Compo

Oren Leung 3 Feb 17, 2022
Go-block-api - Golang implementation of Ethereum Block API

Go Ethereum Block API Golang implementation of Ethereum Block API This API can s

zgur.ETH 1 Jan 13, 2022