A permissioned implementation of Ethereum supporting data privacy

Overview

Quorum Slack Build Check Download Docker Pulls

GoQuorum is an Ethereum-based distributed ledger protocol with transaction/contract privacy and new consensus mechanisms.

GoQuorum is a fork of go-ethereum and is updated in line with go-ethereum releases.

Key enhancements over go-ethereum:

  • Privacy - GoQuorum supports private transactions and private contracts through public/private state separation, and utilises peer-to-peer encrypted message exchanges (see Constellation and Tessera) for directed transfer of private data to network participants
  • Alternative Consensus Mechanisms - with no need for POW/POS in a permissioned network, GoQuorum instead offers multiple consensus mechanisms that are more appropriate for consortium chains:
    • Raft-based Consensus - a consensus model for faster blocktimes, transaction finality, and on-demand block creation
    • Istanbul BFT - a PBFT-inspired consensus algorithm with transaction finality, by AMIS.
    • Clique POA Consensus - a default POA consensus algorithm bundled with Go Ethereum.
  • Peer Permissioning - node/peer permissioning, ensuring only known parties can join the network
  • Account Management - GoQuorum introduced account plugins, which allows GoQuorum or clef to be extended with alternative methods of managing accounts including external vaults.
  • Pluggable Architecture - allows adding additional features as plugins to the core geth, providing extensibility, flexibility, and distinct isolation of GoQuorum features.
  • Higher Performance - GoQuorum offers significantly higher performance throughput than public geth

Architecture

GoQuorum Tessera Privacy Flow

The above diagram is very high-level overview of component architecture used by GoQuorum. For more in-depth discussion of the components and how they interact, please refer to lifecycle of a private transaction.

Quickstart

There are several ways to quickly get up and running with GoQuorum. One of the easiest is to use GoQuorum Wizard - a command line tool that allows users to set up a development GoQuorum network on their local machine in less than 2 minutes.

GoQuorum Projects

Check out some of the interesting projects we are actively working on:

Official Docker Containers

The official docker containers can be found under https://hub.docker.com/u/quorumengineering/

Third Party Tools/Libraries

The following GoQuorum-related libraries/applications have been created by Third Parties and as such are not specifically endorsed by J.P. Morgan. A big thanks to the developers for improving the tooling around GoQuorum!

Contributing

GoQuorum is built on open source and we invite you to contribute enhancements. Upon review you will be required to complete a Contributor License Agreement (CLA) before we are able to merge. If you have any questions about the contribution process, please feel free to send an email to [email protected]. Please see the Contributors guide for more information about the process.

Reporting Security Bugs

Security is part of our commitment to our users. At GoQuorum we have a close relationship with the security community, we understand the realm, and encourage security researchers to become part of our mission of building secure reliable software. This section explains how to submit security bugs, and what to expect in return.

All security bugs in GoQuorum and its ecosystem (Tessera, Constellation, Cakeshop, ..etc) should be reported by email to [email protected]. Please use the prefix [security] in your subject. This email is delivered to GoQuorum security team. Your email will be acknowledged, and you'll receive a more detailed response to your email as soon as possible indicating the next steps in handling your report. After the initial reply to your report, the security team will endeavor to keep you informed of the progress being made towards a fix and full announcement.

If you have not received a reply to your email or you have not heard from the security team please contact any team member through GoQuorum slack security channel. Please note that GoQuorum slack channels are public discussion forum. When escalating to this medium, please do not disclose the details of the issue. Simply state that you're trying to reach a member of the security team.

Responsible Disclosure Process

GoQuorum project uses the following responsible disclosure process:

  • Once the security report is received it is assigned a primary handler. This person coordinates the fix and release process.
  • The issue is confirmed and a list of affected software is determined.
  • Code is audited to find any potential similar problems.
  • If it is determined, in consultation with the submitter, that a CVE-ID is required, the primary handler will trigger the process.
  • Fixes are applied to the public repository and a new release is issued.
  • On the date that the fixes are applied, announcements are sent to Quorum-announce.
  • At this point you would be able to disclose publicly your finding.

Note: This process can take some time. Every effort will be made to handle the security bug in as timely a manner as possible, however it's important that we follow the process described above to ensure that disclosures are handled consistently.

Receiving Security Updates

The best way to receive security announcements is to subscribe to the Quorum-announce mailing list/channel. Any messages pertaining to a security issue will be prefixed with [security].

Comments on This Policy If you have any suggestions to improve this policy, please send an email to [email protected] for discussion.

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.

Any project planning to use the crypto/secp256k1 sub-module must use the specific secp256k1 standalone library licensed under 3-clause BSD.

