DRAFT EEA Client Spec implementation matrix

©2019-2022 EEA Inc. All Rights reserved. Please see the Legal Notice for more details.

Status of this document

This is a working document. It is made available informational purposes on an AS-IS basis, The information is likely to contain errors. This document is not endorsed by the EEA, its board or membership.

This Specification is copyright © 2018-2021 Enterprise Ethereum Alliance Incorporated (EEA). It is made available under the terms of the Apache License version 2.0. [[Apache2]]

Introduction

This document attempts to provide initial information on which requirements of the EEA client spec are currently implemented, or being implemented, by which EEA clients. Additions and corrections to the data should be filed as a pull request in the EEA Client Spec repository, or notified to the Technical Specification Working Group through the EEA contact interface.

Requirement Autonity Strato Besu Quorum Wanchain
Requirement Autonity Strato Besu Quorum Wanchain
[P] SMRT-030: Enterprise Ethereum clients MUST support smart contracts of at least 24,576 bytes in size. Yes Yes Yes Yes Yes
[P] SMRT-040: Enterprise Ethereum clients MUST read and enforce a size limit for smart contracts from the maxCodeSize parameter in the network configuration, specified as a number of kilobytes. No ? Yes ?
[P] SMRT-060: Enterprise Ethereum clients MUST read and enforce a size limit for smart contracts from the maxCodeSize parameter in the network configuration, specified as a javascript object as defined in the section The maxCodeSize parameter. No No No No No
[P] JRPC-010: Enterprise Ethereum clients MUST provide support for the following Ethereum JSON-RPC API methods:
  • net_version
  • net_peerCount
  • net_listening
  • eth_protocolVersion
  • eth_syncing
  • eth_coinbase
  • eth_hashrate
  • eth_gasPrice
  • eth_accounts
  • eth_blockNumber
  • eth_getBalance
  • eth_getStorageAt
  • eth_getTransactionCount
  • eth_getBlockTransactionCountByHash
  • eth_getBlockTransactionCountByNumber
  • eth_getCode
  • eth_sendRawTransaction
  • eth_call
  • eth_estimateGas
  • eth_getBlockByHash
  • eth_getBlockByNumber
  • eth_getTransactionByHash
  • eth_getTransactionByBlockHashAndIndex
  • eth_getTransactionByBlockNumberAndIndex
  • eth_getTransactionReceipt
  • eth_getUncleByBlockHashAndIndex
  • eth_getUncleByBlockNumberAndIndex
  • eth_getLogs
Yes ? Yes Yes ?
[P] JRPC-007: Enterprise Ethereum clients SHOULD implement JSON-RPC-API methods to be backward compatible with the definitions given in version e8e0771 of the Ethereum JSON-RPC API reference, unless breaking changes were made and widely implemented for the health of the ecosystem. For example, to fix a major security or privacy problem. Yes ? Yes ? Yes ?
[C] JRPC-015: Enterprise Ethereum clients MUST provide the capability to accept and respond to JSON-RPC method calls over a websocket interface. Yes ? Yes Yes ?
[C] JRPC-040: Enterprise Ethereum clients MUST provide an implementation of the debug_traceTransaction method from the Go Ethereum Management API. Yes ? Yes Yes ?
[C] JRPC-050: Enterprise Ethereum clients MUST implement the JSON-RPC-PUB-SUB API. Yes ? Yes Yes ?
[P] JRPC-070: Enterprise Ethereum clients implementing additional nonstandard subscription types for the JSON-RPC-PUB-SUB API MUST prefix their subscription type names with a namespace prefix other than eea_. Yes ? Yes Yes ?
[P] JRPC-080: Enterprise Ethereum clients must not use the prefix eea_ for the names of JSON-RPC methods that are not defined by this specification. Yes ? Yes Yes ?
[P] JRPC-020: Enterprise Ethereum clients MUST implement at least one of the following extensions to create private transaction types defined in the Section "Private Transactions":
  • eea_sendTransaction, or
  • eea_sendRawTransaction.
Yes ? Yes Yes ?
[P] JRPC-025: Enterprise Ethereum clients MAY implement the following experimental extensions to create private transaction types defined in the Section "Private Transactions":
  • eea_sendTransactionAsync and
  • eea_sendRawTransactionAsync.
