Codebase
Navigate the Codebase using the tree view. Use the filters to highlight where various files are grouped to aid understanding.
Getting Started Commands
Project Structure
Below is a short description of the key directories of the project to aid you when understanding where key files are located.
accounts/ - This directory contains various subdirectories and files related to account management in Quorum, a private Ethereum implementation. The subdirectories include abi/, external/, keystore/, pluggable/, scwallet/, usbwallet/, and several Go files such as accounts.go and accounts_test.go.
build/ - This directory contains various files and subdirectories used for building Quorum. It includes files for different packaging formats like deb/, mvn.pom, and nsis.envvarupdate.nsh. There are also scripts for building and running tests, like run-peeps.sh and update-license.go.
cmd/ - This directory contains various subdirectors and files related to command-line tools and interfaces for Quorum. It includes subdirectories like abidump/, abigen/, bootnode/, clef/, devp2p/, ethkey/, evm/, faucet/, geth/, p2psim/, puppeth/, rlpdump/, utils/, and several Go files like api.go and api_backend.go.
common/ - This directory contains various utility modules used across Quorum. It includes subdirectories like bitutil/, compiler/, fdlimit/, hexutil/, http/, math/, mclock/, prque/, and several Go files like quorum.go and types.go.
consensus/ - This directory contains various subdirectories and files related to consensus algorithms used in Quorum. It includes subdirectories like clique/, ethash/, istanbul/, misc/, and several Go files like consensus.go and errors.go.
crypto/ - This directory contains various subdirectories and files related to cryptographic functions used in Quorum. It includes subdirectories like blake2b/, bls12381/, bn256/, ecies/, secp256k1/, signify/, and several Go files like crypto.go and signature_test.go.
eth/ - This directory contains various subdirectories and files related to Ethereum-specific functionality in Quorum. It includes subdirectories like catalyst/, downloader/, ethconfig/, fetcher/, filters/, gasprice/, protocols/, tracers/, and several Go files like api.go and backend.go.
event/ - This directory contains various subdirectories and files related to event handling and processing in Quorum. It includes subdirectories like feed/ and subscription/, and several Go files like event.go and subscription.go.
extension/ - This directory contains various subdirectories and files related to Quorum's extension functionality. It includes subdirectories like api/, backend/, client/, contract_facade/, data_handler/, privacyExtension/, and several Go files like api.go and backend.go.
graphql/ - This directory contains various subdirectories and files related to GraphQL functionality in Quorum. It includes several Go files like graphql.go and schema.go.
internal/ - This directory contains various subdirectories and files used internally by the Quorum project. It includes subdirectories like build/, cmdtest/, debug/, ethapi/, flags/, guide/, jsre/, plugin/, testlog/, utesting/, web3ext/, and several other Go files.
les/ - This directory contains various subdirectories and files related to Quorum's Light Ethereum implementation. It includes subdirectories like checkpointoracle/, flowcontrol/, utils/, vflux/, and several Go files like api.go and backend.go.
light/ - This directory contains various subdirectories and files related to Quorum's Light Ethereum implementation. It includes several Go files like lightchain.go and trie.go.
log/ - This directory contains various subdirectories and files related to logging functionality in Quorum. It includes several Go files like emit_checkpoint.go and format.go.
metrics/ - This directory contains various subdirectories and files related to Quorum's metrics functionality. It includes subdirectories like exp/, influxdb/, librato/, prometheus/, and several Go files like config.go and counter.go.
miner/ - This directory contains various subdirectories and files related to Quorum's miner functionality. It includes several Go files like miner.go and worker.go.
mobile/ - This directory contains various subdirectories and files related to Quorum's mobile support. It includes several Go files like android_test.go and ethereum.go.
multitenancy/ - This directory contains various subdirectories and files related to Quorum's multitenancy functionality. It includes several Go files like authorization.go and types.go.
node/ - This directory contains various subdirectories and files related to Quorum's node functionality. It includes several Go files like api.go and config.go.
p2p/ - This directory contains various subdirectories and files related to Quorum's peer-to-peer networking functionality. It includes several Go files like dial.go and message.go.
params/ - This directory contains various subdirectories and files related to Quorum's network parameters. It includes several Go files like bootnodes.go and network_params.go.
permission/ - This directory contains various subdirectories and files related to Quorum's permissioning functionality. It includes several Go files like api.go and backend.go.
plugin/ - This directory contains various subdirectories and files related to Quorum's plugin functionality. It includes several Go files like api.go and base.go.
private/ - This directory contains various subdirectories and files related to Quorum's private network functionality. It includes several Go files like private.go and private_test.go.
qlight/ - This directory contains various subdirectories and files related to Quorum's Quorum Light Client (QLight) functionality. It includes several Go files like api.go and server.go.
raft/ - This directory contains various subdirectories and files related to Quorum's Raft consensus algorithm implementation. It includes several Go files like api.go and backend.go.
rlp/ - This directory contains various subdirectories and files related to Quorum's RLP (Recursive Length Prefix) encoding and decoding functionality. It includes several Go files like decode.go and encode.go.
signer/ - This directory contains various subdirectories and files related to Quorum's signer functionality. It includes several Go files like core.go and rules.go.
swarm/ - This directory contains various subdirectories and files related to Quorum's Swarm functionality. It includes several Go files like README.md and tests/block_test.go.
tests/ - This directory contains various subdirectories and files related to Quorum's test suite. It includes several Go files like block_test.go and rlp_test.go.
trie/ - This directory contains various subdirectories and files related to Quorum's Merkle Patricia Trie (MPT) functionality. It includes several Go files like committer.go and database.go.
Entrypoints
Below are files we identified as entrypoints for to the codebase. This is where the application starts and a good place to start when learning.
cmd/abidump/main.go - Entry point for the Abidump tool, used for extracting and formatting the ABI and bytecode of Solidity contracts.
cmd/abigen/main.go - Entry point for the Abigen tool, used for generating Go bindings for Solidity contracts.
cmd/bootnode/main.go - Entry point for the Bootnode command, used for managing and discovering bootnodes in the Ethereum network.
cmd/checkpoint-admin/main.go - Entry point for the Checkpoint-admin command, used for managing checkpoints in the Ethereum network.
cmd/clef/main.go - Entry point for the Clef command, used for managing Ethereum accounts and keys, and interacting with the Ethereum network.
cmd/devp2p/main.go - Entry point for the Devp2p command, used for managing and interacting with the Ethereum network's devp2p protocol.
cmd/ethkey/main.go - Entry point for the Ethkey command, used for managing Ethereum keys and interacting with the Ethereum network.
cmd/evm/main.go - Entry point for the EVM (Ethereum Virtual Machine) command, used for interacting with the Ethereum network and executing transactions.
cmd/faucet/faucet.go - Entry point for the Faucet command, used for providing test ether to new nodes or accounts.
cmd/geth/main.go - Entry point for the Geth command, used for running a full Ethereum node and interacting with the Ethereum network.
cmd/p2psim/main.go - Entry point for the p2psim command, used for simulating and managing Quorum network nodes.
cmd/puppeth/puppeth.go - Entry point for the Puppeth command, used for managing and configuring a network of Ethereum nodes.
cmd/rlpdump/main.go - Entry point for the rlpdump command, used for inspecting and formatting RLP (Ropsten Lightweight Protocol) encoded data.
core/mkalloc.go - Entry point for the mkalloc library, used for managing memory allocation in the Ethereum client.
miner/stress_clique.go - Entry point for the stress_clique miner, used for testing and benchmarking the Clique consensus algorithm.
miner/stress_ethash.go - Entry point for the stress_ethash miner, used for testing and benchmarking the Ethash consensus algorithm.
p2p/simulations/examples/ping-pong.go - Entry point for the ping-pong simulation example, used for testing and simulating the Ethereum network's p2p protocol.
tests/fuzzers/difficulty/debug/main.go - Entry point for the difficulty fuzzer tests, used for testing and finding vulnerabilities in the Ethereum client's difficulty adjustment algorithm.
tests/fuzzers/les/debug/main.go - Entry point for the les (Light Ethereum Subprotocol) fuzzer tests, used for testing and finding vulnerabilities in the Ethereum client's les implementation.
tests/fuzzers/rangeproof/debug/main.go - Entry point for the rangeproof fuzzer tests, used for testing and finding vulnerabilities in the Ethereum client's range proof implementation.
tests/fuzzers/stacktrie/debug/main.go - Entry point for the stacktrie fuzzer tests, used for testing and finding vulnerabilities in the Ethereum client's stack trie data structure.
tests/fuzzers/vflux/debug/main.go - Entry point for the vflux (Validator Flux) fuzzer tests, used for testing and finding vulnerabilities in the Ethereum client's vflux implementation.