Comments
  • Quorum nodes cannot connect to remote bootnode and nodes

    Quorum nodes cannot connect to remote bootnode and nodes

    System information

    Hello, I have problems of remote connection in 7nodes examples

    Geth version: geth version

    I use docker container of quorum here to deploy 7 nodes examples in quorum. https://github.com/agriessel/quorum-docker

    OS & Version: Windows/Linux/OSX Linux Ubuntu 16.04

    Branch, Commit Hash or Release: git status

    Expected behaviour

    When I run 7nodes examples like your guide by putting all 7 nodes and bootnodes in the same container, all is good

    Now,

    • I have run first 3 nodes and bootnodes in the first container, called container 1. Off course, I used docker option -p 33445:33445 when I run this container 1 so that the port 33445 of bootnode in container can be accessible from 33445 of host machine

    • I run 4 last nodes in the second container, called container 2 on another machine or same machine (I tested both) Of course, The bootnodes option in commands point to bootnode_Enode[host_machine_of_container_1]:33445

    I hope that all 7 nodes that can connect

    Actual behaviour

    Only first 3 nodes in the container can connect each other. These 3 nodes connect to bootnode in the same container 1 (that mean bootnodes run in the same machine)

    When I run bootnode in this container 1, I tried all cases below, but none of them work

    nohup bootnode --nodekeyhex "$BOOTNODE_KEYHEX" --addr="0.0.0.0:33445" 2>>qdata/logs/bootnode.log &

    nohup bootnode --nodekeyhex "$BOOTNODE_KEYHEX" --nat "any" --addr="0.0.0.0:33445" 2>>qdata/logs/bootnode.log &

    nohup bootnode --nodekeyhex "$BOOTNODE_KEYHEX" --nat "extip:hostmachineIP" --addr="0.0.0.0:33445" 2>>qdata/logs/bootnode.log &

    nohup bootnode --nodekeyhex "$BOOTNODE_KEYHEX" --nat "any" --addr="172.17.0.2:33445" 2>>qdata/logs/bootnode.log &

    nohup bootnode --nodekeyhex "$BOOTNODE_KEYHEX" --nat "any" --addr="172.17.0.2:33445" 2>>qdata/logs/bootnode.log &

    172.17.0.2 is IP of container 1

    I have already used admin.addPeer in java script console to connect all of them, but I donot want to do it. More over, when I addPeer in this way, I cannot deploy script1.js in 7nodes examples any more When I type this command PRIVATE_CONFIG=tm1.conf geth --exec 'loadScript("script1.js")' attach ipc:qdata/dd1/geth.ipc

    I receive the error: err creating contract Error: Non-200 status code: &{Status:400 Bad Request StatusCode:400 Proto:HTTP/1.1 ProtoMajor:1 ProtoMinor:1 Header:map[Date:[Thu, 11 May 2017 12:43:20 GMT] Server:[Warp/3.2.8]] Body:0xc427040300 ContentLength:-1 TransferEncoding:[chunked] Close:false Uncompressed:false Trailer:map[] Request:0xc4246a43c0 TLS:} true

    I must remove privateFor in this script script1.js to be successful

    Steps to reproduce the behaviour

    Thanks for your reponse how to connect to remote quorum nodes and solve the problem of deploying contract

    Backtrace

    [backtrace]
    
    question core 
    opened by dungtctin4 46
  • panic: runtime error: invalid memory address or nil pointer dereference

    panic: runtime error: invalid memory address or nil pointer dereference

    System information

    Geth version: geth version Geth Version: 1.9.25-stable Git Commit: 919800f Quorum Version: 21.10.1 Architecture: amd64 Protocol Versions: [65 64 63] Network Id: 1337 Go Version: go1.15.6 Operating System: linux GOPATH= GOROOT=go

    OS & Version: Windows/Linux/OSX Running on Google CLoud Platform GKE Kubernetes / # cat /etc/os-release NAME="Alpine Linux" ID=alpine VERSION_ID=3.14.2 PRETTY_NAME="Alpine Linux v3.14" HOME_URL="https://alpinelinux.org/" BUG_REPORT_URL="https://bugs.alpinelinux.org/"

    Expected behaviour

    GoQuorum should gracefully shut down and restart.

    Actual behaviour

    Private state db is corrupted

    INFO [01-13|10:08:51.915] Initialising Ethereum protocol           name=eth     versions="[65 64 63]" network=1000 dbversion=8
    INFO [01-13|10:08:51.915] Initialising Quorum consensus protocol   name=istanbul versions="[100 99 64]" network=1000 dbversion=8
    WARN [01-13|10:08:51.918] DefaultPrivateStateRepository is nil when calling DefaultState 
    WARN [01-13|10:08:51.918] Head private state missing, resetting chain number=30216 hash="caaab9…a70075"
    panic: runtime error: invalid memory address or nil pointer dereference
    [signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0xc6ecd4]
    
    goroutine 1 [running]:
    github.com/ethereum/go-ethereum/core/types.(*Block).NumberU64(...)
    	github.com/ethereum/go-ethereum/core/types/block.go:348
    github.com/ethereum/go-ethereum/core.(*BlockChain).SetHeadBeyondRoot(0xc000139900, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
    	github.com/ethereum/go-ethereum/core/blockchain.go:687 +0x1f4
    github.com/ethereum/go-ethereum/core.(*BlockChain).SetHead(0xc000139900, 0x0, 0xc0000e8d20, 0x0)
    	github.com/ethereum/go-ethereum/core/blockchain.go:566 +0x45
    github.com/ethereum/go-ethereum/core.(*BlockChain).ResetWithGenesisBlock(0xc000139900, 0xc0000de750, 0x0, 0x0)
    	github.com/ethereum/go-ethereum/core/blockchain.go:838 +0x65
    github.com/ethereum/go-ethereum/core.(*BlockChain).Reset(0xc000139900, 0x1752c84, 0x2b)
    	github.com/ethereum/go-ethereum/core/blockchain.go:831 +0x37
    github.com/ethereum/go-ethereum/core.(*BlockChain).loadLastState(0xc000139900, 0x16de000, 0x0)
    	github.com/ethereum/go-ethereum/core/blockchain.go:518 +0x14ff
    github.com/ethereum/go-ethereum/core.NewBlockChain(0x19d6720, 0xc00042e520, 0xc0004ff260, 0xc00013ef00, 0x19d4ba0, 0xc00014c500, 0x0, 0x0, 0x0, 0x0, ...)
    	github.com/ethereum/go-ethereum/core/blockchain.go:313 +0x9ab
    github.com/ethereum/go-ethereum/eth.New(0xc0003ef1e0, 0xc000348a00, 0x3, 0x0, 0x0)
    	github.com/ethereum/go-ethereum/eth/backend.go:228 +0xd39
    github.com/ethereum/go-ethereum/cmd/utils.RegisterEthService(0xc0003ef1e0, 0xc000348a00, 0x0, 0x3e8, 0x0)
    	github.com/ethereum/go-ethereum/cmd/utils/flags.go:2017 +0xf1
    main.makeFullNode(0xc0005a6840, 0x2549, 0x7, 0xc0006719a0)
    	github.com/ethereum/go-ethereum/cmd/geth/config.go:180 +0x12f
    main.geth(0xc0005a6840, 0x0, 0x0)
    	github.com/ethereum/go-ethereum/cmd/geth/main.go:394 +0xf4
    gopkg.in/urfave/cli%2ev1.HandleAction(0x149ec20, 0x1823898, 0xc0005a6840, 0xc00065d140, 0x0)
    	gopkg.in/urfave/[email protected]/app.go:490 +0x82
    gopkg.in/urfave/cli%2ev1.(*App).Run(0xc0003d5ba0, 0xc000132000, 0x4e, 0x50, 0x0, 0x0)
    	gopkg.in/urfave/[email protected]/app.go:264 +0x5f5
    main.main()
    
    	github.com/ethereum/go-ethereum/cmd/geth/main.go:312 +0x55
    

    Steps to reproduce the behaviour

    Under heavy load with private contracts restart the server

    The issue has been highlighted by investigations from https://github.com/ConsenSys/quorum/issues/1287 into performance.

    Thanks to @frankie-lim-sweeho

    opened by antonydenyer 41
  • Alastria Network · Full sync failed · GoQuorum v2.6.0 (and following)

    Alastria Network · Full sync failed · GoQuorum v2.6.0 (and following)

    I'm testing uploading the Alastria Quorum (v1.8.18) to new version (v2.7.0 and v20.10.0).

    But the chain syncronization fails, in full mode. Fast mode finish right.

    We use the well-know genesis node for Alastria node:

    https://github.com/alastria/alastria-node/blob/testnet2/data/genesis.json

    And the command line looks like:

    geth --datadir /root/alastria/data --networkid 83584648538 --identity VAL_DigitelTS_T_2_8_01 --permissioned --cache 10 --rpc --rpcaddr 127.0.0.0 --rpcapi admin,db,eth,debug,miner,net,shh,txpool,personal,web3,quorum,istanbul --rpcport 22000 --port 21000 --istanbul.requesttimeout 10000 --ethstats VAL_DigitelTS_T_2_8_01:[email protected]:80 --verbosity 3 --emitcheckpoints --targetgaslimit 8000000 --syncmode full --gcmode full --vmodule consensus/istanbul/core/core.go=5 --debug --vmdebug --nodiscover --mine --minerthreads 2
    

    But can't get past block 8597100. It happens in these both version upgrades we are testing:

    > admin.nodeInfo.name
    "Geth/VAL_DigitelTS_T_2_8_01/v1.9.7-stable-6005360c(quorum-v2.7.0)/linux-amd64/go1.15.2"
    > admin.nodeInfo.name
    "Geth/VAL_DigitelTS_T_2_8_01/v1.9.7-stable-af752518(quorum-v20.10.0)/linux-amd64/go1.15.2"
    

    The log its almost the same in both versions:

    Number: 8597101
    Hash: 0xe4a2d78d83c995c1f756a7813b07b93c77b975eb5ec0a7ea7d16b6636649b2e5
             0: cumulative: 48864 gas: 48864 contract: 0x0000000000000000000000000000000000000000 status: 1 tx: 0x5136041eb879d49699e76bf64aed8207376cd0d1f42aa20d80613bad309bece4 logs: [0xc0004bc790 0xc0004bc840]
    bloom: 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000100000000000000000000000040000000000000000000000000000000000000000000000000
    0000000000100000000000000000000000000000000000000002000000000000000200000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000400000000000000000000000000000 state:
             1: cumulative: 97728 gas: 48864 contract: 0x0000000000000000000000000000000000000000 status: 1 tx: 0xb0e8e529893614560fcd421310d68cd03794fe8a22e36d5140ba6cde5b4300af logs: [0xc0004bc8f0 0xc0004bc9a0]
    bloom: 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000100000000000000000000000040000000000000000000000000000000000000000000000000
    00000000001000000000000000000000000000000000000000020000000000000002000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    00000000000000000000000000000000000000100000000000000000000000000000000400000000000000000000000000000 state:
    Error: invalid merkle root (remote: 0f6d6606b447b6fd26392f999e84be08fdf8b71f956b83116017dbb371ea1f1a local: 8a6cab008e2572a774a3c1eadc36269fa65662471c088652853db94e38ff8e59)
    ##############################
    WARN [11-09|15:18:19.392|eth/downloader/downloader.go:336] Synchronisation failed, dropping peer    peer=d94e041d29046c47 err="retrieved hash chain is invalid"
    ERROR[11-09|15:18:21.002|core/blockchain.go:2214]
    ########## BAD BLOCK #########
    Chain config: {ChainID: 83584648538 Homestead: 0 DAO: <nil> DAOSupport: false EIP150: 0 EIP155: 0 EIP158: 0 Byzantium: 0 IsQuorum: true Constantinople: <nil> TransactionSizeLimit: 0 MaxCodeSize: 24 Petersburg:
     <nil> Istanbul: <nil> Engine: istanbul}
    

    This problem does not happen with the current stable Alastria version: the full syncronization finish right:

    Geth/VAL_DigitelTS_T_2_8_00/v1.8.18-stable(quorum-v2.2.2)/linux-amd64/go1.9.5
    

    Is necessary to be able to recreate the chain in full mode before in order to upgrade the network clients.

    Full log of fail sincronization, until "BAD BLOCK" message in:

    FULL LOG log.err.txt.gz

    rwxrwxrwx 1 ladmin ladmin 44902 Dec 15 13:11 log.err.txt.gz
    

    FULL LOG

    Related links:

    • https://blkexplorer1.telsius.alastria.io/block/8597101
    • https://blkexplorer1.telsius.alastria.io/block/8597100
    • https://docs.goquorum.consensys.net/en/stable/Reference/Logging%20and%20Errors/#resolution-of-database-corruption-issues (doesn't apply)
    • https://docs.goquorum.consensys.net/en/stable/Reference/Logging%20and%20Errors/#resolution-of-database-corruption-issues (doesn't apply)
    opened by alejandroalffer 40
  • New tenant added in an existing network is not getting identified from other nodes in the network

    New tenant added in an existing network is not getting identified from other nodes in the network

    I have setup a network enabling multitenancy with Quorum 21.7.1 and Tessera 21.7.2 integrated with hashicorp vault(docker image - quorumengineering/tessera:hashicorp-21.7.2)

    Initially each node had one tenant. Some transactions were performed. Then in the existing network I tried adding one new tenant in Node1.

    The steps I followed -

    1. Created new key pair in the hashicorp vault
    2. Updated the tessera config jason like :

    "keys": { "hashicorpKeyVaultConfig": { "url": "http://x.x.x.x:8200" }, "keyData": [ { "hashicorpVaultSecretEngineName": "xxx", "hashicorpVaultSecretName": "xxx-tessera-key", "hashicorpVaultPrivateKeyId": "privateKey", "hashicorpVaultPublicKeyId": "publicKey" }, { "hashicorpVaultSecretEngineName": "xxx", "hashicorpVaultSecretName": "yyy-tessera-key", "hashicorpVaultPrivateKeyId": "privateKey", "hashicorpVaultPublicKeyId": "publicKey" } ] }, "alwaysSendTo": [], "features": { "enableMultiplePrivateStates": "true" }, "residentGroups":[ { "name":"private", "description":"default privacy group", "members":["XXX"] }, { "name":"PS1", "description":"Privacy Group 1", "members":["YYY"] } ]

    1. restarted tessera and quorum in Node1.
    2. Initiated private transaction from Node2 keeping the new tenant of Node 1(i.e. PS1 resident group) as party of the txn. But got error in contract mining - Error: Non-200 status code: &{Status:404 Not Found StatusCode:404 Proto:HTTP/1.1 ProtoMajor:1 ProtoMinor:1 Header:map[Content-Length:[73] Content-Type:[text/plain] Date:[Fri, 12 Nov 2021 16:22:58 GMT] Server:[Jetty(9.4.25.v20191220)]] Body:0xc01dab0e00 ContentLength:73 TransferEncoding:[] Close:false Uncompressed:false Trailer:map[] Request:0xc01d7c1600 TLS:} undefined undefined

    Error in Tessera log -

    2021-11-12 12:51:34.443 [qtp751413576-33] INFO c.q.tessera.q2t.TransactionResource - Enter Request : POST : /sendraw 2021-11-12 12:51:34.474 [qtp751413576-33] INFO c.q.t.d.EncryptedTransactionDAOImpl - Stored transaction sswThPBnMMW+e9PSRVF2g6YpjRiRxrLFgBhLVYAS0KjpyItrsJ9aeTzDGiz9naUWRnzgCm6kRJaWf1bHc+7tqg== 2021-11-12 12:51:34.475 [qtp751413576-33] WARN c.q.t.a.e.KeyNotFoundExceptionMapper - Recipient not found for key: JVBix+8O4Ch7xi7j7fa372iC7Ssp3Op7LnT37Ft5Rms= 2021-11-12 12:51:34.475 [qtp751413576-33] INFO c.q.tessera.q2t.TransactionResource - Exit Request : POST : /sendraw 2021-11-12 12:51:34.475 [qtp751413576-33] INFO c.q.tessera.q2t.TransactionResource - Response for sendraw : 404 Not Found

    Community Support 
    opened by Purbaja 32
  • GoQuorum Geth Crash with fatal error: concurrent map iteration and map write

    GoQuorum Geth Crash with fatal error: concurrent map iteration and map write

    System information

    Geth version: geth version Geth Version: 1.9.25-stable Git Commit: 919800f019cc5d2b931b5cd81600640a8e7cd444 Quorum Version: 21.10.0 Architecture: amd64 Protocol Versions: [65 64 63] Network Id: 1337 Go Version: go1.15.6 Operating System: linux GOPATH= GOROOT=go

    OS & Version: Windows/Linux/OSX Running on Google CLoud Platform GKE Kubernetes / # cat /etc/os-release NAME="Alpine Linux" ID=alpine VERSION_ID=3.14.2 PRETTY_NAME="Alpine Linux v3.14" HOME_URL="https://alpinelinux.org/" BUG_REPORT_URL="https://bugs.alpinelinux.org/"

    Expected behaviour

    When transactions are send to the Geth RPC, it continue to process the txn and return receipt without crashing.

    Actual behaviour

    Geth (GoQuorum) crash with "fatal error: concurrent map iteration and map write" randomly, especially when we are sending > ~10 send transaction call per seconds to Geth.

    Steps to reproduce the behaviour

    Keep sending private smart contract transaction to Geth, at more than ~10 Txn per seconds, it would randomly crash. With public smart contract transaction, it does not crash even with 100 TPS.

    Backtrace

    Full log attached

    fatal error: concurrent map iteration and map write
    
    goroutine 82381 [running]:
    runtime.throw(0x17480af, 0x26)
    	runtime/panic.go:1116 +0x72 fp=0xc00db61980 sp=0xc00db61950 pc=0x450c52
    runtime.mapiternext(0xc00db61aa8)
    	runtime/map.go:853 +0x554 fp=0xc00db61a00 sp=0xc00db61980 pc=0x429f14
    github.com/ethereum/go-ethereum/core/state.Storage.Copy(0xc00b8561e0, 0xc00bc9cc00)
    	github.com/ethereum/go-ethereum/core/state/state_object.go:54 +0x156 fp=0xc00db61b18 sp=0xc00db61a00 pc=0x9541b6
    github.com/ethereum/go-ethereum/core/state.(*stateObject).deepCopy(0xc00da03400, 0xc00db86000, 0xc00db61c98)
    	github.com/ethereum/go-ethereum/core/state/state_object.go:439 +0x196 fp=0xc00db61c00 sp=0xc00db61b18 pc=0x956f96
    github.com/ethereum/go-ethereum/core/state.(*StateDB).Copy(0xc00dad2000, 0xc00db29e00)
    	github.com/ethereum/go-ethereum/core/state/statedb.go:794 +0x752 fp=0xc00db61f28 sp=0xc00db61c00 pc=0x95e8b2
    github.com/ethereum/go-ethereum/miner.(*worker).pending(0xc0008f78c0, 0x1711dad, 0x7, 0x0, 0x0, 0x0)
    	github.com/ethereum/go-ethereum/miner/worker.go:294 +0x290 fp=0xc00db61ff0 sp=0xc00db61f28 pc=0xe9da70
    github.com/ethereum/go-ethereum/miner.(*Miner).Pending(...)
    	github.com/ethereum/go-ethereum/miner/miner.go:187
    github.com/ethereum/go-ethereum/eth.(*EthAPIBackend).StateAndHeaderByNumber(0xc000ae8f60, 0x19bd080, 0xc00917c270, 0xfffffffffffffffe, 0xc00d7f7960, 0x0, 0x0, 0x3c, 0x21e9fae)
    	github.com/ethereum/go-ethereum/eth/api_backend.go:174 +0x2a5 fp=0xc00db620e8 sp=0xc00db61ff0 pc=0xf00125
    github.com/ethereum/go-ethereum/eth.(*EthAPIBackend).StateAndHeaderByNumberOrHash(0xc000ae8f60, 0x19bd080, 0xc00917c270, 0xc00f8c9188, 0x0, 0x0, 0x0, 0xc00db4fb00, 0xc00dba2a80, 0x181fe70, ...)
    	github.com/ethereum/go-ethereum/eth/api_backend.go:192 +0x578 fp=0xc00db62260 sp=0xc00db620e8 pc=0xf00998
    github.com/ethereum/go-ethereum/internal/ethapi.DoCall(0x19bd080, 0xc00917c270, 0x19dc320, 0xc000ae8f60, 0xc00b9df868, 0xc00f759240, 0xc00f8c99f8, 0xc00b205a20, 0xc00db00580, 0xc00b205a00, ...)
    	github.com/ethereum/go-ethereum/internal/ethapi/api.go:944 +0x106 fp=0xc00db62648 sp=0xc00db62260 pc=0xdb73a6
    github.com/ethereum/go-ethereum/internal/ethapi.DoEstimateGas.func1(0x1cc352, 0x19bd000, 0xc00bc9c4e0, 0x0, 0x0)
    	github.com/ethereum/go-ethereum/internal/ethapi/api.go:1137 +0x193 fp=0xc00db62fc8 sp=0xc00db62648 pc=0xdcf4b3
    github.com/ethereum/go-ethereum/internal/ethapi.DoEstimateGas(0x19bd080, 0xc00917c270, 0x19dc320, 0xc000ae8f60, 0xc00b9df868, 0xc00f759240, 0xc00f8c99f8, 0xc00b205a20, 0xc00db00580, 0xc00b205a00, ...)
    	github.com/ethereum/go-ethereum/internal/ethapi/api.go:1149 +0x1fa fp=0xc00db63268 sp=0xc00db62fc8 pc=0xdb8ada
    github.com/ethereum/go-ethereum/internal/ethapi.(*SendTxArgs).setDefaults(0xc00b9df810, 0x19bd080, 0xc00917c270, 0x19dc320, 0xc000ae8f60, 0x0, 0x0)
    	github.com/ethereum/go-ethereum/internal/ethapi/api.go:1894 +0x299 fp=0xc00db63380 sp=0xc00db63268 pc=0xdbfcb9
    github.com/ethereum/go-ethereum/internal/ethapi.(*PublicTransactionPoolAPI).SendTransaction(0xc00113fce0, 0x19bd080, 0xc00917c270, 0x0, 0x0, 0xc00e963040, 0x4, 0x4, 0x0, 0x0, ...)
    	github.com/ethereum/go-ethereum/internal/ethapi/api.go:2075 +0x1d7 fp=0xc00db63828 sp=0xc00db63380 pc=0xdc2ed7
    runtime.call256(0xc006367dd0, 0xc0009fccb8, 0xc00bca4690, 0xc0000000f0)
    	runtime/asm_amd64.s:543 +0x5c fp=0xc00db63938 sp=0xc00db63828 pc=0x48821c
    reflect.Value.call(0xc020b52c00, 0xc0009fccb8, 0x13, 0x170d454, 0x4, 0xc00bbfbe00, 0x3, 0x3, 0xc00bbfbe30, 0xc00b2059c0, ...)
    	reflect/value.go:476 +0x8c7 fp=0xc00db63b50 sp=0xc00db63938 pc=0x4bcc87
    reflect.Value.Call(0xc020b52c00, 0xc0009fccb8, 0x13, 0xc00bbfbe00, 0x3, 0x3, 0x16, 0x7fa8ce35ee58, 0x30)
    	reflect/value.go:337 +0xb9 fp=0xc00db63bd0 sp=0xc00db63b50 pc=0x4bc179
    github.com/ethereum/go-ethereum/rpc.(*callback).call(0xc002091020, 0x19bd080, 0xc00917c270, 0xc00f363c20, 0x13, 0xc00b2059c0, 0x1, 0x1, 0x0, 0x0, ...)
    	github.com/ethereum/go-ethereum/rpc/service.go:206 +0x2c5 fp=0xc00db63cd8 sp=0xc00db63bd0 pc=0xbbcfc5
    github.com/ethereum/go-ethereum/rpc.(*handler).runMethod(0xc00eb08fc0, 0x19bd080, 0xc00917c210, 0xc00ed83810, 0xc002091020, 0xc00b2059c0, 0x1, 0x1, 0x1)
    	github.com/ethereum/go-ethereum/rpc/handler.go:416 +0xd9 fp=0xc00db63d48 sp=0xc00db63cd8 pc=0xbb45b9
    github.com/ethereum/go-ethereum/rpc.(*handler).handleCall(0xc00eb08fc0, 0xc0055b81e0, 0xc00ed83810, 0x203001)
    	github.com/ethereum/go-ethereum/rpc/handler.go:360 +0x345 fp=0xc00db63e30 sp=0xc00db63d48 pc=0xbb34a5
    github.com/ethereum/go-ethereum/rpc.(*handler).handleCallMsg(0xc00eb08fc0, 0xc0055b81e0, 0xc00ed83810, 0x19a6001)
    	github.com/ethereum/go-ethereum/rpc/handler.go:298 +0x1be fp=0xc00db63ef8 sp=0xc00db63e30 pc=0xbb29fe
    github.com/ethereum/go-ethereum/rpc.(*handler).handleMsg.func1(0xc0055b81e0)
    	github.com/ethereum/go-ethereum/rpc/handler.go:139 +0x46 fp=0xc00db63f68 sp=0xc00db63ef8 pc=0xbc2666
    github.com/ethereum/go-ethereum/rpc.(*handler).startCallProc.func1(0xc00eb08fc0, 0xc00e595e00)
    	github.com/ethereum/go-ethereum/rpc/handler.go:226 +0xd2 fp=0xc00db63fd0 sp=0xc00db63f68 pc=0xbc2832
    runtime.goexit()
    	runtime/asm_amd64.s:1374 +0x1 fp=0xc00db63fd8 sp=0xc00db63fd0 pc=0x489a21
    created by github.com/ethereum/go-ethereum/rpc.(*handler).startCallProc
    	github.com/ethereum/go-ethereum/rpc/handler.go:222 +0x66
    
    goroutine 1 [chan receive, 9 minutes]:
    github.com/ethereum/go-ethereum/node.(*Node).Wait(...)
    	github.com/ethereum/go-ethereum/node/node.go:445
    main.geth(0xc00012a580, 0x0, 0x0)
    	github.com/ethereum/go-ethereum/cmd/geth/main.go:399 +0x157
    gopkg.in/urfave/cli%2ev1.HandleAction(0x149dc00, 0x18226e0, 0xc00012a580, 0xc0004bc060, 0x0)
    	gopkg.in/urfave/[email protected]/app.go:490 +0x82
    gopkg.in/urfave/cli%2ev1.(*App).Run(0xc0000a0000, 0xc00003c500, 0x49, 0x50, 0x0, 0x0)
    	gopkg.in/urfave/[email protected]/app.go:264 +0x5f5
    main.main()
    	github.com/ethereum/go-ethereum/cmd/geth/main.go:312 +0x55
    

    crash.log.zip

    Community Support 
    opened by frankie-lim-partior 31
  •  transaction to be stuck in pending state

    transaction to be stuck in pending state

    I'm using version V2.2.3, and I'll loop through the test cases.Trading will be suspended between 15 and 20w after two tests.Pending num is 30000. After I restart the node, the 30000 data can be synchronized. image image Contracts are submitted all the time, but are not synchronized with other nodes,After I restart the node, the 30000 data can be synchronized. I also got a new error on the other nodes,when that node restarts. image

    opened by wenhuancai 27
  • panic: runtime error: invalid memory address or nil pointer dereference

    panic: runtime error: invalid memory address or nil pointer dereference

    TLDR:

    quorum geth crashes:

    panic: runtime error: invalid memory address or nil pointer dereference
    [signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0xbd4ef0]
    

    when running 7nodes example on host machine.

    System information

    geth version
    Geth
    Version: 1.7.2-stable
    Git Commit: ee498061b5a74bf1f3290139a53840345fa038cb
    Quorum Version: 2.0.1
    Architecture: amd64
    Network Id: 1
    Go Version: go1.9.3
    Operating System: linux
    

    I have tried both

    git checkout tags/v2.0.1
    

    and

    git checkout tags/v2.0.2
    

    Both result in the same error behavior below.

    For details how I compiled it, see quorum-examples/non-vagrant/README.md

    Expected behaviour

    That raft consensus 7nodes are starting up, exactly like in the vagrant virtualbox 7nodes example.

    @jpmsam had suggested to me, to run quorum outside of vagrant (like in the 7nodes example), for TPS speed improvements.

    Actual behaviour

    qdata/1.log

    nohup: appending output to 'nohup.out'
    INFO [04-23|10:48:57] Starting peer-to-peer node               instance=Geth/v1.7.2-stable-df4267a2/linux-amd64/go1.9.3
    [...]
    2018-04-23 10:48:59.905833 I | rafthttp: added peer 6
    2018-04-23 10:48:59.905860 I | rafthttp: starting peer 7...
    2018-04-23 10:48:59.905873 I | rafthttp: started HTTP pipelining with peer 7
    2018-04-23 10:48:59.906302 I | rafthttp: started peer 7
    2018-04-23 10:48:59.906336 I | rafthttp: added peer 7
    raft2018/04/23 10:48:59 INFO: 1 became follower at term 0
    raft2018/04/23 10:48:59 INFO: newRaft 1 [peers: [], term: 0, commit: 0, applied: 0, lastindex: 0, lastterm: 0]
    raft2018/04/23 10:48:59 INFO: 1 became follower at term 1
    2018-04-23 10:48:59.906940 I | rafthttp: started streaming with peer 6 (writer)
    2018-04-23 10:48:59.906975 I | rafthttp: started streaming with peer 6 (writer)
    INFO [04-23|10:48:59] Blockchain manager stopped 
    INFO [04-23|10:48:59] Stopping Ethereum protocol 
    2018-04-23 10:48:59.907992 I | rafthttp: started streaming with peer 6 (stream MsgApp v2 reader)
    2018-04-23 10:48:59.908070 I | rafthttp: started streaming with peer 6 (stream Message reader)
    2018-04-23 10:48:59.908114 I | rafthttp: started streaming with peer 7 (writer)
    2018-04-23 10:48:59.908123 I | rafthttp: started streaming with peer 7 (writer)
    2018-04-23 10:48:59.908136 I | rafthttp: started streaming with peer 7 (stream MsgApp v2 reader)
    2018-04-23 10:48:59.908196 I | rafthttp: started streaming with peer 7 (stream Message reader)
    panic: runtime error: invalid memory address or nil pointer dereference
    [signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0xbd4ef0]
    
    goroutine 288 [running]:
    github.com/ethereum/go-ethereum/eth/filters.(*EventSystem).eventLoop(0xc420f67080)
    	/jpmorganchase_quorum/build/_workspace/src/github.com/ethereum/go-ethereum/eth/filters/filter_system.go:417 +0x330
    created by github.com/ethereum/go-ethereum/eth/filters.NewEventSystem
    	/jpmorganchase_quorum/build/_workspace/src/github.com/ethereum/go-ethereum/eth/filters/filter_system.go:112 +0x104
    

    qdata/2.log

    nohup: appending output to 'nohup.out'
    INFO [04-23|10:48:57] Starting peer-to-peer node               instance=Geth/v1.7.2-stable-df4267a2/linux-amd64/go1.9.3
    [...]
    2018-04-23 10:48:59.887429 I | rafthttp: added peer 7
    raft2018/04/23 10:48:59 INFO: 2 became follower at term 0
    raft2018/04/23 10:48:59 INFO: newRaft 2 [peers: [], term: 0, commit: 0, applied: 0, lastindex: 0, lastterm: 0]
    raft2018/04/23 10:48:59 INFO: 2 became follower at term 1
    2018-04-23 10:48:59.887453 I | rafthttp: started streaming with peer 7 (stream MsgApp v2 reader)
    2018-04-23 10:48:59.887518 I | rafthttp: started streaming with peer 7 (writer)
    2018-04-23 10:48:59.887560 I | rafthttp: started streaming with peer 7 (stream Message reader)
    2018-04-23 10:48:59.887615 I | rafthttp: started streaming with peer 7 (writer)
    INFO [04-23|10:48:59] Blockchain manager stopped 
    INFO [04-23|10:48:59] stopping raft protocol handler... 
    2018-04-23 10:48:59.888434 I | rafthttp: stopping peer 1...
    2018-04-23 10:48:59.888442 I | rafthttp: stopped streaming with peer 1 (writer)
    [...]
    2018-04-23 10:48:59.889374 I | rafthttp: stopped peer 7
    2018-04-23 10:48:59.889378 I | rafthttp: removed peer 7
    INFO [04-23|10:48:59] raft protocol handler stopped 
    INFO [04-23|10:48:59] ignoring expected ConfChangeAddNode for initial peer raft id=1
    INFO [04-23|10:48:59] start snapshot                           applied index=0 last snapshot index=0
    INFO [04-23|10:48:59] Database closed                          database=/quorum-examples/examples/7nodes/qdata/dd2/geth/chaindata
    INFO [04-23|10:48:59] Raft stopped 
    INFO [04-23|10:48:59] Stopping Ethereum protocol 
    INFO [04-23|10:48:59] Ethereum protocol stopped 
    INFO [04-23|10:48:59] Transaction pool stopped 
    ERROR[04-23|10:48:59] Failed to close database                 database=/quorum-examples/examples/7nodes/qdata/dd2/geth/chaindata err="leveldb: closed"
    Fatal: Error starting protocol stack: listen unix /quorum-examples/examples/7nodes/qdata/dd2/geth.ipc: bind: invalid argument
    

    Steps to reproduce the behaviour

    Follow the detailed walk through in

    https://github.com/drandreaskrueger/quorum-examples/blob/master/non-vagrant/README.md

    System is Debian

    uname -a
    Linux ... 4.9.0-6-amd64 #1 SMP Debian 4.9.82-1+deb9u3 (2018-03-02) x86_64 GNU/Linux
    

    Backtrace

    ? how ?

    opened by drandreaskrueger 26
  • The TPS of Quorum

    The TPS of Quorum

    Hi, I want to know How many transactions do Quorum accomplish in a second?

    I build a 3 node test environment, the device info is CPU: 2 Intel(R) Xeon(R) CPU E5-2640 v2 @ 2.00GHz Mem: 4GB Disk:80GB in my test , TOP TPS is 137 , is the result reasonable? and do you have any methd to increase the TPS,eg ... change some parameter or so ?

    question core 
    opened by bigstar119 25
  • Panic

    Panic

    Hi there,

    Please note that this is an issue tracker reserved for bug reports and feature requests.

    For general questions please use the gitter channel or the Ethereum stack exchange at https://ethereum.stackexchange.com.

    System information

    Geth version: 1.9.7-stable

    OS & Version: Ubuntu 16.04.7 LTS 16G RAM - inside docker

    Branch, Commit Hash or Release: af7525189f2cee801ef6673d438b8577c8c5aa34

    Expected behaviour

    Actual behaviour

    Steps to reproduce the behaviour

    Backtrace

    DEBUG[12-15|10:37:59.847] Reset ancient limit to zero
    panic: runtime error: invalid memory address or nil pointer dereference
    [signal SIGSEGV: segmentation violation code=0x1 addr=0x1c0 pc=0xca6913]
    
    goroutine 286 [running]:
    github.com/ethereum/go-ethereum/eth/downloader.(*Downloader).findAncestor(0xc000e8d180, 0xc00161e3c0, 0xc0594aefc0, 0x0, 0x0, 0xa)
            /tmp/quorum/build/_workspace/src/github.com/ethereum/go-ethereum/eth/downloader/downloader.go:890 +0x14d3
    github.com/ethereum/go-ethereum/eth/downloader.(*Downloader).syncWithPeer(0xc000e8d180, 0xc00161e3c0, 0x5be8b18537b8ced6, 0x6e63d297fbd1810, 0x8ba3e9ad36a9fbb0, 0x133e551934bedb65, 0xc027c754c0, 0x0, 0x0)
            /tmp/quorum/build/_workspace/src/github.com/ethereum/go-ethereum/eth/downloader/downloader.go:456 +0x3df
    github.com/ethereum/go-ethereum/eth/downloader.(*Downloader).synchronise(0xc000e8d180, 0xc025329b80, 0x10, 0x5be8b18537b8ced6, 0x6e63d297fbd1810, 0x8ba3e9ad36a9fbb0, 0x133e551934bedb65, 0xc027c754c0, 0x0, 0x0, ...)
            /tmp/quorum/build/_workspace/src/github.com/ethereum/go-ethereum/eth/downloader/downloader.go:424 +0x418
    github.com/ethereum/go-ethereum/eth/downloader.(*Downloader).Synchronise(0xc000e8d180, 0xc025329b80, 0x10, 0x5be8b18537b8ced6, 0x6e63d297fbd1810, 0x8ba3e9ad36a9fbb0, 0x133e551934bedb65, 0xc027c754c0, 0x0, 0x0, ...)
            /tmp/quorum/build/_workspace/src/github.com/ethereum/go-ethereum/eth/downloader/downloader.go:328 +0x8e
    github.com/ethereum/go-ethereum/eth.(*ProtocolManager).synchronise(0xc0002fde00, 0xc00b5160c0)
            /tmp/quorum/build/_workspace/src/github.com/ethereum/go-ethereum/eth/sync.go:199 +0x2ee
    created by github.com/ethereum/go-ethereum/eth.(*ProtocolManager).syncer
            /tmp/quorum/build/_workspace/src/github.com/ethereum/go-ethereum/eth/sync.go:152 +0x2e5
    
    
    opened by carlosho17 24
  • quorum --permissioned flag

    quorum --permissioned flag

    Hi there,

    We are using geth with --permissioned flag and we get this error

    ERROR[10-15|12:28:43.140] Read Error for permissioned-nodes.json file. This is because 'permissioned' flag is specified but no permissioned-nodes.json file is present. err="stat /root/node1/data/permissioned-nodes.json: no such file or directory"

    According to the documentation, geth should find permission-config.json instead permissioned-nodes.json

    any idea? Our quorum version is 2.3.0

    thanks!

    opened by dvgoyeneche 24
  • Istanbul: bigger blockperiod value cause blockchain stuck

    Istanbul: bigger blockperiod value cause blockchain stuck

    Geth Version: 1.8.12-stable Git Commit: 8c4aea54d13d7ca6f148287d09aea9e0b6b0d8e6 Quorum Version: 2.1.1 Architecture: amd64 Protocol Versions: [63 62] Network Id: 1337 Go Version: go1.10.1 Operating System: linux GOPATH= GOROOT=/usr/lib/go-1.10

    I configured 3 quorum nodes with Istanbul consensus. If I set --istanbul.blockperiod 10, the whole blockchain will stuck after mining some blocks. The default blockperiod value which is 1 works fine. I tried to set blockperiod 5, it also works.

    Here is the log: INFO [11-30|09:43:01.105] Committed address=0x525ad36D11aA5E8139FC21D82485EF66B54AddB2 hash=5efda5…a129aa number=4 INFO [11-30|09:43:01.107] Imported new chain segment blocks=1 txs=0 mgas=0.000 elapsed=618.701µs mgasps=0.000 number=4 hash=5efda5…a129aa cache=0.00B INFO [11-30|09:43:01.107] Commit new mining work number=5 txs=0 uncles=0 elapsed=159.2µs INFO [11-30|09:43:11.438] Imported new chain segment blocks=1 txs=0 mgas=0.000 elapsed=645.6µs mgasps=0.000 number=5 hash=f1a986…4a93c9 cache=0.00B INFO [11-30|09:43:11.439] Commit new mining work number=6 txs=0 uncles=0 elapsed=276.6µs INFO [11-30|09:43:21.002] Committed address=0x525ad36D11aA5E8139FC21D82485EF66B54AddB2 hash=e785ef…ddc5ac number=6 INFO [11-30|09:43:21.002] Successfully sealed new block number=6 hash=e785ef…ddc5ac INFO [11-30|09:43:21.002] block reached canonical chain number=1 hash=ca631e…874dd2 INFO [11-30|09:43:21.002] mined potential block number=6 hash=e785ef…ddc5ac INFO [11-30|09:43:21.003] Commit new mining work number=7 txs=0 uncles=0 elapsed=111.2µs INFO [11-30|09:43:31.301] Imported new chain segment blocks=1 txs=0 mgas=0.000 elapsed=623.101µs mgasps=0.000 number=7 hash=ea45e4…679276 cache=0.00B INFO [11-30|09:43:31.301] Commit new mining work number=8 txs=0 uncles=0 elapsed=150.2µs INFO [11-30|09:43:41.108] Committed address=0x525ad36D11aA5E8139FC21D82485EF66B54AddB2 hash=b7ab7a…547115 number=8 INFO [11-30|09:43:41.109] Successfully sealed new block number=8 hash=b7ab7a…547115 INFO [11-30|09:43:41.109] block reached canonical chain number=3 hash=967955…995fd8 INFO [11-30|09:43:41.109] mined potential block number=8 hash=b7ab7a…547115 INFO [11-30|09:43:41.109] Commit new mining work number=9 txs=0 uncles=0 elapsed=167.7µs INFO [11-30|09:43:41.438] Imported new chain segment blocks=1 txs=0 mgas=0.000 elapsed=539.7µs mgasps=0.000 number=8 hash=70df0c…773024 cache=0.00B

    Looks like if there happens to be two blocks with same block number but different hash, the blockchain will stuck.

    consensus | IBFT 
    opened by yjfcn 24
  • Unable to interact with other contracts in constructor of contract with enhanced privacy

    Unable to interact with other contracts in constructor of contract with enhanced privacy

    System information

    Geth version: Geth/32e486ea6b3f-istanbul/v1.10.2-stable-e5b930e8(quorum-v22.7.0)/linux-amd64/go1.16.15 OS & Version: Linux

    Expected behaviour

    In the constructor for contracts deployed with enhanced privacy (e.g. party protection), we should be able to interact with other contracts that are deployed with the same enhanced privacy mode.

    Actual behaviour

    During the constructor call, the deployed contract is unable to find the bytecode of the second contract that it interacts with, even though the second contract is deployed with the same enhanced privacy mode, i.e. PP.

    Steps to reproduce the behaviour

    Attached a minimal example where a contract tries to interact with a second contract with same privacy enhancements mode in the constructor call. enhanced-privacy.tar.gz

    Backtrace

    3_check_contract.js
    ===================
    
       Deploying 'PrivateConstructorCheckContract'
       -------------------------------------------
    Unable to find contract code :: error  Error:  *** Deployment Failed ***
    
    "PrivateConstructorCheckContract" hit a require or revert statement somewhere in its constructor. Try:
       * Verifying that your constructor params satisfy all require conditions.
       * Adding reason strings to your require statements.
    
        at /usr/local/lib/node_modules/truffle/build/webpack:/packages/deployer/src/deployment.js:365:1
        at runMicrotasks (<anonymous>)
        at processTicksAndRejections (internal/process/task_queues.js:95:5)
        at module.exports (/home/user/workspace/enhanced-privacy/migrations/3_check_contract.js:15:5)
        at Migration._deploy (/usr/local/lib/node_modules/truffle/build/webpack:/packages/migrate/Migration.js:73:1)
        at Migration._load (/usr/local/lib/node_modules/truffle/build/webpack:/packages/migrate/Migration.js:55:1)
        at Migration.run (/usr/local/lib/node_modules/truffle/build/webpack:/packages/migrate/Migration.js:171:1)
        at Object.runMigrations (/usr/local/lib/node_modules/truffle/build/webpack:/packages/migrate/index.js:150:1)
        at Object.runFrom (/usr/local/lib/node_modules/truffle/build/webpack:/packages/migrate/index.js:110:1)
        at Object.runAll (/usr/local/lib/node_modules/truffle/build/webpack:/packages/migrate/index.js:114:1)
        at Object.run (/usr/local/lib/node_modules/truffle/build/webpack:/packages/migrate/index.js:79:1)
        at runMigrations (/usr/local/lib/node_modules/truffle/build/webpack:/packages/core/lib/commands/migrate.js:269:1)
        at /usr/local/lib/node_modules/truffle/build/webpack:/packages/core/lib/commands/migrate.js:231:1
    
    opened by rodion-lim-partior 0
  • block 0's coinbase address is random when use QBFT with smart contract

    block 0's coinbase address is random when use QBFT with smart contract

    I'm trying to set up a network with quorum, I'm using v22.7.2, this is my genesis.json

    {
        "config": {
            "chainid": 2048,
            "homesteadBlock": 0,
            "byzantiumBlock": 0,
            "constantinopleBlock": 0,
            "eip150Block": 0,
            "eip155Block": 0,
            "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
            "eip158Block": 0,
            "txnSizeLimit": 128,
            "maxCodeSizeConfig": [
                {
                    "block": 0,
                    "size": 128
                }
            ],
            "enableGasPriceBlock": 5,
            "qbft": {
                "epochlength": 30000,
                "blockperiodseconds": 3,
                "requesttimeoutseconds": 5,
                "ceil2Nby3Block": 0,
                "policy": 0,
                "blockReward": "0x6f05b59d3b20000",
                "validatorcontractaddress": "0x000000000000000aaff000000000000000001024"
            },
            "transitions": [
                {
                    "block": 0,
                    "beneficiaryMode": "validators",
                    "validatorselectionmode": "contract"
                }
            ],
            "isQuorum": true
        },
        "nonce": "0x0",
        "timestamp": "0x0",
        "extraData": "0xe5a00000000000000000000000000000000000000000000000000000000000000000c0c080c0",
        "gasLimit": "0x3b9aca00",
        "difficulty": "0x1",
        "mixHash": "0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365",
        "coinbase": "0x0000000000000000000000000000000000000000",
        "alloc": {
            "0x1024FB2409e149C1D0Ee83e1d113f1B580c142F2": {
                "balance": "0x4563918244f40000"
            },
            "0x1024983F6E6155dB607d54E9D75F403afDc1f3E3": {
                "balance": "0x4563918244f40000"
            },
            "0x10249770239C96175a2f3C1ff1E97805ba656Ec8": {
                "balance": "0x4563918244f40000"
            },
            "0x1024c849dA061B17d719530a5325868e3c291D7c": {
                "balance": "0x4563918244f40000"
            },
            "0x000000000000000aaff000000000000000001024": {
                "comment": "validator contract",
                "balance": "0x0",
                "code": "0x608060405234801561001057600080fd5b506004361061009e5760003560e01c80638da5cb5b116100665780638da5cb5b1461014c578063b7ab4db514610154578063e1c7392a146101ac578063f2fde38b146101b4578063facd743b146101da5761009e565b80631df5f069146100a357806335aa2e44146100cb57806356ba2be0146101045780637071688a1461012a578063715018a614610144575b600080fd5b6100c9600480360360208110156100b957600080fd5b50356001600160a01b0316610214565b005b6100e8600480360360208110156100e157600080fd5b5035610282565b604080516001600160a01b039092168252519081900360200190f35b6100c96004803603602081101561011a57600080fd5b50356001600160a01b03166102ac565b610132610317565b60408051918252519081900360200190f35b6100c961031e565b6100e86103ca565b61015c6103d9565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610198578181015183820152602001610180565b505050509050019250505060405180910390f35b6100c9610520565b6100c9600480360360208110156101ca57600080fd5b50356001600160a01b0316610656565b610200600480360360208110156101f057600080fd5b50356001600160a01b0316610758565b604080519115158252519081900360200190f35b61021c61076d565b6001600160a01b031661022d6103ca565b6001600160a01b031614610276576040805162461bcd60e51b81526020600482018190526024820152600080516020610b37833981519152604482015290519081900360640190fd5b61027f81610771565b50565b6001818154811061029257600080fd5b6000918252602090912001546001600160a01b0316905081565b6102b461076d565b6001600160a01b03166102c56103ca565b6001600160a01b03161461030e576040805162461bcd60e51b81526020600482018190526024820152600080516020610b37833981519152604482015290519081900360640190fd5b61027f81610922565b6001545b90565b61032661076d565b6001600160a01b03166103376103ca565b6001600160a01b031614610380576040805162461bcd60e51b81526020600482018190526024820152600080516020610b37833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b60035460609060ff16156103f6576103ef610a14565b905061031b565b60408051600480825260a0820190925260009160208201608080368337019050509050731024fb2409e149c1d0ee83e1d113f1b580c142f28160008151811061043b57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050731024983f6e6155db607d54e9d75f403afdc1f3e38160018151811061047d57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250507310249770239c96175a2f3c1ff1e97805ba656ec8816002815181106104bf57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050731024c849da061b17d719530a5325868e3c291d7c8160038151811061050157fe5b6001600160a01b0390921660209283029190910190910152905061031b565b60035460ff1615610570576040805162461bcd60e51b8152602060048201526015602482015274696e69743a20616c726561647920696e697465642160581b604482015290519081900360640190fd5b600061057a6103d9565b905060005b81518110156106355760016002600084848151811061059a57fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055508181815181106105e557fe5b60200260200101516001600160a01b03167f666bef2028b577def3146cf0251957e79b994b0b443c9bd7a26e21fc383d0e31426040518082815260200191505060405180910390a260010161057f565b5061063e610a76565b610646610aba565b506003805460ff19166001179055565b61065e61076d565b6001600160a01b031661066f6103ca565b6001600160a01b0316146106b8576040805162461bcd60e51b81526020600482018190526024820152600080516020610b37833981519152604482015290519081900360640190fd5b6001600160a01b0381166106fd5760405162461bcd60e51b8152600401808060200182810382526026815260200180610b116026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60026020526000908152604090205460ff1681565b3390565b6001600160a01b03811660009081526002602052604090205460ff166107de576040805162461bcd60e51b815260206004820181905260248201527f7265766f6b6556616b696461746f723a206e6f7420612076616c696461746f72604482015290519081900360640190fd5b6001600160a01b0381166000908152600260205260408120805460ff191690555b6001548110156108d757816001600160a01b03166001828154811061082057fe5b6000918252602090912001546001600160a01b031614156108cf5760018054600019810190811061084d57fe5b600091825260209091200154600180546001600160a01b03909216918390811061087357fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060018054806108ac57fe5b600082815260209020810160001990810180546001600160a01b03191690550190555b6001016107ff565b506108e0610a76565b6040805142815290516001600160a01b038316917fa90b8ea1f6858ab4d6eaab724d433839049c417ed4a18d743a6afc86ea1be42d919081900360200190a250565b6001600160a01b03811660009081526002602052604090205460ff161561097a5760405162461bcd60e51b8152600401808060200182810382526021815260200180610b886021913960400191505060405180910390fd5b6001600160a01b0381166000818152600260209081526040808320805460ff191660019081179091558054808201825593527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf690920180546001600160a01b03191684179055815142815291517f666bef2028b577def3146cf0251957e79b994b0b443c9bd7a26e21fc383d0e319281900390910190a250565b60606001805480602002602001604051908101604052809291908181526020018280548015610a6c57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610a4e575b5050505050905090565b60015460031115610ab85760405162461bcd60e51b8152600401808060200182810382526031815260200180610b576031913960400191505060405180910390fd5b565b6000610ac461076d565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65727265766f6b6556616b696461746f723a2072656163686564206d696e2076616c696461746f72206e756d2028203c20332973657456616b696461746f723a20616c726561647920612076616c696461746f72a2646970667358221220e4d44b4fd05402dc9d64ea310de6de8ee1b006da8a20b5148e3c2cd8f5f7d2bf64736f6c63430007060033",
                "storage": {}
            }
        },
        "number": "0x0",
        "gasUsed": "0x0",
        "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
    }
    

    my contract's getValidators() function will output

    [
      '0x1024FB2409e149C1D0Ee83e1d113f1B580c142F2',
      '0x1024983F6E6155dB607d54E9D75F403afDc1f3E3',
      '0x10249770239C96175a2f3C1ff1E97805ba656Ec8',
      '0x1024c849dA061B17d719530a5325868e3c291D7c'
    ]
    

    when i boot my first node, i got this

    INFO [10-30|17:17:44.757] start QBFT 
    INFO [10-30|17:17:44.757] BFT: activate QBFT 
    INFO [10-30|17:17:44.757] QBFT: start                              address=0x902B66EBF0D1e79BC35bA010F81f221c56fC0CdA
    INFO [10-30|17:17:44.757] QBFT: initialize new round               address=0x902B66EBF0D1e79BC35bA010F81f221c56fC0CdA old.round=-1 old.seq=0 target.round=0 lastProposal.number=0 lastProposal.hash=00e65b..d47732
    INFO [10-30|17:17:44.759] QBFT: start new round                    address=0x902B66EBF0D1e79BC35bA010F81f221c56fC0CdA old.round=-1 old.seq=0 next.round=0 next.seq=1 next.proposer=0x10249770239C96175a2f3C1ff1E97805ba656Ec8 next.valSet="[0x10249770239C96175a2f3C1ff1E97805ba656Ec8 0x1024983F6E6155dB607d54E9D75F403afDc1f3E3 0x1024c849dA061B17d719530a5325868e3c291D7c 0x1024FB2409e149C1D0Ee83e1d113f1B580c142F2]" next.size=4 next.IsProposer=false
    INFO [10-30|17:17:44.759] Commit new mining work                   number=1 sealhash=df0d78..92c83e uncles=0 txs=0 gas=0 fees=0 elapsed="421.588µs"
    WARN [10-30|17:17:44.760] Block sealing failed                     err=unauthorized
    

    It seems the contract is deployed successfully, but the coinbase of block 0 is none of those address, it's random can anyone help me out?

    opened by Funarp 2
  • Unable to pre-deploy the validator smart contract in a new QBFT network without configuring transition

    Unable to pre-deploy the validator smart contract in a new QBFT network without configuring transition

    System information

    Geth version: quorum 22.7.0 OS & Version: Windows/Linux/OSX

    Expected behaviour

    I mocked the example contract to generate a storage layout for the validator contract, and have inserted it into the "alloc" section of genesis file. Validators should have been authorized to seal blocks after I set validatorcontractaddress, according to the doc.

    Actual behaviour

    A blank list is returned when calling istanbul.getValidators(), even after I have got expected validator list with web3 http API.

    My genesis block

    {
    	"nonce": "0x0",
    	"gasLimit": "0xf7b760",
    	"gasUsed": "0x0",
    	"number": "0x0",
    	"difficulty": "0x1",
    	"coinbase": "0x0000000000000000000000000000000000000000",
    	"mixHash": "0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365",
    	"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    	"config": {
    		"chainId": 114514,
    		"homesteadBlock": 0,
    		"eip150Block": 0,
    		"eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    		"eip155Block": 0,
    		"eip158Block": 0,
    		"byzantiumBlock": 0,
    		"constantinopleBlock": 0,
    		"isQuorum": true,
    		"maxCodeSizeConfig": [
    			{
    				"block": 0,
    				"size": 64
    			}
    		],
    		"txnSizeLimit": 64,
    		"qbft": {
    			"policy": 0,
    			"epoch": 30000,
    			"ceil2Nby3Block": 0,
    			"testQBFTBlock": 0,
    			"blockperiodseconds": 5,
    			"emptyblockperiodseconds": 60,
    			"validatorcontractaddress": "0x0000000000000000000000000000000001919810"
    		}
    	},
    	"alloc": {
    		"0x0000000000000000000000000000000001919810": {
    			"comment": "validator smart contract",
    			"balance": "0x00",
    			"code": "0x608060405234801561001057600080fd5b506004361061005d577c0100000000000000000000000000000000000000000000000000000000600035046340a141ff81146100625780634d238c8e14610077578063b7ab4db51461008a575b600080fd5b610075610070366004610377565b6100a8565b005b610075610085366004610377565b610247565b610092610315565b60405161009f91906103a7565b60405180910390f35b600054600160a060020a031633146100bf57600080fd5b6001546000805b8281101561019557811561014757600181815481106100e7576100e76103f4565b600091825260209091200154600160a060020a031660016101088184610452565b81548110610118576101186103f4565b9060005260206000200160006101000a815481600160a060020a030219169083600160a060020a031602179055505b83600160a060020a031660018281548110610164576101646103f4565b600091825260209091200154600160a060020a03160361018357600191505b8061018d8161046b565b9150506100c6565b5080156101e15760018054806101ad576101ad610484565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff19169055019055505050565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f546869732076616c696461746f72206973206e6f7420696e206c697374000000604482015260640160405180910390fd5b600054600160a060020a0316331461025e57600080fd5b60005b6001548110156102b85781600160a060020a031660018281548110610288576102886103f4565b600091825260209091200154600160a060020a0316036102a6575050565b806102b08161046b565b915050610261565b506001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6018054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff1990911617905550565b6060600180548060200260200160405190810160405280929190818152602001828054801561036d57602002820191906000526020600020905b8154600160a060020a0316815260019091019060200180831161034f575b5050505050905090565b60006020828403121561038957600080fd5b8135600160a060020a03811681146103a057600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b818110156103e8578351600160a060020a0316835292840192918401916001016103c3565b50909695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561046557610465610423565b92915050565b60006001820161047d5761047d610423565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220b6c842fefcee5e9bbd2592ab69d92b9ceb000c75d96d1eb94ea9087f457c145a64736f6c63430008110033",
    			"version": "0x01",
    			"storage": {
    				"0000000000000000000000000000000000000000000000000000000000000000": "000000000000000000000000767c4a8ef57a81de497d919748e35aa75b9a1eeb",
    				"0000000000000000000000000000000000000000000000000000000000000001": "0000000000000000000000000000000000000000000000000000000000000005",
    				"b10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6": "000000000000000000000000db5c58264ad1dd9fad06d95704c2b5b8b1f37626",
    				"b10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf7": "00000000000000000000000062b6ba881ffb920294845d3b71a7a4c259d605b5",
    				"b10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf8": "0000000000000000000000005b7413bce2cc405436b0d2eebc0ac92566d6c324",
    				"b10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf9": "000000000000000000000000284ba98cc36b5e5be74445f8d8bfac3d95725d6f",
    				"b10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cfa": "0000000000000000000000002081fc57f6fe03cfa484da347d65f30401d60710"
    			}
    		}
    	},
    	"extraData": "0xe5a00000000000000000000000000000000000000000000000000000000000000000c0c080c0",
    	"timestamp": "0x6356586c"
    }
    

    My validator contract code

    pragma solidity ^0.8.7;
    //SPDX-License-Identifier: GPL
    
    interface ValidatorSmartContractInterface {
        function getValidators() external view returns (address[] memory);
    }
    
    contract SingleAdminValidatorListImpl is ValidatorSmartContractInterface {
        address admin;
        address[] validators;
    
        function getValidators() external view returns (address[] memory) {
            return validators;
        }
    
        modifier requireAdmin() {
            require(msg.sender == admin);
            _;
        }
    
        function addValidator(address newValidator) external requireAdmin {
            for (uint i = 0; i < validators.length; i ++) {
                if(validators[i] == newValidator)
                    return;
            }
            validators.push(newValidator);
        }
    
        function removeValidator(address badValidator) external requireAdmin {
            uint len = validators.length;
            bool deleted = false;
            for (uint i = 0; i < len; i ++) {
                if (deleted) validators[i - 1] = validators[i];
                if (validators[i] == badValidator) deleted = true;
            }
            if (deleted) validators.pop();
            else revert("This validator is not in list");
        }
    }
    

    What I have noticed

    At around line 370 of quorum/consensus/istanbul/backend/engine.go, I found a line:

    if sb.config.ValidatorContract != (common.Address{}) && sb.config.GetValidatorSelectionMode(big.NewInt(0)) == params.ContractMode
    

    The GetValidatorSelectionMode function is implemented in quorum/consensus/istanbul/config.go

    func (c Config) GetValidatorSelectionMode(blockNumber *big.Int) string {
    	mode := params.BlockHeaderMode
    	c.getTransitionValue(blockNumber, func(transition params.Transition) {
    		if transition.ValidatorSelectionMode != "" {
    			mode = transition.ValidatorSelectionMode
    		}
    	})
    	return mode
    }
    

    So it seems that with no transition, GetValidatorSelectionMode always returns BlockHeaderMode, which disabling contract mode, even if I have set validatorcontractaddress.

    opened by LeoHLee 3
  • gopkg.in/oleiade/lane.v1@v1.0.0: go.mod has non-....v1 module path

    gopkg.in/oleiade/[email protected]: go.mod has non-....v1 module path "github.com/oleiade/lane" at revision v1.0.0

    Hello, I am trying to use the goQuorum packages, and the following error regarding the oleiade/lane package appears image

    The go.mod that I am using is depicted in the following image: image

    Any directions that need to follow in order to be able to overcome this issue would be much appreciated.

    opened by MisiakGeo 8