No ? No Yes ?
[P] JRPC-030: The eea_sendTransactionAsync, eea_sendTransaction, eea_sendRawTransactionAsync, and eea_sendRawTransaction methods MUST respond with a JSON-RPC error response when an unimplemented private transaction type is requested. The error response MUST have the code -50100 and the message Unimplemented private transaction type. No ? Yes Yes ?
[C] JRPC-035: If a restricted private transaction is requested with values for both the privateFor and privacyGroupId parameters, Enterprise Ethereum clients MUST return an error. The error response MUST have the code -50100 and the message Invalid private transaction parameters. Not Applicable ? Yes ? ?
[P] PERM-300 permissioning contracts provided by an Enterprise Ethereum client SHOULD be certified as conforming to EthTrust Security Level 1, version 1 ? ? ? ? ?
[P] PERM-330 permissioning contracts provided by an Enterprise Ethereum client SHOULD be certified as conforming to EthTrust Security Level 3, version 1 ? ? ? ? ?
[P] PERM-200: Enterprise Ethereum clients MUST NOT allow an incoming connection from a node unless either:

  • The connectionAllowed function, as specified in Section , returns a value permitting the connection,
  • or
  • The client implements PERM-220 and it has cached the result that the connection is permitted.
No (uses a custom contract for this function) ? Yes No ?
[P] PERM-210: When checking the response to connectionAllowed, if any unknown permissioning bits are found to be zero, Enterprise Ethereum clients MUST reject the connection. No (uses a custom contract for this function) ? Yes No ?
[P] PERM-220: On receipt of a NodePermissionsUpdated event containing an addsRestrictions property with the value true, Enterprise Ethereum clients MUST:
  • Purge or refresh cache as appropriate from previous calls to connectionAllowed where the result returned was true.
  • Close any network connections that are no longer permitted.
  • Impose newly added restrictions on any network connections that have had restrictions added.
No (uses a custom contract for this function) ? Not Applicable No ?
[P] PERM-230: On receipt of an AccountPermissionsUpdated event containing an addsPermissions property with the value true, Enterprise Ethereum clients MUST:
  • Purge or refresh cache as appropriate from previous calls to connectionAllowed where the result returned was false.
  • Check whether existing network connections have had their restrictions lifted and allow future actions that are now permitted.
No (uses a custom contract for this function) ? Not Applicable No ?

[P] PERM-240: Enterprise Ethereum clients MUST NOT accept a transacttion unless either:

    • The client calls the transactionAllowed function, as specified in Section Account permissioning function, for the transaction, with worldstate as at the block's parent, and
    • the function returns a value of true;
    or
    • The client has previously called the transactionAllowed function, as specified in Section Account permissioning function, for the transaction, with worldstate as at the block's parent, and
    • The function returned a value of true, and
    • the client has not subsequently received an AccountPermissionsUpdated event containing an addsRestrictions property with the value true.
Uses a custom contract for this function ? Yes Uses a custom contract for this function ?
[P] PERM-250: On receipt of an AccountPermissionsUpdated event containing an addsRestrictions property with the value true, Enterprise Ethereum clients MUST:
  • Purge all cached results from previous calls to transactionAllowed where the result returned was true.
  • Impose newly added restrictions on any accounts that have had restrictions added.
No (uses a custom contract for this function) ? Not Applicable No ?
[P] PERM-260: On receipt of an AccountPermissionsUpdated event containing an addsPermissions property with the value true, Enterprise Ethereum clients MUST:
  • Purge all cached results from previous calls to transactionAllowed where the result returned was false.
  • Allow future transactions from accounts that are now permitted.