Releases(v22.7.3)
  • v22.7.3(Nov 8, 2022)

    ⚠️ Breaking Changes ⚠️

    qbft issues with block rewards and mining beneficiary #1547

    If you have started running a network with block rewards enabled and specifying a mining beneficiary you must upgrade each node individually and perform a full sync. This change fixes an issue with gas rewards not being allocated to the correct beneficiary.

    Fixes

    • fix: qbft empty block period waiting too long #1549
    • fix: debug.traceCall: check nil transactions #1537

    | Filename | SHA256 Hash | |:---------|:------------| |geth_v22.7.3_linux_amd64.tar.gz|9b3a1ee9bebffb1f8173ab0f442b7d78eebff9b6cd457583c1e6f51ee5820fe6| |geth_v22.7.3_darwin_amd64.tar.gz|51860f08ba999ed94b9c71d2afc2a0c8d955f7506890c4b1b8de7e1ad986ac6b|

    Source code(tar.gz)
    Source code(zip)
  • v22.7.2(Oct 12, 2022)

    🎉 Enhancements 🎉

    QBFT Validator Override

    Add support to allow a list of validators to be specified at a block height. This is useful if you loose validator keys and need to reset the list of validators. The ability to propose and vote on validator inclusion will continue at subsequent blocks. #1530

     "transitions": [
            {
              "block":12,
              "validatorSelectionMode":"blockheader",
              "validators":["0xed9d02e382b34818e88b88a309c7fe71e65f419d", "0x..."]
            }
          ]
    

    Validator Rewards

    ⚠️ This version contains a major bug with block rewards - please use v22.7.3 where it is fixed ⚠️

    With the re-introduction of gas fees back into GoQuorum you need to have some gas to be able to spend! The introduction of validator rewards allows a fixed amount of BlockReward to be allocated to someone each block. You could use this to fill up a faucet contract or the network operators wallet for distribution. #1502

     "transitions": [
            {
              "block":12,
              "beneficiaryMode":"fixed",
              "miningBeneficiary":"0xed9d02e382b34818e88b88a309c7fe71e65f419d"
            }
          ]
    

    Full documentation can be found at https://consensys.net/docs/goquorum/en/latest/configure-and-manage/configure/consensus-protocols/qbft/#rewards

    Fixes

    • fix: only set ValSet for new blocks #1520
    • Fix issues with changing blockperiod down and up #1505
    • The plugin service isn't always available #1533
    • build: add empty-block-period and block-reward tests to ci #1524
    • add lazy initialization with block 0 transition #1521
    • Bump github.com/holiman/uint256 from 1.1.1 to 1.2.1 #1501 #1523
    • add missing read lock #1517
    • check nil pointer #1506

    | Filename | SHA256 Hash | |:---------|:------------| |geth_v22.7.2_darwin_amd64.tar.gz|b321af484440d61d2547abbc48e5a7ed0556f7bcd493bac39fbfd1553a28429a| |geth_v22.7.2_linux_amd64.tar.gz|2d7b22fa00d968aebde0bdd71d282548fa01bb6a9ea26ad294ff4ccd06e47f00|

    Source code(tar.gz)
    Source code(zip)
  • v22.7.1(Sep 8, 2022)

    🎉 Enhancements 🎉

    • [Upgrade] Go-Ethereum release v1.10.3 #1469 (maintenance release, containing bug fixes and performance improvements)

    Deprecations

    Support for eth/64 has been dropped - 22636 If you wish to upgrade any node on your network to this version you should ensure that all other nodes support eth/65. This was releases in [v21.4.0]

    Fixes

    • fix: qlight token refreshment #1488
    • Bump karalabe/usb dependency to latest release #1482
    • github has deprecated ubuntu 18, replace it 18 with 20 #1484

    | Filename | SHA256 Hash | |:---------|:------------| |geth_v22.7.1_darwin_amd64.tar.gz|953cba373a9f8b93fe6a573d20cc804f43dace54d071430bfff1b191147df2ce| |geth_v22.7.1_linux_amd64.tar.gz|09052a486ae61c33eb3a21042f84a7ee58b3c4eebc824427d4d50ff005f7059b|

    Source code(tar.gz)
    Source code(zip)
  • v22.7.0(Aug 5, 2022)

    :tada: Enhancements :tada:

    Support Empty Blocks in QBFT

    You can configure your QBFT network to not produce blocks when you have no transactions, saving on disk space. Documentation available https://consensys.net/docs/goquorum/en/latest/configure-and-manage/configure/consensus-protocols/qbft/#configure-empty-block-period

    • qbft: add new block period setting used when the block is empty #1433

    Re-enable gas

    GoQuorum now supports gas - this is so you can make your networks public facing whilst mitigating the risk of a denial of service attack. Documentation available https://consensys.net/docs/goquorum/en/latest/concepts/gas-enabled-network/

    • Enable gas price #1446
    • configurable gas limit #1448

    Transitions

    Further enhancements have been made to transitions config to make it easier to manage and change your network over time. You can now manipulate the following configurations at any block height using transitions:

    • algorithm ( qbft/ibft )
    • epochLength ( Number of blocks that should pass before pending validator votes are reset )
    • blockPeriodSeconds ( Minimum time between two consecutive IBFT or QBFT blocks’ timestamps )
    • emptyBlockPeriodSeconds ( Minimum time between two consecutive IBFT or QBFT a block and empty block’ timestamps )
    • requestTimeoutSeconds ( Minimum request timeout for each IBFT or QBFT round )
    • contractSizeLimit ( Maximum smart contract code size in kb)
    • validatorContractAddress ( Smart contract address for list of validators )
    • validatorSelectionMode ( Validator selection mode to switch )
    • enhancedPermissioningEnabled ( aka QIP714Block )
    • privacyEnhancementsEnabled ( privacy enhancements (mandatory party, private state validation) )
    • PrivacyPrecompileEnabled ( enable marker transactions support )
    • gasPriceEnabled ( enable gas price )
    • miner.gasLimit ( Miner gas ceiling limit for each block)
    • twoFPlusOneEnabled ( Ceil(2N/3) is the default you need to explicitly use 2F + 1 if migrating from an old network )
    • transactionSizeLimit ( change the ceiling size of a transaction )

    Note that you can enable and disable features, where as with previous release you could only enable a feature at a block height.

    Fixes

    • fix auto update refresh timer for token #1459
    • chainId must be represented as a hex string #1461
    • core/freezer - retry sync write to disk #1439
    • Fix: Add conditions for the is Raft flag #1432
    • Fix privacy precompile on eth/tracers/api.go #1427

    | Filename | SHA256 Hash | |:---------|:------------| |geth_v22.7.0_linux_amd64.tar.gz|5738fb515a0b41a2f115caa66d0610bfd5496e28fb09a8ed186c379e4f0ccc9a| |geth_v22.7.0_darwin_amd64.tar.gz|22c7237932294b9ec21920d09a348fd02bee999b9c1124663c7608ae41540bb6|

    Source code(tar.gz)
    Source code(zip)
  • v22.4.4(Jul 18, 2022)

    :tada: Enhancements :tada:

    • Maintain P2P connections active during sync #1417
    • prevent quorum from starting if privacy is enabled and syncmode is not full #1399
    • [Upgrade] Go-Ethereum release v1.10.2 #1391

    Fixes

    • fix logic issue: handlers.removePeer() is called twice (apply bsc856) #1422
    • Fix privacy precompile on eth/tracers/api.go #1427
    • Maintain P2P connections active during sync #1417
    • fix logic issue: handlers.removePeer() is called twice (apply bsc856) #1422
    • Only fall through to backend on legacy protocols #1412
    • Fix up issue with Istanbul not call calling eth sub-protocol #1411

    | Filename | SHA256 Hash | |:---------|:------------| |geth_v22.4.4_linux_amd64.tar.gz|89d1119e4a7e0e841d1d3476cf2c5811b558de0284f51f52c008981238085bef| |geth_v22.4.4_darwin_amd64.tar.gz|9b0529a66840a505a725a541ae42039ab46c3a652d39c117cfda0c58d5620f9f|

    Source code(tar.gz)
    Source code(zip)
  • v22.4.3(May 20, 2022)

  • v22.4.2(May 16, 2022)

    :tada: Enhancements :tada:

    • Allow management of validators list with a smart contract #1381
    • qlight token manager plugin #1380

    Fixes

    • Fix signing typed transactions with plugin accounts #1388
    • fix null pointer exception #1384
    • consolidate empty wal entries error logs in one warning #1393
    • istanbulConfig.RequestTimeout is stored in milliseconds #1394

    | Filename | SHA256 Hash | |:---------|:------------| |geth_v22.4.2_darwin_amd64.tar.gz|31971344550726523fd5740575f46bdfe29d9750a931288275334d1c27f8a753| |geth_v22.4.2_linux_amd64.tar.gz|8d88bef5eeb14719114c0f0e67e129f032a94b8aa99f73927580f304a4d7ce5c|

    Source code(tar.gz)
    Source code(zip)
  • v22.4.1(Apr 28, 2022)

    :tada: Enhancements :tada:

    • [Upgrade] Go-Ethereum release v1.10.1 #1375
    • Feat: transition of contract size limit #1376

    ❗ Berlin Hard Fork ❗

    When upgrading to this version you can specify berlinBlock in your genesis and run geth init again. The block height should be set sufficiently enough the future to allow all nodes to upgrade. This will be mandatory in future releases for some features to continue working.

    https://blog.ethereum.org/2021/03/08/ethereum-berlin-upgrade-announcement/

    | Filename | SHA256 Hash | |:---------|:------------| |geth_v22.4.1_darwin_amd64.tar.gz|c5275067efd2b9854e5f502da477c25a0ca1faa36ebc8758404649e905c63a9f| |geth_v22.4.1_linux_amd64.tar.gz|69f71106649d3d706c2ae94d72a0690e995d6279d6494bd388c6f462d58ba83b|

    Source code(tar.gz)
    Source code(zip)
  • v22.4.0(Apr 7, 2022)

    What's Changed

    :tada: Enhancements :tada:

    QLight server and client implementation #1363

    Note: This is an early access feature allowing node operators to offer a lightweight replica of a node, transactions are proxied through to the server. The qlight node can be used for a number of use cases:

    • Anything that could thrash the API (monitoring, state querying etc). Thus avoiding impact to main nodes which are processing transactions.
    • Security concerns where the main node is handling multiple private parties (multi-tenant). The qlight client will deal with private state for one party only, and only that user will have access to the qlight client.

    ibft/qbft transition support #1371 #1357

    Added support for consensus transitions allowing consensus variables to be changed at a block height. Add new genesis config attributes "ibft" and "qbft" this also brings our genesis config into closer alignment with hyperledger/besu

    Fixes

    • Fix: update transitions for old config #1373
    • Bump github.com/mattn/go-isatty from 0.0.10 to 0.0.14 #1361
    • Bump github.com/rjeczalik/notify from 0.9.1 to 0.9.2 #1345
    • Bump github.com/golang/protobuf from 1.5.1 to 1.5.2 #1349

    | Filename | SHA256 Hash | |:---------|:------------| |geth_v22.4.0_linux_amd64.tar.gz|f420fb742a921928ec8add25ffc5d883ee08f21f329190b0655d102128604a12| |geth_v22.4.0_darwin_amd64.tar.gz|a7113f7afe68fa66c15761eabd6fe5baacb9aac0a53218fb794074080e46f5df|

    Source code(tar.gz)
    Source code(zip)
  • v22.1.1(Mar 8, 2022)

    What's Changed

    :tada: Enhancements :tada:

    Private state shared cache optimisations

    This results in less writes to disk, full details in the pr https://github.com/ConsenSys/quorum/pull/1353

    Fixes

    • fix: test dumpconfig and TOML read https://github.com/ConsenSys/quorum/pull/1316
    • fix: revert reason for private enhanced tx https://github.com/ConsenSys/quorum/pull/1315
    • Fix concurrent maps modifications and seg faults https://github.com/ConsenSys/quorum/pull/1331
    • fix: ibft1 version for support of besu https://github.com/ConsenSys/quorum/pull/1333
    • Upgrade go version and enforce go mod tidy https://github.com/ConsenSys/quorum/pull/1337
    • p2p/nat: skip TestUPNP in non-CI environments if discover fails (#22877) https://github.com/ConsenSys/quorum/pull/1341
    • Update dependabot alerts daily https://github.com/ConsenSys/quorum/pull/1342
    • Bump github.com/go-stack/stack from 1.8.0 to 1.8.1 https://github.com/ConsenSys/quorum/pull/1344
    • Bump github.com/hashicorp/go-hclog from 0.13.0 to 1.1.0 https://github.com/ConsenSys/quorum/pull/1347

    Full Changelog: https://github.com/ConsenSys/quorum/compare/v22.1.0...v22.1.1

    Binaries

    | Filename | SHA256 Hash | |:---------|:------------| |geth_v22.1.1_darwin_amd64.tar.gz|e9470b6be14c9f92d880dba30b67a425ef3a86df3bc1136d47c2718f8f87018d| |geth_v22.1.1_linux_amd64.tar.gz|b9709cf17fa63a5ac56304c94378f8829dcb47a3a625fe9e5386245e735e9379|

    Source code(tar.gz)
    Source code(zip)
  • v22.1.0(Jan 27, 2022)

    :tada: Enhancements :tada:

    • [Upgrade] Go-Ethereum release v1.10.0 #1249

    As this is a major release of Go-Ethereum we decided to separate it out into its own release.

    :warning: Breaking Changes :warning:

    Before you upgrade ensure that you have understood the changes required.

    Particular attention needs to be paid to flag deprecatons and chained enforcement

    More details can be found at:

    https://consensys.net/docs/goquorum/en/latest/deploy/upgrade/migration/#upgrade-to-goquorum-2210

    https://blog.ethereum.org/2021/03/03/geth-v1-10-0/

    | Filename | SHA256 Hash | |:---------|:------------| |geth_v22.1.0_darwin_amd64.tar.gz|c0c5b24240975cd64e6542fe0448247e422ef7824c26bd77527e1dc94400f12b| |geth_v22.1.0_linux_amd64.tar.gz|99791f5c364acbb81519b1203cbbb47eecdd11cbe1046c5b39e343944eef284d|

    Source code(tar.gz)
    Source code(zip)
  • v21.10.2(Jan 24, 2022)

  • v21.10.1(Jan 13, 2022)

    This release is a maintenance release.

    Fixes

    • Fix concurrency errors when there is high load #1302 (thanks to @baptiste-b-pegasys @frankie-lim-sweeho for investigating)
    • Update packages to fix issues identified by cve db #1303
    • Remove warn log when receiving pre-prepare msg for future block #1280
    • Unit test for deadlock detection when testQBFTBlock is set to 1 #1272

    | Filename | SHA256 Hash | |:---------|:------------| |geth_v21.10.1_darwin_amd64.tar.gz|2fc442b1637ae42b0eba9279afbef4044701b1a3bdd89cc17f5b3d19328541a2| |geth_v21.10.1_linux_amd64.tar.gz|b918fe1479a29cb9929a7142f18b2db11e2764418511590d32ab6c544445b853|

    Source code(tar.gz)
    Source code(zip)
  • v21.10.0(Nov 2, 2021)

    Enhancements

    • IBFT: Ensure that Committed Seal is not zero value #1118
    • [Upgrade] Go-Ethereum release v1.9.25 #1223
    • Standalone node MPS DB Upgrade #1240
    • replace crypto secp256k1 #1260
    • Send transactions to all peers instead of a sub-set #1261
    • Contract extension with mandatory recipients #1252
    • Support mandatory recipients #1243
    • Protect ProposerPolicy Registry using Mutex #1242
    • Prefetch next block to warm up Private State #1238

    Fixes

    • Upstream merge fixes #1273
    • Receipt unit test was not checking QuorumReceiptExtraData in PSReceipt #1266
    • Fix private receipt of privacy marker transaction #1253
    • fix: upgradebot: git configured so git merge works #1250
    • fix: flacky unit test #1248
    • fix: null pointer when error occurs #1239

    Other

    • Unit test for deadlock detection when testQBFTBlock is set to 1 #1272
    • typo: change whitelist to autorization list #1257
    • feat: add build sentinel job in the build workflow #1256
    • Document setRawTransactionPrivateFrom with unit tests #1245
    • Refactorisation: use a global Quorum Chain Config to avoid mutability #1228

    Binaries

    | Filename | SHA256 Hash | |:---------|:------------| |geth_v21.10.0_linux_amd64.tar.gz|515591a451b652d1cdd3c4258af71c26392d5f0592500b62d1ef53c8612ed93e| |geth_v21.10.0_darwin_amd64.tar.gz|098c3b381e7667ddbefab664ef5f27524bb5a5bb9782725de240d73ae8247525|

    Source code(tar.gz)
    Source code(zip)
  • v21.7.1(Aug 19, 2021)

    This release's main highlight is the addition of a new format for private transactions basing on a pre-compiled smart contract. This new approach allows extending obfuscated fields of a private transaction

    This feature addition is not a breaking change and won’t impact normal (standard & enhanced) private transaction processing

    Enhancements

    • :tada: [Privacy Precompile]: enables private transactions with extended obfuscated fields #1234
    • Amend IntrinsicGas calculation for Privacy Marker Transaction to use actual payload hash, instead of hardcoded value #1236

    Fixes

    • fix: null pointer when error occurs #1239

    Other

    • Extend acceptance tests executed, and also on the master branch #1230

    | Filename | SHA256 Hash | |:---------|:------------| |geth_v21.7.1_linux_amd64.tar.gz|1ca57de453c711bea6f4bb9f9fc3e6ae22ff82fb8dcefc0232e1c3ba76c17670| |geth_v21.7.1_darwin_amd64.tar.gz|26c81ac631b611dd156e9cae2283903d8d59b6e02b7f6c9c960165a9667aa3a4|

    Source code(tar.gz)
    Source code(zip)
  • v21.7.0(Aug 6, 2021)

    This release main highlight is the new consensus engine for the QBFT algorithm. It

    • is interoperable with Hyperleger Besu, enabling hybrid GoQuorum <> Besu networks running on a Byzantian Fault-Tolerant consensus
    • improves the stability of BFT networks (in particular it addresses a liveness issue of the IBFT implementation)

    QBFT is available for

    • new networks
    • existing IBFT networks through a hard fork migration (as an ALPHA feature)

    Enhancements

    • :tada: [QBFT] Add QBFT consensus #1209
    • Add raftlogdir commandline option #1110
    • Add revert reason to transaction receipt #1215
    • [Geth-Upgrade] Go-Ethereum release from v1.9.21 to v1.9.24 #1211, #1214, #1217, #1219
    • Add cache on private state trie #1225
    • Update receipts encoding to faciliate usage of multiple receipts format #1227

    Fixes

    • [MPS] fix merge/rebase issues #1197
    • Add logging to catch scenario when processing of transactions is aborted due to New Head event #1220
    • [QBFT] Check if sb.core is nil before processing NewBlockMsg #1229
    • [QBFT] Asynchronously call startNewRound() when transitioning from IBFT to QBFT #1232

    Other

    • [Docker] Update docker tagging to the following convention: latest is the latest stable release (ie. v21.4.1 on this case) and develop is the latest snapshot release from the current development version (ie. created from master branch) #1171
    • [CI/CD] Add acceptance tests on PR and master #1230
    • [CI/CD] Add a scheduled job in order to check geth upgrades everyday #1205

    Binaries

    | Filename | SHA256 Hash | |:---------|:------------| |geth_v21.7.0_darwin_amd64.tar.gz|620983218ec8f4df894d4e93d2134a7cf39edf728c7f26d4a6f8b7a0a12a5c4f| |geth_v21.7.0_linux_amd64.tar.gz|4ff6ac9dd778e1bd79275258413cc174d8dcdeba0f2820698939287a49789aa8|

    Source code(tar.gz)
    Source code(zip)
  • v21.4.2(May 18, 2021)

    This release mainly brings Phase 2 of Multi-Tenancy which allows the support for multiple private states.

    With this new version of Multi-Tenancy each tenant gets access to a dedicated private state, enabling each tenant to get their own version of a private contract at a given address.

    This implementation overrides the previous Alpha Release of Multi-Tenancy in GoQuorum v21.1.0

    Enhancements

    • :tada: [Multi-Tenancy] Final release that allows to serve multiple tenants from a single node #1163

    Fixes

    • Use right block number when checking the current block number on gas estimation #1195
    • Do not log error if header data is missing in ancient or level db #1194

    Other

    • [CI/CD] Fix MacOS binary build #1188
    • [Docs] Update checkIfExtensionComplete comment #1192

    | Filename | SHA256 Hash | |:---------|:------------| |geth_v21.4.2_linux_amd64.tar.gz|89978f358c8d033a02fb8e97ced281016017a9d0de8ab28b6a02f86e66aad446| |geth_v21.4.2_darwin_amd64.tar.gz|460798a3f02c26d325f2cd073830d8e547b8c046729611c5d82fceac89922b69|

    Source code(tar.gz)
    Source code(zip)
  • v21.4.1(Apr 30, 2021)

    This release is a maintenance release.

    Important Note: Our official Quorum plugins package manager is now Cloudsmith.

    • For version 21.4.1 or later GoQuorum will lookup for the plugin on Cloudsmith by default. If you are using a custom baseURL, please check the new fields pluginDistPathTemplate and pluginSigPathTemplate to verify if a different template is needed.

    • For version 21.4.0 or earlier, you have to provide the new plugin download base URL at runtime (see Configure Plugin Central).

      {
          "central": {
              "baseURL": "https://provisional-plugins-repo.quorum.consensys.net",
              "publicKeyURI": ".pgp/Central.pgp.pk"
          }
      }
      

    Enhancements

    • [Plugins] Update default plugin manager to Cloudsmith and allows to template the download URL through runtime configuration #1174

    Fixes

    • Fix reading block headers from Ancient DB. #1182
    • [go.mod] Fix crypto/secp256k1 package replacement #1178

    Documentation

    • Update readme with standardised logo #1167
    • Update GoQuorum documentation links on Readme #1162
    • Fix link to plugin documentation on readme #1173

    Other

    • [Docker] Update docker tagging to the following convention: latest is the latest stable release (ie. v21.4.1 on this case) and develop is the latest snapshot release from the current development version (ie. created from master branch) #1171
    • [CI/CD] Fix dependency typo #1160
    • [CI/CD] Fix generation of Cloudsmith URLs #1159
    • [CI/CD] Attempt to fix release build of MacOS Binary. However, there are still issues and we are investigating. #1172
    • [CI/CD] Fix release build and upload to Cloudsmith #1187 #1186 #1185

    Binaries

    | Filename | SHA256 Hash | |:---------|:------------| |geth_v21.4.1_darwin_amd64.tar.gz|2a1afd5fc453e97b16ba2ea2f3b7b0f1346df62f331fcbb454ab576fb447e75c| |geth_v21.4.1_linux_amd64.tar.gz|981a813486eada9d1b31c8b13ed84a0c5d062f444cd3fc9581c94bff49f3263b|

    Source code(tar.gz)
    Source code(zip)
  • v21.4.0(Apr 6, 2021)

    This release mainly focuses on merging upgrades from go-ethereum (from version v1.9.7 up to v1.9.20). For a full rundown of the go-ethereum changes please consult this link.

    :warning: WARNING: some small breaking changes have been introduced so please carefully review the section below before upgrading.

    Important Note: We changed the package manager for official GoQuorum binaries. We so far used Bintray which is sunsetting in May 2021. From now on you will be able to download GoQuorum official binaries from Cloudsmith (see section Breaking Changes below).

    Enhancements

    • :tada: [Geth Upgrade] Merge go-ethereum changes from v1.9.8 to v1.9.20. Some important changes are:
      • Node Discovery via DNS is enabled. #1121
      • Implementation of eth/65 - #1121
      • Persist the trie read cache on shutdown to speed up warm-up time after a reboot. #1146
      • 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. This closes issue https://github.com/ConsenSys/quorum/issues/1117.
      • New --txlookuplimit flag which specifies the number of recent blocks you want to maintain the search index for (by default it's 0 = since genesis) - #1130/
      • The default value for --rpc.gascap is now 25M gas. It previously defaulted to unlimited gas. This applies to eth_call and will reject calls which request more gas than the cap - #1132
      • Renamed rpc flags to http. rpc flags are marked as Deprecated (for example, --rpc.port is now --http.port). #1130
      • Using Go Modules instead of Vendor folder - #1112
    • Enable to connect GoQuorum to the Privacy Transaction Manager (for example, Tessera)over http/https connection instead of the Unix socket. #1109
    • Enable support for multiple Ethereum sub-protocols. In particular, we added istanbul/100 sub-protocol for QBFT consensus messages. #1129

    Others

    • [Debugging] Add new RPC API called debug_privateStateRoot. #1148
    • [CI/CD] Migration to Cloudsmith. #1151

    Breaking Changes

    • [Database schema] Please note that reverting to GoQuorum v21.1.0 or prior version after upgrading to v21.4.0 is not possible without a resync because the blockchain database layout has changed. Contract code is now stored separately from state tree data in LevelDB.

      In case you have upgraded to v21.4.0 and you want to revert back to a previous version, you should use the following commands with the previous version:

        geth removedb --datadir <data dir>
        geth init ./genesis.json --datadir  <data dir>
        <start geth again>
      
    • [GraphQL flags] If you were using GraphQL previously, now it has 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. #1146

    • [Cloudsmith Migration] All official GoQuorum binaries download URLs have been upgraded. For example, GoQuorum v21.1.0 for Linux AMD64 moved to https://artifacts.consensys.net/public/go-quorum/raw/versions/v21.1.0/geth_v21.1.0_linux_amd64.tar.gz (Cloudsmith).

      Old Bintray download URLs will remain available until May 1st 2021 later to this date you will have to download binaries from Cloudsmith

    • One small breaking change in the release is that eth_call will not default to your first account any more if you don't explicitly specify a sender. #1122

    Binaries

    | Filename | SHA256 Hash | | -- | -- | | geth_v21.4.0_darwin_amd64.tar.gz | 063bb7325154a20cf00e0f2ea9d9b521b24d807afc6fad350302888a84d25f5f | | geth_v21.4.0_linux_amd64.tar.gz | 3592bfa58a348f46fdc7af0bf5bdb58cb464c931ee434a5223651480f494416e |

    Source code(tar.gz)
    Source code(zip)
  • v21.1.0(Feb 1, 2021)

    Release format

    Enhancements

    • :tada: [Multi-Tenancy] Allow to serve multiple tenants from a single node #1105 ALPHA RELEASE
    • :tada: [Permissioning] Add support for permissioning v2 compatible with EEA specs #1095
    • Add configurable ipc timeout #1100
    • Add new status and validator RPC APIs for IBFT and Clique #1113
    • change to golang version 1.15.5 #1114
    • params: update CHTs for v21.1.0 release #1119

    Others

    • [CI/CD] Fix Github Actions workflows deprecation warnings #1097

    Documentation

    • Update Web3 Labs GitHub URL (#1093)

    | Filename | SHA256 Hash | |:---------|:------------| |geth_v21.1.0_linux_amd64.tar.gz|b5aead4958a10cbd6cb69308930720a67cf6789d5f2c500b626fcb410871844f| |geth_v21.1.0_darwin_amd64.tar.gz|2278a9fce0a5095f56ab8ef430a157e8aef3c48697e33256989ecfc758f499a2|

    Source code(tar.gz)
    Source code(zip)
  • v20.10.0(Oct 27, 2020)

    Release format

    Quorum is moving its versioning convention scheme to Calendar Versioning (or CalVer) starting with 20.10.0 (f.k.a. 2.8.0) release.

    Version scheme convention is YY.MM.Patch where

    • YY.MM stands for the year and month of the quarter when the release happens (starting with 20.10 for October 2020)
    • Patch stands for the number of the release within the quarter

    Example

    • Next Quorum releases will be 20.10.1, 20.10.2, etc. (indifferently if they happen in October, November...)
    • When moving to the next quarter likely in February 2021, the version will increment to 21.02.0

    Get to know more about ConsenSys Quorum CalVer!

    Enhancements

    • :tada: [Privacy] Add support for privacy enhancements (#1073)

      Introduce a new privacyFlag parameter to sendTransaction APIs enabling to define the mode for execution of a private transaction.

      • 0 - StandardPrivate (default): same retro-compatible mode for private transactions as available in prior versions of Quorum
      • 1 - PartyProtection: new mode allowing receiving parties in privateFor to validate that the sending party has access to all the affected private smart contracts affected by the transaction
      • 3 - StateValidation: new mode allowing all parties in a private transaction to ensure that their local private smart contract states have not diverged
    • [Privacy] Encapsulate private transaction arguments (#1044)

    • [Privacy] Formalize the usage of common.EncryptedPayloadHash (#1046)

    • [Plugin] Allow security plugin to opt out service implementation (#1052)

    • Add debug_dumpAddress API to fetch state of an account including balance, nonce, storage, etc. (#1072)

    • Update crypto/secp256k1 submodule path (#1077)

    • [Plugin] Expose the [email protected] API over clef's HTTP server (#1078)

    • Add a new Geth flag --vm.calltimeout to optionnaly override the 5 seconds default timeout on eth_call (#1085)

    Bug fixes

    • [Istanbul] Fix VerifyHeaders() to error out all header verification request when the first one fails (#1042)
    • Fix tracing on public transaction (#1072)
    • Fix for "VM in read-only mode" error seen in logs in stress test of clique networks (#1076)
    • [Raft] Fix double addPeer, should also check self (#1080)

    Tests

    • Add unit tests for common.EncryptedPayloadHash (#1045)

    Others

    • [CI/CD] Publish Docker image to Docker Hub via GithubActions (#1079)
    • [CI/CD] Updates (#1082) (#1086)

    Documentation

    • Add documentation for Tessera bootstrapNode config (#1016)
    • Add documentation for Hashicorp Vault account plugin (#1040)
    • Updated Readme.md (#1043)
    • Tessera config update for next release (#1047)
    • Update Quorum Profiling documentation (#1053)
    • Make plugin docs consistent (#1054)
    • Smart contracts security editorial updates (#1057)
    • Add documentation to clarify the use of bindingAddress in tessera config (#1060)
    • Removed docs files now included in doc.goquorum and doc.tessera repos (#1062)
    • Change links, emails and more (#1067)

    | Filename | SHA256 Hash | |:---------|:------------| |geth_v20.10.0_linux_amd64.tar.gz|17bc1f46c7ae5be46989c9ac8750dfd95aa89dc1f41a75b416a3e0423235b25e| |geth_v20.10.0_darwin_amd64.tar.gz|bfe4d1155ed7829d7b028ee07827d2887d3c492dcd2658614702fd1d42065822|

    Source code(tar.gz)
    Source code(zip)
  • v2.7.0(Jul 15, 2020)

    Enhancements

    • 🎉 Support HashiCorp Vault for account management with account plugins (#1033) BETA RELEASE
    • 🎉 Support adding new members to private smart contracts, private contract state extension (#1030) BETA RELEASE
    • 🎉 Protect JSON RPC APIs via a plugin interface (#1019) BETA RELEASE
    • Create separate sub-module for crypto/secp256k1 package (#1036)
    • Apply upstream go-ethereum updates to Clef documentation (#1032)
    • Improve cache implementation for permissions (#961)
    • gha: automate release (#994)
    • gha: add Github Actions workflows (#984)
    • Created special PTM for public-only mode. (#968)
    • Adding checkpoint to log the time taken to process a transaction. (#988)

    Fixes

    • cmd/geth: exit gradually when there's a failure in PluginManager (#1026)
    • Issue #1004 - prevent "Mining too far in future" message when using allowedfutureblocktime parameter (#1023)
    • change protocol name for clique consensus (#1031)
    • Apply upstream changes to prevent crash when keystore-specific methods are called but external signer used (#1028)
    • Apply upstream clef bug fixes and add clef documentation (#1009)
    • Remove java dependency from go tests (#1018)
    • raft: return error when block processing is aborted (#992)
    • eth_estimateGas failing when value is not passed as a part of arguments (#989)
    • Corrections to logged error messages (#997)
    • fix linting issues (#995)
    • Update genesis.md (#1027)
    • Static mkdocs version to prevent future dependency incompatibilities (#1025)
    • Documentation updates (#1022) (#1006) (#996) (#998)
    • Quorum Tessera HA Setup (#1015)

    | Filename | SHA256 Hash | |:---------|:------------| |geth_v2.7.0_linux_amd64.tar.gz|06575a273b5541c770e29a9a0704fe70842863951dd23eee295f0e61b2cb3b5a| |geth_v2.7.0_darwin_amd64.tar.gz|8e0321a379ed4dba3dc5040802c604e3af8f1b6629e973b60f920b98851373e3|

    Source code(tar.gz)
    Source code(zip)
  • v2.6.0(May 4, 2020)

    Important: Due to DB schema changes, once a node is migrated to this version, the node cannot be rolled back to prior version. Hence we recommend appropriate back ups and testing prior to migration.

    This release upgrades Quorum's geth version to 1.9.7. geth v1.9.7 brings in the following key features:

    • Performance optimization: Optimization of account and storage trie access patterns across blocks, EVM opcode optimization, optimization of sync process
    • Transaction pool optimization for better throughput
    • Introduction of freezer db which allows moving historical blocks beyond certain threshold value out of LevelDB into a custom freezer db
    • Native GraphQL query capabilities for flexible querying
    • Clef: Standalone signer which segregates account management from geth
    • Monitoring: Can be integrated with Grafana with enhanced data dump

    Please refer to Geth v1.9.0 for the complete list of features added in geth version 1.9.0

    Please note the following while migrating to this version:

    • If you are using keystore based accounts, use --allow-insecure-unlock to bring up geth. Otherwise geth will crash while starting
    • Upon geth restart, any blocks which are below the default immutability threshold(3162240), will be moved to freezer db. If you do not want the blocks to move to freezer db, set the value of --immutabilitythreshold appropriately fo the network.

    Please refer to this page for further details on migrating to this version.

    Enhancements

    • Geth upgrade to 1.9.7 (#960)
    • Enable networks to change maxCodeSize multiple times (#975)
    • Add configurable threshold for 'future block' check for Istanbul & Clique (#800)
    • plugin: delegate JSON RPC calls to plugin (#956)
    • plugin: change signature file name and add test case for Bintray signer (#957)

    Fixes

    • Fix issue with suborg id when node is added to sub orgs(#950)
    • Fix params number for debug.dumpBlock in web3ext (#944)

    Documentation

    • Update genesis samples to reflect latest code updates (#952)
    • Update Compatibility table & adding Quorum 2 geth map (#959)
    • Add Kubernetes to quorum README.md / docs. (#970)
    • Add documentation for quorum wizard (#973)
    • Update Tessera encryption & Privacy Manager docs (#972)
    • Tessera API documentation update for 10.0.5 version (#977)

    Others

    | Filename | SHA256 Hash | |:---------|:------------| |geth_v2.6.0_linux_amd64.tar.gz|b65605bb6c105c25a08092f451eefdac82f58fc22f7fb08b473d0657b96b33d6| |geth_v2.6.0_darwin_amd64.tar.gz|07d18e1622aa3aa279fa919033cad8e55f68328ea3bac5310fcef22a90e7705d|

    Source code(tar.gz)
    Source code(zip)
  • v2.5.0(Mar 3, 2020)

    Enhancements

    • Framework to allow adding additional Quorum features as plugins (#923)
    • Support Quorum import/export chain (#946)

    Fixes

    • Bloom filter fixes (#945)
    • Added a maxCodeSizeChangeBlock to track the block height when maxCodeSize changes from default value of 24K to the given value in genesis.json (#947)
    • Fix broken raft consensus link (#940)
    • IBFT private state commit issue in a single validator node network (#938)
    • Fix DNS issue in 2.4.0 (#937)
    • Raft raft.cluster api returns error if no leader is there in the network in version 2.4.0 (#934)
    • Remove duplicated flag group: ETHASH (#924)
    • Add Quorum eth namespace RPC methods to console (#922)
    • Raft: correct the setup sequence for applied index related test (#900)
    • Rename the transaction manager package to make it more neutral (#895)

    | Filename | SHA256 Hash | |:---------|:------------| |geth_v2.5.0_linux_amd64.tar.gz|3c1c1db97b761510d32f020cedcaf7d54ee0ebfcf412b5e14dc8fcea5d831d36| |geth_v2.5.0_darwin_amd64.tar.gz|02aaef045f2d359e39da69d749c0b4e352ed9e77bdf9d2170547278115f11588|

    Source code(tar.gz)
    Source code(zip)
  • v2.4.0(Dec 4, 2019)

    Enhancements

    • Quorum Raft upgrade v3.3.13 and add support for Raft Learner nodes(#887)
    • DNS support for static nodes (#885)
    • rpc: raise HTTP/WebSocket request size limit to 5MB (#898)

    Fixes

    • p2p: fix connection leakage when peer is not authorized to connect (#897)
    • Update file descriptor limits for macOS to support go 1.12 (#892)
    • Allow Raft to recover state after non-graceful shutdown in non-archive mode (#860)
    • Raft applied index out of range (#880)
    • Premature abort during blocks processing for Raft (#881)
    • Restrict removed Raft node in p2p connection (#884)
    • Update for Raft stability (#886)
    • Overflow in parent tracking (cherrypicking go-ethereum#18165 pull) (#876)
    • Add check at startup to ensure transaction manager mode is specified. (#868)
    • debug.traceTransaction VM in read-only mode error for public tx (#875)
    • Optimize travis and fix flaky tests (#873)
    • Print TransactionSizeLimit and MaxCodeSize genesis config (#872)
    • Permissions service not starting upon restart of the node(#866)
    • Add block sealing information to IBFT API (#856)
    • eth.SignTransaction APIs: Set tx as private before signing (#864)
    • Add CORS configuration parameters (#858)
    • Check if message payload is signed by the message sender (#853)
    • Add documentation on IBFT parameters (#835)

    Thanks to @antonydenyer @timmoreton @montyly for their contributions.

    | Filename | SHA256 Hash | |:---------|:------------| |geth_v2.4.0_linux_amd64.tar.gz|6ee573052334a352d8bf9a47f8bdd44ea42eec441b029284a8ff20dd56dd124b| |geth_v2.4.0_darwin_amd64.tar.gz|1007e2f388ed3cb719d0dd3bdf4fcd79eb9ce4ae546e36823c97f2d24482d00c|

    Source code(tar.gz)
    Source code(zip)
  • v2.3.0(Oct 4, 2019)

    Enhancements:

    • BETA RELEASE Smart contract and RBAC based permissions model with support for organisations, sub-organisations, roles, account level access controls and nodes in the network. #715 🎉
    • IBFT formula update to support ceil(2N/3) #796
    • Quorum private transaction support for Abigen #819

    Fixes:

    • Update validation for write operations to use operation.writes #798
    • CLI flags display #799
    • Raft issue with single node networks #815
    • Race condition in BFT #833

    Special thanks to the OpenZeppelin team for their preliminary review of our permissions module. Thanks to @panghalamit @jimthematrix for their help and contribution with #796

    | Filename | SHA256 Hash | |:---------|:------------| |geth_v2.3.0_linux_amd64.tar.gz|d1f0888992a507048ebb02c8fb74c7c8d1c7d2cd16340889e5d1f5d4ac4903d7| |geth_v2.3.0_darwin_amd64.tar.gz|abdf5e4d03865dbed0adda29c49ae771f52245216d668aa6c9c467cb91c6892f|

    Source code(tar.gz)
    Source code(zip)
  • v2.2.5(Aug 8, 2019)

    Fixes:

    • Max code size option in genesis config (#786)
    • internal/ethapi: ask transaction pool for pending nonce (#784)
    • Set tcp port of p2p node by raft peer correctly. (#775)
    • Bugfix/geth console displays incorrect block timestamp (#762)
    • Adding QuorumPrivateTxSigner for signing and recovering private txs. (#767)
    • Raft set gcmode=archive always for Raft (#727)
    • rpc: increase server buffer size to 128kb (#663)

    | Filename | SHA256 Hash | |:---------|:------------| |geth_v2.2.5_linux_amd64.tar.gz|f7e95d5012b3f20e9db0aeed07f782f201b453202adf38ddbb9c5ba40d971cca| |geth_v2.2.5_darwin_amd64.tar.gz|ec73ba89c9ee6593312365735580871c2ca13ff841d970a53a616240833a4296|

    Source code(tar.gz)
    Source code(zip)
  • v2.2.4(Jun 19, 2019)

    Fixes:

    • Pass parent block gas limit in Raft #680
    • Increase the default min and ceil gas limits #680
    • Refund gas in non-party nodes for private transactions #739
    • Resolve concurrent access panic in IBFT #684
    • Update TX personal_sendTransaction to use the hash. #679

    Miscellaneous

    • Quorum Security Framework & various documentation updates #738
    • Adding signer tests for EIP155, Homestead and private tx #682

    | filename | sha256 hash | | --- | --- | | geth_v2.2.4_linux_amd64.tar.gz| fea305835e7813cf5958ae93e1d7693317452864231dc4c95309e4caa85f47ec | | geth_v2.2.4_darwin_amd64.tar.gz| dfb2d3fc718e003e5c6d5526a103d28c570809caff2a16740c44c4820dc0b941 |

    Source code(tar.gz)
    Source code(zip)
  • v2.2.3(Apr 4, 2019)

  • 2.2.2(Apr 3, 2019)

    Enhancements:

    • Geth upgrade 1.8.18 #639
    • Improve block downloads and processing in raft based networks. #621
    • Configure transaction size limit using the genesis block #636
    • Add Quorum version to Node Info #616

    Fixes:

    • Add validation for raft peer updates #656
    • Build issues for Go 1.11+ #619
    • Gas limit for private transactions #595
    • “impossible re-org” issue #539
    • Handle EIP155 transactions before the configured 155 block is reached #667
    • Estimate Gas support for private transactions #644

    | filename | sha256 hash | | --- | --- | | geth_v2.2.2_linux_amd64.tar.gz| ff738a8a17cfc818cd8b4ff061e6db65bb436b59d3713da50f26d39cd9c914e3 | | geth_v2.2.2_darwin_amd64.tar.gz| 7c5e3f2fab3fdbab8fc0d2b5e47c436890a87553c8e2fc2f7aa0d38e024a4799 |

    Source code(tar.gz)
    Source code(zip)
Owner
ConsenSys Software
ConsenSys is the software engineering leader of the blockchain space. Our full-stack Ethereum products help developers build next-generation networks.
ConsenSys Software
Go-ethereum - Official Golang implementation of the Ethereum protocol

Go Ethereum Official Golang implementation of the Ethereum protocol. Automated b

i06 0 Jan 4, 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 1 Oct 14, 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
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.9k Nov 28, 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
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
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
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 40.3k Nov 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 4 Aug 8, 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
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
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 18 Sep 20, 2022
A Go implementation of EIP-4361 Sign In With Ethereum verification

Sign-In with Ethereum This go module provides a pure Go implementation of EIP-4361: Sign In With Ethereum. Installation go get github.com/jiulongw/siw

Jiulong Wang 5 Apr 24, 2022
run ABI encoded data against the ethereum blockchain

Run EVM code against a database at a certain block height - Note You can't run this against a running geth node - because that would share the db and

Edgar Aroutiounian 60 Nov 11, 2021
Huobi Eco Chain client based on the go-ethereum fork

The Huobi Open Platform is a unified infrastructure platform based on the technical, traffic and ecological resources of the Huobi Group, and will be gradually open to the blockchain industry.

null 239 Oct 26, 2022
Streaming Fast on Ethereum

Stream Ethereum data like there's no tomorrow

StreamingFast 72 Nov 5, 2022