No (uses a custom contract for this function) ? Not Applicable No ?
[P] PRIV-220: Enterprise Ethereum clients SHOULD enable encryption of all data stored by the client.
Since some users will prefer to use a system-wide functionality to do this, a good implementation will support that choice.
? ? ? ? ?
[P] PRIV-010: Enterprise Ethereum clients MUST support restricted private transactions. no ? Yes Yes ?
When implementing restricted private transactions:
[P] PRIV-005: Enterprise Ethereum clients MUST implement the eea_getPrivateTransactionRecipt method to return receipts for restricted private transactions./th> Not Applicable ? No No ?
[P] PRIV-011: Enterprise Ethereum clients MUST use the SHA3-512 algorithm to calculate hashes of the payload in restricted private transactions. Not Applicable ? No Yes ?
[P] PRIV-020: Enterprise Ethereum clients MUST encrypt payload data when stored in restricted private transactions. Not Applicable ? Yes Yes ?
[P] PRIV-030: Enterprise Ethereum clients MUST encrypt payload data when in transit in restricted private transactions. Not Applicable ? Yes Yes ?
[P] PRIV-050: Enterprise Ethereum clients MAY encrypt metadata when in transit in restricted private transactions. Not Applicable ? Yes No ?
[P] PRIV-060: Nodes that relay a restricted private transaction but are not party to that transaction, MUST NOT store payload data. Not Applicable ? Yes Yes ?
[P] PRIV-070: Nodes that relay a restricted private transaction but are not party to that transaction SHOULD NOT store the metadata. Not Applicable ? Yes Yes ?
[P] PRIV-080: The implementation of the eea_sendTransactionAsync, eea_sendTransaction, eea_sendRawTransactionAsync, or eea_sendRawTransaction methods (see Section ) with the restriction parameter set to restricted, MUST result in a restricted private transaction. Not Applicable ? Yes Yes ?
[P] PRIV-180: Enterprise Ethereum clients SHOULD be able to extend the set of parties to a private transaction (or forward the private transaction in some way). Yes ? Yes Yes ?
[P] PRIV-190: Enterprise Ethereum clients SHOULD provide the ability for nodes to achieve consensus on their mutually private transactions. Not Applicable ? Yes Yes ?
[C] NODE-010: Enterprise Ethereum clients MUST provide the ability to specify at startup a list of static peer nodes to establish peer-to-peer connections with. Yes ? Yes Yes ?
[C] NODE-020: Enterprise Ethereum clients MUST provide the ability to enable or disable peer-to-peer node discovery. Yes ? Yes Yes ?
[P] NODE-090: Enterprise Ethereum clients SHOULD implement transaction ordering according to the "by Price and by Nonce" algorithm, sorting transactions by price while respecting the nonce ordering for each account. Yes ? ? Yes ?
[P] NODE-095: Enterprise Ethereum clients MUST specify explicitly and precisely in documentation any transaction ordering logic that is different from that of Geth as recommended in NODE-090 Not Applicable ? ? Not Applicable ?
[P] PART-010: Enterprise Ethereum clients MUST provide the ability to specify a list of accounts that are permitted to transact with the blockchain. Yes ? Yes Yes ?
[P] PART-015: Enterprise Ethereum clients MUST be able to verify that accounts are present on the list required by PART-010: when adding transactions from the account to a block, and when verifying a received block containing transactions created by that account. Yes ? Yes Yes ?
[P] STOR-040: Enterprise Ethereum clients SHOULD permit a smart contract operating on private state to access private state created by other smart contracts involving the same parties to the transaction. Not Applicable ? Yes Yes ?
[P] STOR-050: Enterprise Ethereum clients MUST NOT permit access to private state created by smart contracts except by parties to the transaction. Not Applicable ? Yes Yes ?
[P] STOR-070: Enterprise Ethereum clients SHOULD encrypt any private state held in persistent storage. Not Applicable ? Yes No ?
[P] EXEC-010: Enterprise Ethereum clients MUST provide a smart contract execution environment implementing the public Ethereum EVM opcode set used in the mainnet's London network upgrade. Yes Yes Yes Yes ?
[P] EXEC-020: Enterprise Ethereum clients that provide a smart contract execution environment extending the public Ethereum EVM opcode set MUST register the opcode and name of the Enterprise Ethereum client in the EEA's opcode registry. Not Applicable Not Applicable Not Applicable Not Applicable Not Applicable
[P] EXEC-025: Enterprise Ethereum clients that provide a smart contract execution environment extending the public Ethereum EVM opcode set SHOULD register a decription of the new functionality, and a URL for a complete specification and test suites in the EEA's opcode registry, and create an EIP describing the new opcode. Not Applicable Not Applicable Not Applicable Not Applicable ?
[P] EXEC-030: Enterprise Ethereum clients SHOULD support the ability to synchronize their public state with the public state held by other public Ethereum nodes. Yes Yes Yes Yes ?
[C] EXEC-060: Enterprise Ethereum clients MAY support configurable alternative cryptographic curves as encryption options for Enterprise Ethereum blockchains. No No No Yes ?
[P] CONS-092: Enterprise Ethereum clients MUST support the "QBFT" Byzantine Fault Tolerant consensus algorithm. ? ? Yes Yes ?
[P] CONS-093: Enterprise Ethereum clients MUST support the "Clique" Proof of Authority consensus algorithm. See EIP-225 Yes ? Yes Yes ?
[P] CONS-110: Enterprise Ethereum clients MUST provide the ability to specify the consensus algorithms, through network configuration, to be used for each public blockchain, private blockchain, and sidechain in use. Yes ? Yes Yes ?
[P] PROT-010: Nodes MUST be identified and advertised using the Ethereum enode URL format. Yes ? Yes Yes ?
[P] PROT-015: Enterprise Ethereum clients MUST implement the DEVp2p Node Discovery protocol. Yes ? Yes Yes ?
[P] PROT-020: Enterprise Ethereum clients MUST use the DEVp2p Wire Protocol for messaging between nodes to establish and maintain a communications channel for use by capability protocols. Yes ? Yes Yes ?
[P] PROT-050: Enterprise Ethereum clients MUST be capable of making direct connections to any number of nodes specified as participants in a private transaction. Not Applicable ? Not Applicable Not Applicable ?
[P] PROT-060: Enterprise Ethereum clients SHOULD implement the Whisper protocol. Yes ? No Yes ?
[P] PROT-070: Enterprise Ethereum clients MUST interpret the parameters defined in Section A.2 Defined Events, Functions, and Parameters for network configuration when found in a genesis.json file. ? ? ? No ?
[P] XCLI-001: Enterprise Ethereum clients MUST implement EIP-155 (included in the Spurious Dragon hard fork) to introduce `chain_id` into transaction signing. ? ? Yes Yes ?
[P] XCLI-002: Enterprise Ethereum clients MUST implement EIP-658 (included in the Byzantium hard fork) to embed the transaction status code in receipts. ? ? Yes ? ?
[P] XCLI-004: Enterprise Ethereum clients MUST implement the Typed Transaction Envelope defined in EIP-2718. ? ? Yes ? ?
[P] XCLI-006: Enterprise Ethereum clients MUST implement the Access List transaction type defined in EIP-2930. ? ? Yes ? ?
[P] XCLI-007: Enterprise Ethereum clients MUST reject contracts whose first byte has the value `EF`, as specified in [[!EIP-3541]]. ? ? Yes ? ?
[P] XCLI-020: Enterprise Ethereum clients MAY extend the public Ethereum APIs. To maintain compatibility, Enterprise Ethereum clients SHOULD ensure these new features are a superset of the public Ethereum APIs. Yes ? Yes Yes ?
[P] XCLI-030: Enterprise Ethereum clients MUST implement the Gas mechanism specified in the Ethereum Yellow Paper. Yes ? Yes Yes ?
[P] XCLI-035: Enterprise Ethereum clients MUST implement the same gas cost per opcode used in the mainnet's London network upgrade. Yes Yes Yes Yes ?
[P] XCLI-040: Enterprise Ethereum clients MUST function correctly when the Gas price is set to zero. Yes ? Yes Yes ?
[P] XCLI-050: Enterprise Ethereum clients MUST implement the eight precompiled contracts defined in Appendix E of the Ethereum Yellow Paper:
  • ecrecover
  • sha256hash
  • ripemd160hash
  • dataCopy
  • bigModExp
  • bn256Add
  • bn256ScalarMul
  • bn256Pairing
Yes ? Yes Yes ?
[P] XCLI-051: Enterprise Ethereum clients MUST implement the precompiled contract for RFC7693 Blake 2b F compression defined in EIP-152

Yes ? Yes ? ?
[P] XCLI-055: Enterprise Ethereum clients MUST register precompiled contracts following the mechanisms defined by EIP-1352: Yes ? Yes Yes ?
[P] XCLI-060: Enterprise Ethereum clients MUST support the Contract Application Binary Interface (ABI) for interacting with smart contracts. Yes ? Yes Yes ?
[P] XCLI-070: Enterprise Ethereum clients MUST support Recursive Length Prefix (RLP) encoding for binary data. Yes ? Yes Yes ?
[C] MTRC-010: Enterprise Ethereum clients MUST implement EIP-2159

? ? Yes ? ?