EEA Standard
EEA Standard
Editors:
Abstract
This document specifies Enterprise Ethereum, a set of extensions to the public Ethereum
blockchain to support the scalability, security, and privacy demands of enterprise deployments.
The copyright in this document is owned by Enterprise Ethereum Alliance Inc. (“EEA” or
“Enterprise Ethereum Alliance”). No modifications, edits or changes to the information in this
document are permitted. Subject to the terms and conditions described herein, this document may
be duplicated for internal use, provided that all copies contain all proprietary notices and
disclaimers included herein. Except as otherwise provided herein, no license, express or implied,
by estoppel or otherwise, to any intellectual property rights are granted herein.
Use of this document and any related intellectual property incorporated herein, is also governed by
the Bylaws, Intellectual Property Rights Policy and other governing documents and policies of
EEA and is subject to the disclaimers and limitations described below.
No use or display of any of the following names or marks “Enterprise Ethereum Alliance”, the
acronym “EEA,” the EEA logo (or any combination thereof) to claim compliance with or
conformance to this document (or similar statements) is permitted absent EEA membership and
express written permission from the EEA. The EEA is in process of developing a compliance
testing and certification program only for the EEA members in good standing, which it expects to
launch in 2019.
THE CONTENTS OF THIS DOCUMENT ARE PROVIDED “AS IS” WITH NO WARRANTIES
WHATSOEVER, INCLUDING ANY WARRANTY OF MERCHANTABILITY,
NONINFRINGEMENT, FITNESS FOR ANY PARTICULAR PURPOSE, SATISFACTORY
QUALITY, OR REASONABLE SKILL OR CARE, OR ANY WARRANTY ARISING OUT OF
ANY COURSE OF DEALING, USAGE, TRADE PRACTICE, PROPOSAL, SPECIFICATION
OR SAMPLE. EEA DOES NOT WARRANT THAT THIS DOCUMENT IS COMPLETE OR
WITHOUT ERROR AND DISCLAIMS ANY WARRANTIES TO THE CONTRARY.
Each user of this document hereby acknowledges that software or products implementing the
technology specified in this document (“EEA-Compliant Products”) may be subject to various
regulatory controls under the laws and regulations of various governments worldwide. Such laws
and regulatory controls may govern, among other things, the combination, operation, use,
implementation and distribution of EEA-Compliant Products. Examples of such laws and
regulatory controls include, but are not limited to, airline regulatory controls, telecommunications
regulations, finance industry and security regulations, technology transfer controls, health and
safety and other types of regulations. Each user of this document is solely responsible for the
compliance by their EEA-Compliant Products with any such laws and regulations and for obtaining
any and all required authorizations, permits, or licenses for their EEA-Compliant Products related
to such regulations within the applicable jurisdictions. Each user of this document acknowledges
that nothing in this document or the relevant specification provides any information or assistance in
connection with securing such compliance, authorizations or licenses.
NOTHING
2 IN THIS DOCUMENT CREATES
©2018 Enterprise ANYInc.
Ethereum Alliance WARRANTIES
All Rights reserved. WHATSOEVER
Enterprise Ethereum Alliance has not investigated or made an independent determination regarding
title or non-infringement of any technologies that may be incorporated, described or referenced in
this document. Use of this document or implementation of any technologies described or
referenced herein may therefore infringe undisclosed third-party patent rights or other intellectual
property rights. The user is solely responsible for making all assessments relating to title and non-
infringement of any technology, standard, or specification referenced in this document and for
obtaining appropriate authorization to use such technologies, standards, and specifications,
including through the payment of any required license fees.
©2018 Enterprise Ethereum Alliance reserves the right to adopt any changes or alterations to this
document as it deems necessary or appropriate without any notice. The user is solely responsible
for determining whether this document has been superseded by a later version or a different
document.
This section describes the status of this document at the time of its publication. Newer documents
might supersede this document.
The changes made since version 1 of the Specification, published on 2 May 2018, have been
reviewed by the Enterprise Ethereum Alliance (EEA) Technical Specification Working Group
(TSWG). The TSWG agreed on 2018-09-27 to request that the EEA Board approve this draft to be
published as an EEA Standard obsoleting the Enterprise Ethereum Client Specification version 1.
The TSWG expects at time of writing to produce a new revision of this specification for release in
the second quarter of 2019 which would obsolete this version.
Although predicting the future is known to be difficult, as well as ongoing quality enhancement,
future work on this specification is expected to include the following aspects:
Continued assessment of the needs of different industries to ensure their requirements for
Enterprise Ethereum are taken into account.
Table of Contents
1. Introduction
1.1 Why Produce a Client Specification?
2. Conformance
2.1 Experimental Requirements
2.2 Requirement Categorization
3. Security Considerations
3.1 Attacks on Ethereum Clients
3.2 Positive Security Design Patterns
3.3 Handling of Sensitive Data
3.4 Security of Client Implementations
5. Application Layer
5.1 ÐApps Sublayer
5.2 Infrastructure Contracts and Standards Sublayer
5.3 Smart Contract Tools Sublayer
6. Tooling Layer
6.1 Permissions and Credentials Sublayer
6.1.1 Nodes
6.1.2 Participants
6.1.3 Ethereum Accounts
6.1.4 Additional Permissioning Requirements
6.2 Integration and Deployment Tools Sublayer
6.2.1 Integration Libraries
6.2.2 Enterprise Management Systems
6.3 Client Interfaces Sublayer
6.3.1 JSON-RPC
6.3.2 Compatibility with the Core Ethereum JSON-RPC API
6.3.3 Extensions to the JSON-RPC API
6.3.3.1 eea_sendTransactionAsync
6.3.3.2 eea_sendTransaction
6.3.3.3 eea_clientCapabilities
6.3.4 Network Permissioning Using Smart Contracts
6.3.4.1 Participant
6.3.4.2 ParticipantGroup
6.3.4.3 Network
6.3.4.4 PermissioningDecider
6.3.4.5 Node Blacklisting
6.3.5 Inter-chain
6.3.6 Oracles
9. Network Layer
9.1 Network Protocol Sublayer
10. Anti-Spam
A. Additional Information
A.1 Terminology
A.2 Acknowledgments
A.3 Changes
B. References
B.1 Normative references
B.2 Informative references
1. Introduction §
This section is non-normative.
This Specification defines implementation requirements for Enterprise Ethereum clients, including
interfaces to the external-facing components of Enterprise Ethereum and how they are intended to
be used.
Enterprise Ethereum is based on technologies and concepts of public Ethereum, only extending
that as necessary to support the needs of enterprise deployments. The extensions to public
Ethereum are designed to satisfy the performance, permissioning, and privacy demands of
enterprise deployments, informally known as the “three Ps” of Enterprise Ethereum.
For Ðapp developers, for example, a Client Specification ensures clients provide a set of identical
interfaces, so they can be sure their app will work on all conforming clients. This enables an
ecosystem where users can change the software they use to interact with a running blockchain,
instead of being forced to rely on a single vendor to provide support.
From the beginning, this approach has underpinned the development of Ethereum, and it meets a
key need for enterprise blockchain use.
Client diversity also provides a natural mechanism to help verify that the protocol specification is
unambiguous because interoperability errors revealed in development highlight parts of the
protocol that different engineering teams interpret in different ways.
2. Conformance §
As well as sections marked as non-normative, all authoring guidelines, diagrams, examples, and
notes in this specification are non-normative. Everything else in this specification is normative.
The key words MAY, MUST, MUST NOT, SHOULD, and SHOULD NOT are to be interpreted as
described in [RFC2119].
[P] XCLI-005: Features of public Ethereum, if implemented, MUST be compatible with the
Metropolis phase 1: Byzantium, 16 October 2017 release of Ethereum.
Future versions of this Specification are expected to align with newer public Ethereum versions.
This Specification includes requirements and Application Programming Interfaces (APIs) that are
described as experimental. Experimental means that a requirement or API is in early stages of
development and might change as feedback is incorporated. Implementors are encouraged to
implement these experimental requirements, with the knowledge that requirements in future
versions of the Specification are not guaranteed to be compatible with the current version. Please
7 ©2018 Enterprise Ethereum Alliance Inc. All Rights reserved.
send your comments and feedback on the experimental portions of this Specification to the EEA
Technical Steering Committee at https://entethalliance.org/contact/.
All requirements in this Specification are categorized, as described in the table below.
3. Security Considerations §
This section is non-normative.
However some aspects of Ethereum in general, and Enterprise Ethereum in particular, are
especially important in the enterprise environment.
Enterprise Ethereum software development shares with all software development the need to
consider security issues and the obligation to update implementations in line with new information
and techniques to protect its users and the ecosystem in which it operates.
Modeling attacks against an Enterprise Ethereum client helps identify and prioritize the necessary
security countermeasures to implement. Some attack categories to consider include:
"Eclipse attacks" that attempt to exhaust client network resources or fool its node-discovery
protocol.
Targeted exploitation of consensus bugs in EVM implementations.
Malicious code contributions to open-source repositories.
All varieties of social engineering attacks.
Complex interfaces increase security risk by making user error more likely. For example, entering
Ethereum addresses by hand is prone to errors. Therefore, implementations can reduce the risk by
providing user-friendly interfaces, ensuring users correctly select an opaque identifier using tools
like a contact manager.
Ethereum features such as Gas mitigate the risk of resource-consumption attacks by rogue network
participants. Enterprise Ethereum provides additional tools to reduce security risks, such as more
granular permissions for actions in a network.
Permissioning plays some role in mitigating network-level attacks (like the 51% attack), but it is
important to carefully consider what risks are of most concern to a client implementation versus
which risks are better mitigated by updates to the Ethereum consensus protocol design.
The implications of private data stored on the network are also important to consider, and motivate
several requirements within this Specification.
The long-term persistence of encrypted data on any public platform (such as the Ethereum
blockchain) exposes it to eventual decryption by brute-force attack, accelerated by the inevitable
periodic advances in cryptanalysis. A future shift to post-quantum cryptography is a current
concern, but it will likely not be the last advancement in the field. Assuming no encryption scheme
endures for eternity, a degree of protection is required to reasonably exceed the lifetime of the
data's sensitivity.
There are several specific functionality areas that are more prone to security issues arising from
implementation bugs. These deserve a greater focus during the design and the security assessment
of an Enterprise Ethereum client:
The P2P protocol used for communication among nodes in the peer-to-peer Ethereum network is a
client's primary vector for exposure to untrusted input. In any software, the program logic that
handles untrusted inputs is the primary focus area for implementing secure data handling.
Object (de)serialization is commonly part of the underlying implementation of the P2P protocol,
but also a source for complexity that has historically been prone to security vulnerabilities across
many implementations and many programming languages. Selecting a deserializer that offers strict
control of data typing can help mitigate the risk.
The Ethereum specification defines many of the technical aspects of public/private key pair format
and cryptographic algorithm choice, but an Ethereum client implementation is still responsible for
properly generating these keys using a well-reviewed cryptographic library. Specifically, a client
implementation needs a properly seeded, cryptographically secure, pseudo-random number
generator during the keypair generation step. An insecure pseudo-random number generator is not
generally apparent by merely observing its outputs, but enables attackers to break the encryption
and reveal users' sensitive data.
The following two diagrams show the relationship between Enterprise Ethereum components that
can be part of any EEA-compliant client implementation. The first is a stack representation of the
architecture showing a library of interfaces, while the second is a more traditional style architecture
diagram showing a representative architecture.
SMART CONTRACT
SMART CONTRACT LANGUAGES FORMAL VERIFICATION
TOOLS
TOOLING
PERMISSIONS &
WALLETS KEY MANAGEMENT HSM PERMISSIONING / AUTHENTICATION
CREDENTIALS
INTEGRATION &
DEPLOYMENT TOOLS INTEGRATION LIBRARIES ENTERPRISE MANAGEMENT SYSTEMS
CLIENT INTERFACES /
JSON-RPC INTER-CHAIN ORACLES
APIs
PRIVACY / SCALING
CORE BLOCKCHAIN
STORAGE/LEDGER ON-CHAIN PUBLIC STATE ON-CHAIN STORAGE OFF-CHAIN STORAGE ON-CHAIN PRIVATE STATE
NETWORK
All Yellow Paper, Public Ethereum, and Application Layer components may be extended for Enterprise Ethereum as required.
© 2018 Enterprise Ethereum Alliance
The architecture stack for Enterprise Ethereum consists of the following five layers:
Network
Core Blockchain
Tooling
Application.
The Core Blockchain layer consists of a mechanism to establish consensus between Ethereum
nodes for the acceptance of new blocks. Public consensus algorithms provide a method of doing
this when operating with public Ethereum chains. An example of a public consensus algorithm is
the Proof of Work (PoW) algorithm, described in the [Ethereum Yellow Paper]. Over time, PoW is
likely to be phased out from use and replaced with new methods, such as Proof of Stake (PoS).
Enterprise Ethereum implementations provide private consensus algorithms for operations within
their private consortium network.
The Execution sublayer implements a virtual machine used within a client, such as the Ethereum
Virtual Machine (EVM) or Ethereum-flavored WebAssembly [eWASM], its instruction set, and
other computational capabilities as required.
Lastly, within the Core Blockchain layer, the Storage and Ledger sublayer is provided to store the
blockchain state, such as smart contracts for later execution. This sublayer follows blockchain
security paradigms such as using cryptographically hashed tries, an Unspent Transaction Output
(UTXO) model, or at-rest-encrypted key-value stores.
The Privacy and Scaling layer implements the necessary privacy and scaling extensions needed in
Enterprise Ethereum to support enterprise-grade deployments.
This Specification does not seek to constrain experimentation to improve the scalability of future
implementations of public Ethereum or Enterprise Ethereum. Instead, there is recognition that
several forms of scaling improvements will be made to clients over time, the exact form of which
cannot be known at this time.
Scaling solutions are broadly categorized into layer 1 and layer 2 solutions.
Layer 2 scaling solutions do not require changes to the base level protocol layer and are
implemented at the application protocol layer using smart contracts. Off-Chain (Layer 2) scaling
mechanisms might be implemented using techniques such as [Plasma] and [state-channels] as well
as other Off-Chain (Compute) scaling mechanisms.
Similarly, various On-Chain privacy mechanisms are being explored, such as support for zero-
knowledge proofs on public Ethereum.
Enterprise Ethereum implementations are required to provide support for private transactions as
described in later sections. Enterprise Ethereum implementations can also provide support for off-
chain Trusted Computing, enabling privacy during code execution.
The Tooling layer contains the APIs used to communicate with clients. The primary API is a JSON-
RPC API used to submit transactions for execution or to deploy smart contracts to maintain
arbitrary state. Other APIs are allowed, including those intended for inter-blockchain operations and
to call external services, such as trusted oracles.
Public Ethereum nodes are often implemented using common integration libraries, such as [web3j],
[web3.js], or [Nethereum]. Likewise, Enterprise Ethereum implementations are expected to
integrate with enterprise management systems using common APIs, libraries, and techniques.
Public Ethereum nodes can choose to offer local handling of user credentials, such as key
management systems and wallets. Such facilities might also be implemented outside the scope of a
client. Enterprise Ethereum implementations enable restricted operations based on user permissions
and authentication schemes.
The Tooling layer also provides support for the compilation, and possibly formal verification of,
smart contracts through the use of parsers and compilers for one or more smart contract languages.
Languages such as [Solidity] and [LLL] are commonly implemented, but support for other
languages might be provided without restriction.
Finally, the Application layer exists, often fully or partially outside of a client, where higher-level
services are provided. For example, Ethereum Name Service (ENS), node monitors, blockchain
Wallets can interface with Enterprise Ethereum extensions using the Extended RPC API, as shown
in Figure 2. A wallet can also interface directly with the enclave of a private transaction manager,
or interface with a public Ethereum client.
5. Application Layer §
The Application layer sits at the top of the Enterprise Ethereum stack. This layer contains the
components that are built on top of the core Enterprise Ethereum architecture.
[C] DAPP-010: ÐApps MAY use the Enterprise Ethereum extensions to the JSON-RPC API
defined in this Specification.
Also at this layer are the blockchain explorers, the tools to monitor the blockchain, and the
business intelligence tools.
The Infrastructure Contracts and Standards sublayer shows emerging standards outside the
Enterprise Ethereum core specification. The components in this layer provide enablers for the
applications built on top of them.
Decentralized identity standards are being developed by the Decentralized Identity Foundation
[DIF].
Role Based Access Control (RBAC) defines methods for authentication and restricting system
access to authorized users, potentially realized through smart contracts.
Network Governance methods control which entities can join the network and hence assist with
safeguarding exchanges.
Token standards provide common interfaces and methods along with best practices. These include
[ERC-20], [ERC-223], [ERC-621], [ERC-721], and [ERC-827].
15 ©2018 Enterprise Ethereum Alliance Inc. All Rights reserved.
The ENS provides a secure mapping from simple, human-readable names to Ethereum addresses
for resources both on and off the blockchain.
Enterprise Ethereum inherits the smart contract tools used by public Ethereum. This consists of
smart contract languages and associated parsers, compilers, and debuggers, as well as methods used
for formal verification of smart contracts.
[E:D] SMRT-010: Implementations MUST provide deployment and debugging tools for Enterprise
Ethereum smart contracts.
Examples of smart contract deployment and debugging tools used in public Ethereum include
[Truffle] and [Remix].
[E:D] SMRT-020: Implementations SHOULD extend formal verification methods for use with
Enterprise Ethereum smart contracts.
Enterprise Ethereum implementations enable use of these tools and methods through
implementation of the Execution sublayer, as described in Section 8.2 Execution Sublayer.
6. Tooling Layer §
Permissioning refers to the ability of an individual node to join the network, and the ability of an
individual participant or node to perform specific functions on the Enterprise Ethereum network.
For example, only certain nodes can act as validators, while other participants can instantiate smart
contracts.
6.1.1 Nodes §
[C] NODE-020: Implementations MUST provide the ability to enable or disable peer-to-peer node
discovery.
[P] NODE-030: Implementations MUST provide the ability to specify a whitelist of the node
identities permitted to join the network.
[P] NODE-040: Implementations MAY provide the ability to specify a blacklist of the node
identities not permitted to join the network.
[P] NODE-050: It MUST be possible to specify the node whitelist through an interface. For
example, through a transaction into a smart contract, or through an API.
[P] NODE-060: It MUST be possible to specify the node blacklist (if implemented) through an
interface. For example, through a transaction into a smart contract, or through an API.
[P] NODE-070: Implementations MUST provide a way to certify the identities of nodes.
[P] NODE-080: An Enterprise Ethereum client SHOULD provide mechanisms to define clusters of
nodes at the organizational level, in the context of permissioning.
6.1.2 Participants §
[P] PART-010: Implementations MUST provide the ability to specify a whitelist of participant
identities who are permitted to submit transactions.
[P] PART-020: Implementations MAY provide the ability to specify a blacklist of participant
identities who are not permitted to submit transactions.
[P] PART-030: It MUST be possible to specify the participant whitelist through an interface. For
example, through a transaction into a smart contract, or through an API.
[P] PART-040: It MUST be possible to specify the participant blacklist (if implemented) through
an interface. For example, through a transaction into a smart contract, or through an API.
[P] PART-060: Implementations MUST provide the ability to specify participant identities in a way
aligned with the usual concepts of groups and roles.
[P] ACCT-010: Implementations SHOULD provide the ability to specify a whitelist of the
Ethereum accounts permitted to be used on the blockchain.
[P] ACCT-020: It MUST be possible to specify the Ethereum account whitelist (if implemented)
through an interface. For example, through a transaction into a smart contract, or through an API.
[C] PERM-020: Implementations SHOULD provide the ability for configuration to be updated at
run time without the need to restart.
[C] PERM-030: Implementations MAY provide configuration through the use of flat files,
command-line options, or configuration management system interfaces.
[C] PERM-040: Implementations MAY support local key management allowing users to secure
their private keys.
[C] PERM-050: Implementations MAY support secure interaction with an external Key
Management System for key generation and secure key storage.
[C] PERM-060: Implementations MAY support secure interaction with a Hardware Security
Module (HSM) for deployments where higher security levels are needed.
Enterprise-ready capabilities provide the ability to integrate with enterprise management systems
using common APIs, libraries, and techniques, as shown in Figure 3.
[E:O] ENTM-060: Implementations MAY include support for other enterprise management
systems, as appropriate, such as:
6.3.1 JSON-RPC §
[JSON-RPC] is a stateless, light-weight remote procedure call (RPC) protocol using [JSON] as its
data format. The [JSON-RPC] specification defines several data structures and the rules around
their processing.
[P] JRPC-010: Implementations MUST provide support for the following methods of the public
Ethereum JSON-RPC API:
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_sign
eth_sendRawTransaction
eth_call
eth_estimateGas
eth_getBlockByHash
eth_getBlockByNumber
eth_getTransactionByHash
eth_getTransactionByBlockHashAndIndex
eth_getTransactionByBlockNumberAndIndex
eth_getTransactionReceipt
eth_getUncleByBlockNumberAndIndex
eth_getLogs.
[C] JRPC-015: Clients MUST provide the capability to accept and respond to [JSON-RPC]
method calls over a websocket interface.
[C] JRPC-060: Clients MAY implement additional subscription types for the [JSON-RPC-PUB-
SUB] API.
[P] JRPC-070: 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_.
[P] JRPC-080: The [JSON-RPC] method name prefix eea_ MUST be reserved for future use for
RPC methods specific to the EEA.
6.3.3.1 eea_sendTransactionAsync §
Using this function allows sending many transactions without waiting for recipient confirmation.
NOTE
As in the public Ethereum [JSON-RPC-API], the two key datatypes for this call, which are
passed hex encoded, are unformatted data byte arrays (DATA) and quantities
(QUANTITY). When encoding unformatted data, encode as hex, prefix with "0x", and use
two hex digits per byte. When encoding quantities (integers and numbers), encode as hex
and prefix with "0x".
Parameters
gas QUANTITY – Optional. The gas, as an integer, provided for the transaction. gasPrice
value QUANTITY – Optional. The value, as an integer, sent with this transaction.
data DATA, 20 bytes – Transaction data (compiled smart contract code or encoded function
data).
nonce QUANTITY – Optional. A nonce value, as an integer. This allows you to overwrite
your own pending transactions that use the same nonce.
privateFrom DATA, 20 bytes – The public key of the sender of this private transaction.
privateFor DATA – An array of the public keys of the intended recipients of this private
transaction.
callbackUrl STRING – The URL to post the results of the transaction to.
Callback Body
txIndex QUANTITY - The index position, as an integer, of the transaction in the block.
blockHash DATA, 32 Bytes - The hash of the block this transaction was in. blockNumber
QUANTITY - The number of block, as an integer, this transaction was in. from DATA, 20
to DATA, 20 Bytes - The address of the receiver. null if a contract creation transaction.
cumulativeGasUsed QUANTITY - The total amount of gas used when this transaction was
executed in the block.
logsBloom DATA, 256 Bytes - A bloom filter for light clients to quickly retrieve related logs.
error STRING – Optional. Includes an error message describing what went wrong.
Request Format
Response Format
{
"id":1,
"jsonrpc": "2.0",
}
Callback Format
{
"txHash":
"0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331"
"txIndex": "0x1", // 1
"blockNumber": "0xb", // 11
"blockHash": "0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed
"cumulativeGasUsed": "0x33bc", // 13244
"gasUsed": "0x4dc", // 1244
"contractAddress": "0xb60e8dd61c5d32be8058bb8eb970870f07233155", // or nu
"logs": "[{
// logs as returned by getFilterLogs, etc.
}, ...]",
"logsBloom": "0x00...0", // 256 byte bloom filter
"status": "0x1"
}
6.3.3.2 eea_sendTransaction §
Creates a private transaction, signs it, generates the transaction hash and submits it to the
transaction pool, and returns the transaction hash.
As in the public Ethereum [JSON-RPC-API], the two key datatypes for this call, which are
passed hex encoded, are unformatted data byte arrays (DATA) and quantities
(QUANTITY). When encoding unformatted data, encode as hex, prefix with "0x", and use
two hex digits per byte. When encoding quantities (integers and numbers), encode as hex
and prefix with "0x".
Parameters
to DATA, 20 bytes – Optional when creating new contract. The address the transaction is sent
to.
gas QUANTITY – Optional. The gas, as an integer, provided for the transaction. gasPrice
value QUANTITY – Optional. The value, as an integer, sent with this transaction.
data DATA, 20 bytes – Transaction data (compiled smart contract code or encoded function
data).
nonce QUANTITY – Optional. A nonce value, as an integer. This allows you to overwrite
your own pending transactions that use the same nonce.
privateFrom DATA, 20 bytes – The public key of the sender of this private transaction.
privateFor DATA – An array of the public keys of the intended recipients of this private
transaction.
Returns
DATA, 32 Bytes - The transaction hash, or the zero hash if the transaction is not yet available.
Request Format
26 ©2018 Enterprise Ethereum Alliance Inc. All Rights reserved.
curl -X POST --data
'{"jsonrpc":"2.0","method":"eea_sendTransaction","params": [{
"from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155",
"to": "0xd46e8dd67c5d32be8058bb8eb970870f072445675",
"gas": "0x76c0",
"gasPrice": "0x9184e72a000",
"value": "0x9184e72a",
"data":
"0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb9708
"privateFrom": "0xb60e8dd61c5d32be8058bb8eb970870f07233155",
"privateFor": "0xd46e8dd67c5d32be8058bb8eb970870f072445675",
"restriction": "restricted"}],
"id":1}'
Response Format
{
"id":1,
"jsonrpc": "2.0",
"result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527
}
6.3.3.3 eea_clientCapabilities §
Parameters
None.
Returns
This call returns client capability information fields in the format of [JSON] name values pairs:
Request Format
{
"id":1,
"jsonrpc": "2.0",
"result": [{"consensus": ["PoW", "IBFT" , "Raft"]},
{"restriction": ["restricted", "unrestricted"]} }
This section presents a collection of smart contract interfaces to achieve network permissioning.
This permissioning model consists of networks, participant groups, and participants. A network is a
collection of enterprises wishing to interact using an Enterprise Ethereum blockchain. Each
enterprise is represented as a participant group with an accompanying list of client nodes belonging
to that enterprise.
A participant group can have client nodes added or removed from it's node list. After a client node
is added to a participant group's node list, that client node is allowed to join and become part of the
Enterprise Ethereum blockchain network.
Node permissioning on the network is therefore achieved by deciding which participant groups can
join and which must leave the network. If a participant group joins the network, the nodes
accompanying that participant group are permitted to join. Conversely, if a participant group must
leave the network, the nodes accompanying that participant group are disconnected from the
network.
Participant groups are a collection of participants. Each participant has individually specified
permissions. The permissions reflect the different ways the participant can act on behalf of the
participant group. A participant corresponds to a single person or agent allowed to administer the
network. A participant is represented by one or more Ethereum addresses.
Participants originate changes (mutations), such as adding a new participant to a participant group,
adding a new client node to a participant group's node list, or inviting other participant groups to
join the network.
A decider function is used to decide, based on the number of invitations for a specific participant
group, whether or not the participant group is permitted to join the network. The decider also
determines when to evict a member and especially when the decider should be changed, so that the
network logic can change.
In this permissioning model there are four fundamental smart contract interfaces:
Participant
ParticipantGroup
Network
PermissioningDecider.
6.3.4.1 Participant §
The Participant smart contract contains participants initialized with a name and an identifier,
like an email address. Additional information, such as alternative contact information or PGP
public keys, could also be included by implementations of Participant.
interface Participant {
// Metadata
// Authorization mutation.
// Authorization queries.
How authentication happens is up to the users, typically depending on the relationship between the
endorser and the endorsee. Some example authentication mechanisms could be:
[email protected] sends an email to [email protected] (note the different domain address), asking Bob to
join a video call to assert his ownership of the Ethereum account.
Alice walks over to Bob's desk and asks what his participant address is.
NOTE
Any caller can add any address as a parent of a participant. To authenticate a participant,
parent links must be followed and the corresponding child link must be present.
6.3.4.2 ParticipantGroup §
The ParticipantGroup smart contract represents a group of participants and their permissions.
import "./Participant.sol";
interface ParticipantGroup {
// Metadata
// Member queries
// Member enumeration
// Membership mutation
// Events
The addParticipant function grants permissions as follows. The requester chooses which
permissions to grant to an object, but cannot grant permissions it does not have itself. Effectively,
this means the actual permissions are the bitwise AND of the requester's permissions and the
contract Permissions {
// Abilities to change the membership of a participant group.
uint constant public CAN_ADD_PARTICIPANT = 0x1;
uint constant public CAN_REMOVE_PARTICIPANT = 0x2;
6.3.4.3 Network §
As described above, networks are a collection of participant groups. Each participant group
supplies a list of client nodes as [enode] URLs, with the intent that the Network smart contract is
used as a permissions model for client nodes (servers) allowed to connect to the Enterprise
Ethereum blockchain. If a participant group belongs to a network, any participant with the
CAN_ADD_NODE permission can add to the client node list for that participant group. Each
participant group has autonomy over the nodes it has running in the network.
To add a participant group to the network, every participant group that is already a member of the
network can vote to invite or uninvite the participant group. These two functions record the
desire of the participant group, but it is up to the permissioning decider to choose when to update
the network roster.
import "./ParticipantGroup.sol";
import "./Participant.sol";
import "./PermissioningDecider.sol";
interface Network {
// Node queries.
// Authorization queries.
// Check if the node has `READ` permission in the context of the network.
function checkRead(string _node) external view returns (bool);
// Check if the node has `WRITE` permission in the context of the network
function checkWrite(string _node) external view returns (bool);
// Retrieve the number of invites for the participant group to have `READ
// permissions in the context of the network.
function readInvitesReceived(ParticipantGroup) external view
returns (uint);
// Retrieve the number of invites for the participant group to have `WRIT
// permissions in the context of the network.
function writeInvitesReceived(ParticipantGroup) external view
returns (uint);
// Rule inspection.
6.3.4.4 PermissioningDecider §
import "./ParticipantGroup.sol";
import "./Network.sol";
interface PermissioningDecider {
// The permission the participant group now has, if approved.
function inviteApproved(Network, ParticipantGroup) external view
returns (uint8);
Static: ParticipantGroups are never removed or added from the Network, and the
PermissioningDecider never changes.
AdminRun: The Network has an administrator group, which is the only vote counted for
approving or revoking approval of a ParticipantGroup, or changing the
PermissionDecider.
Node blacklisting at the participant group level (that is, within an enterprise) is achieved by
including the following additional functions in the `ParticipantGroup` smart contract.
...
// Add a participant within the participant group to the blacklist.
function blacklistNode(Participant, string _node) interface;
Blacklisting of client nodes belonging to another participant group (that is, another enterprise) in
the network is achieved by including the following functions in the Network and
PermissioningDecider smart contracts.
interface Network {
...
// Vote to add a participant in another participant group to the blacklis
voteToBlacklist(ParticipantGroup, Participant, string _node) external;
// Retrieve the number of votes for the node to be added to the blacklist
blacklistVotesReceived(string _node) external view returns (uint);
// Retrieve the number of votes for the node to be removed from the
// blacklist.
unblacklistVotesReceived(string _node) external view returns (uint);
...
// Whether the node should be added to the blacklist.
function blacklistApproved(Network, string _node) external view
returns (bool);
6.3.5 Inter-chain §
With the rapid expansion in the number of different blockchains and ledgers, inter-chain mediators
are necessary to allow interaction between blockchains. Like other enterprise solutions that include
privacy and scalability, inter-chain mediators can be Layer 2, such as using public Ethereum to
anchor (or peg) state needed to track and checkpoint state.
6.3.6 Oracles §
In many situations, smart contracts need to interact with real-world information to operate. Oracles
securely bridge the data-gap from the smart contract to the real-world information source.
[C] ORCL-010: Enterprise Ethereum implementations SHOULD provide the ability to securely
interact with oracles to send and receive real-world information.
Privacy, in the context of this Specification, refers to the ability to keep data confidential between
parties privy to that transaction and to choose which details to provide about a party to one or more
other parties.
7.1.1 On-chain §
Various on-chain techniques are proposed to improve the security and privacy capabilities of
networks.
Future on-chain security techniques could include techniques such as ZK-SNARKS, range
proofs, or ring signatures.
[C] OFFCH-010: Enterprise Ethereum implementations MAY provide the ability for off-chain,
trusted execution of transactions and smart contracts.
Many users and operators of Enterprise Ethereum implementations are required by their legal
jurisdictions to comply with laws and regulations related to privacy. For example, banks in the
European Union are required to comply with the European Union revised Payment Services
Directive [PSD2] when providing payment services, and the General Data Protection Regulation
[GDPR] when storing personal data regarding individuals. Users of Enterprise Ethereum signal
their intent as to privacy requirements when they send a transaction by utilizing a parameter on the
[JSON-RPC-API] calls. The parameter indicates the preferred transaction type at runtime. This
section defines two transaction types to be used for different privacy requirements:
Transaction information consists of two parts, metadata and payload data. Metadata is the envelope
information necessary to execute a transaction. Payload data is the transaction contents.
[P] PRIV-010: Implementations MUST support private transactions using at least one of the
following methods:
Private transactions where payload data is transmitted to and readable only by the direct
participants of a transaction. These transactions are referred to as restricted private
transactions.
Private transactions where payload data is transmitted to all nodes participating in the network
but readable only by the direct participants of a transaction. These transactions are referred to
as unrestricted private transactions.
[P] PRIV-020: Implementations MUST support masking or obfuscation of the payload data
when stored in restricted private transactions (for example, using cryptographic encryption).
[P] PRIV-030: Implementations MUST support masking or obfuscation of the payload data
when in transit in restricted private transactions (for example, using cryptographic
encryption).
[P] PRIV-040: Implementations MAY support masking or obfuscation of the metadata when
stored in restricted private transactions (for example, using cryptographic encryption).
[P] PRIV-050: Implementations MAY support masking or obfuscation of the metadata when
in transit in restricted private transactions (for example, using cryptographic encryption).
[P] PRIV-060: Nodes that relay a restricted private transaction but are not participants in that
transaction MUST NOT store transaction payload data.
[P] PRIV-070: Nodes that relay a restricted private transaction but are not participants in that
transaction SHOULD NOT store transaction metadata.
[P] PRIV-080: The implementation of the [[JSON RPC API]]
eea_sendTransactionAsync or eea_sendTransaction methods (if implemented) with
the restriction parameter set to restricted, MUST result in a restricted private transaction.
Private transactions can be implemented by creating private channels, or private smart contracts
where the payload data is only stored within the nodes participating in a transaction, and not in
any other node (despite that the payload data might be encrypted and only decodable by
authorized parties). Private transactions are kept private between related parties, so unrelated
parties have no access to the content of the transaction, the sending party, or the list of
participating addresses. In fact, a private smart contract has a similar relationship to the
blockchain that hosts it as a private blockchain network that is only replicated and certified by a
subset of participating nodes, but is notarized and synchronized on the hosting blockchain. This
private blockchain is thus able to refer to data in less restrictive private smart contracts, as well
as in public smart contracts.
Obfuscated data that is replicated across all nodes can be reconstructed from any node, albeit in
encrypted form. Mathematical transactions on numerical data are intended to be validated by
the underlying network on a zero-knowledge basis, only to be accessed verbatim by
participating parties to the transaction. Specifically, a client is expected to have the ability to
maintain and transact against numerical balances certified by the whole community of
validators on a zero-knowledge basis. An alternative to the zero-knowledge approach could be
the combined use of ring signatures, stealth addresses, and mixing, which is demonstrated to
provide the necessary level of obfuscation that is mathematically impossible to penetrate and
does not rely on the trusted setup required by ZK-SNARKS.
[P] PRIV-180: Implementations SHOULD be able to extend the set of participants in a private
transaction (or forward the private transaction in some way).
[P] PRIV-190: Implementations SHOULD provide the ability for nodes to achieve consensus on
their mutually private transactions.
The differences between restricted and unrestricted private transactions are summarized in
the table below.
MUST mask or
MAY mask or
obfuscate in
obfuscate
transit
MAY mask or MUST mask or
obfuscate obfuscate SHOULD mask or
SHOULD mask
obfuscate sender and
or obfuscate in
recipient identity
storage
MAY allow
SHOULD NOT allow MUST NOT allow MAY allow storage by
storage by non-
storage by non- storage by non- non-participating
participating
participating nodes participating nodes nodes
nodes
Implementations can support different levels of privacy, as outlined in Table 3 below, and still
comply with this Specification. Because permissioning and privacy are interrelated concepts, the
privacy levels specified contain requirements related to both the permissioning and privacy sections
of this Specification.
Privacy Level C is the base privacy level for all compliant implementations. To comply with
Privacy Level C, implementations have to comply with all MUST and MUST NOT requirements of
this Specification. The requirements specifically related to permissioning are the MUST peer node
connectivity and user-level permissioning requirements in Sections 6.1.1 Nodes and 6.1.2
Participants. Implementations have a choice when complying with privacy requirements. To
comply with Privacy Level C, implementations are required to comply with all the MUST and
MUST NOT requirements in Section 7.1.3 Private Transactions related to either restricted private
transactions or unrestricted private transactions.
Supporting specific SHOULD requirements increases the privacy and permissioning abilities for an
implementation and are thus recognized as having specific value to users.
Privacy Level B is obtained by providing support for the requirements of Privacy Level C, plus
implementing all the SHOULD requirements related to peer node connectivity and user-level
permissioning requirements in Sections 6.1.1 Nodes, 6.1.2 Participants, and 6.1.4 Additional
Permissioning Requirements. Implementations obtaining Privacy Level B demonstrate increased
interoperability with the public Ethereum ecosystem and other Enterprise Ethereum
implementations.
Privacy Level A is obtained by providing support for Privacy Level B, plus implementing all the
SHOULD and SHOULD NOT requirements in Section 7.1.3 Private Transactions. Implementations
obtaining Privacy Level A demonstrate increased security and privacy protections for their users.
Privacy Level A is considered best practice for Enterprise Ethereum implementations and its
attainment is highly encouraged.
EEA certification programs will recognize implementations as providing support for Privacy
Levels A, B, or C. Certificates of Certification are subject to the unique requirements of EEA-
approved vertical business segments.
Best practice Implementations provide support for Privacy Level B and all the
A privacy and SHOULD and SHOULD NOT requirements in Section 7.1.3
permissioning Private Transactions.
Enterprise Ethereum networks will likely have demands placed on them to handle higher volume
transaction rates and potentially computationally heavy tasks. Various scaling methods can be
employed to increase transaction processing rates.
On-chain scaling at layer 1 improves the capability to handle more transactions by changing the
underlying Ethereum protocol.
Off-chain scaling at layer 2 improves the capability to handle more transactions but without
changing the underlying Ethereum protocol.
[P] SCAL-010: Enterprise Ethereum implementations SHOULD provide the ability for improved
on-chain processing rates of transactions and smart contracts using layer 1 and layer 2 solutions.
46 ©2018 Enterprise Ethereum Alliance Inc. All Rights reserved.
7.2.3 Off-chain (Compute) §
Off-chain scaling moves some of the processing burden from the underlying blockchain network.
[C] SCAL-020: Enterprise Ethereum implementations SHOULD provide the ability for off-chain
processing of transactions and smart contracts.
7.2.4 Performance §
Performance refers to the overall performance of the network. Ideally, increased usage of the
network does not degrade its performance.
EEA certification programs will recognize implementations as providing support for enterprise-
appropriate transaction rates based on the needs of EEA-approved vertical business segments.
[C] STOR-020: Implementations MAY implement data storage used for optional off-chain
operations. For example, implementations can locally choose to cache the results from a trusted
oracle or store information related to systems extensions beyond the scope of this Specification.
[C] STOR-030: Implementations providing support for multiple networks (for example, one or
more consortium networks or a public network) MUST store data related to private transactions for
those networks in private state dedicated to the relevant network.
[P] STOR-040: A smart contract operating on private state SHOULD be permitted to access
private state created by other smart contracts involving the same participants.
[P] STOR-050: A smart contract operating on private state MUST NOT be permitted to access
private state created by other smart contracts involving different participants.
[P] STOR-070: If an implementation stores the private blockchain state persistently, it SHOULD
protect the data using an Authenticated Encryption with Additional Data (AEAD) algorithm, such
as one described in [RFC5116].
Implementations might choose to provide additional APIs outside this Specification (such as
the WebDAV protocol described in [RFC4918]) for interaction with file objects.
8.1.1 Finality §
[P] EXEC-010: Enterprise Ethereum implementations MUST provide a smart contract execution
environment implementing the public Ethereum EVM op-code set [EVM-Opcodes].
[P] EXEC-020: Enterprise Ethereum implementations MAY provide a smart contract execution
environment extending the public Ethereum EVM op-code set [EVM-Opcodes].
[P] EXEC-030: Implementations SHOULD support the ability to synchronize their public state
with the public state held by other public Ethereum nodes.
[P] EXEC-040: Implementations SHOULD provide support for the compilation, storage, and
execution of precompiled contracts.
Trusted Computing ensures only authorized parties can execute smart contracts on an execution
environment related to a given consortium network.
Multiple encryption techniques can be used to secure Trusted Computing and private state.
[C] EXEC-060: Implementations SHOULD provide configurable encryption options for use in
conjunction with consortium networks.
[P] CONS-030: One or more consensus algorithms SHOULD allow operations as part of an
Enterprise Ethereum network.
[P] CONS-050: One or more consensus algorithms MAY support operations on sidechain
networks.
[P] CONS-080: Consensus algorithms MAY communicate in-band or out-of-band with other
clients, as requested. That is, consensus algorithm implementations can make and receive network
traffic external to the client-to-client network protocol.
[P] CONS-110: Implementations MUST provide the ability to specify the consensus algorithms,
through configuration, to be used for each public blockchain, private blockchain, and sidechain in
use.
9. Network Layer §
[P] PROT-010: Nodes MUST be identified and advertised using the Ethereum enode URL format
[enode].
[P] PROT-020: Implementations SHOULD use the DEVp2p Wire Protocol [DEVp2p-Wire-
Protocol] for messaging between nodes to establish and maintain a communications channel for
use by higher layer protocols. These higher layer protocols are known as capability protocols.
The [Ethereum-Wire-Protocol] defines the capability protocols for messaging between Ethereum
client nodes to exchange status, including block and transaction information. [Ethereum-Wire-
Protocol] messages are sent and received over an already established DEVp2p connection between
nodes.
[P] PROT-030: Implementations SHOULD support, at a minimum, the eth/62 and eth/63
[Ethereum-Wire-Protocol] implementations.
[P] PROT-040: Implementations MAY add new protocols or extend existing Ethereum protocols.
Multi-party private smart contracts and transactions do not require direct connectivity between
all parties because this is very impractical in enterprise settings, especially when many parties
are allowed to transact. Common nodes to all parties (for example, voters or blockmakers
acting as bootnodes to all parties, and as backup or disaster recovery nodes) are intended to
function as gateways to synchronize private smart contracts transparently. Transactions on
private smart contracts could then be transmitted to all participating parties in the same way.
10. Anti-Spam §
This section refers to mechanisms to prevent the network being degraded with a flood of
intentional or unintentional transactions. This might be realized through interfacing with an
external security manager, as described in Section 6.2.2 Enterprise Management Systems, or
implemented by the Enterprise Ethereum client, as described in the following requirement.
Providing a mechanism to enforce a cost for gas, so transacting parties have to acquire and
pay for (or destruct) private ether to transact.
The requirements relating to supporting and extending the public Ethereum opcode set are outlined
in Section 8.2 Execution Sublayer.
[P] XCLI-020: Implementations MAY extend the public Ethereum APIs. To maintain
compatibility, implementations SHOULD ensure these new features are a superset of the public
Ethereum APIs.
Extensions to public Ethereum APIs could include enterprise peer-to-peer APIs, the
[JSON-RPC-API] over IPC, HTTP/HTTPS, or websockets.
[P] XCLI-030: Enterprise Ethereum clients MUST implement the Gas mechanism specified in the
[Ethereum-Yellow-Paper].
[P] XCLI-050: Enterprise Ethereum clients MUST implement the eight precompile contracts
defined in Appendix E of the [Ethereum-Yellow-Paper]:
ecrecover
sha256hash
ripemd160hash
dataCopy
bigModExp
bn256Add
bn256ScalarMul
bn256Pairing
NOTE
XCLI-060: Enterprise Ethereum clients MUST support the Contract Application Binary Interface
([ABI]) for interacting with smart contracts.
XCLI-070: Enterprise Ethereum clients MUST support Recursive Length Prefix ([RLP]) encoding
for binary data.
Various techniques can help do this efficiently. For an Enterprise Ethereum chain with few copies,
off-chain backup information can be important to ensure the long-term existence of the information
stored. A common backup format helps increase client interoperability.
A. Additional Information §
A.1 Terminology §
The following table provides a list of terms and definitions used in context in this Specification.
Term Definition
Nodes on the blockchain reaching agreement about the current state of the
Consensus
blockchain.
Consortium An Ethereum network, Enterprise or public, not part of the Ethereum MainNet.
52 ©2018 Enterprise Ethereum Alliance Inc. All Rights reserved.
Network
ÐApp
(Decentralized
A software application running on a decentralized peer-to-peer network, often a
Application, or
blockchain. A ÐApp might include a user interface running on another
sometimes
(centralized or decentralized) system.
Distributed
Application)
Enterprise
Ethereum See Client.
Client
Enterprise The portions of an Enterprise Ethereum system implementing the business logic
Ethereum requirements and interfaces of this Specification, over and above the
Extension functionality of public Ethereum.
Ethereum
The public Ethereum blockchain network with the network identifier of 1.
MainNet
Ethereum
A secure and decentralized way to address resources both on and off the
Name Service
Ethereum blockchain using simple, human-readable names.
(ENS)
Ethereum
Virtual A runtime computing environment for the execution of smart contracts on
Machine Ethereum. Each node operates an EVM.
(EVM)
A collection of users that have or are allocated one or more common attributes.
Group For example, common privileges allowing users to access a specific set of
services or functionality.
Hardware
Security A physical device to provide strong and secure key generation, key storage, and
Module cryptographic processing.
(HSM)
The set of data that describes and gives information about the payload data in a
Metadata
transaction.
Off-Chain
Extensions to public Ethereum using smart contracts, or techniques such as
(Layer 2)
[Plasma], and [state-channels], to facilitate increased transaction speeds. For
Scaling
more information, see [Layer2-Scaling-Solutions].
Mechanism
On-Chain
Extensions to public Ethereum, such as ZK-SNARKS, or privacy-preserving
Privacy
trusted computing compute, enabling private transactions.
Mechanism
On-Chain
Extensions to the public Ethereum base protocol, such as [sharding], to facilitate
(Layer 1)
increased transaction speeds. For more information, see [Layer2-Scaling-
Scaling
Solutions].
Mechanism
Precompiled A smart contract compiled from its source language to EVM bytecode and
Contract stored by an Ethereum node for later execution.
State data that is not shared in the clear in the globally replicated state tree. This
Private State data can represent bilateral or multilateral arrangements between counterparties,
for example in private transactions.
A transaction where some information about the transaction, such as the payload
Private
data, or the sender and recipient, is only available to the subset of network
Transaction
participants who are parties to that transaction.
Public
The Ethereum software developed and released by the [Ethereum-Foundation].
Ethereum
Smart
A programming language and associated tooling used to create smart contracts.
Contract
For example, [Solidity] and [LLL].
Language
Trusted
Enabling privacy during code execution.
Execution
Unspent
Transaction Output from a transaction that can be spent as an input for a new transaction.
Output
Whisper A network protocol designed for ÐApps to communicate with one another.
Zero- In cryptography, a method where one party (the prover) can prove to another
knowledge party (the verifier) that the prover knows a value x, without conveying any
Proof information apart from the fact that the prover knows the value x.
A.2 Acknowledgments §
The EEA acknowledges and thanks the many people who contributed to the development of this
Specification.
This specification builds on the work of all who contributed to the previous version, whom we
hope are all acknolwedged in the Enterprise Ethereum Client Specification v1. The editors would
especially like to thank David Hyland-Wood for his incomparable effort as co-editor of that
version.
A.3 Changes §
Full details of all changes since the version 1.0 release of this Specification are available in the
GitHub repository for this Specification.
Pull Request 253: Update terminology from "Trusted Execution Environment" to "Trusted
Computing", and clarify that it is not a specific hardware solution, but can be based on
software.
Pull Request 212: Add requirement PERM-070 requiring a set of smart contracts for network
permissions:
Participant
ParticipantGroup
Network
PermissioningDecider
Pull Request 60: Add eea_sendTransaction, the synchronous method for sending
transaction using RPC.
Pull Request 205: Update requirement JRPC-010 to specify a list of required methods for the
JSON-RPC API, and add requirements:
JRPC-007 to require compatibility with current method versions.
JRPC-011 to allow other methods to be implemented.
JRPC-015 to require support for [[JSON RPC]] calls using websockets.
JRPC-040 to require support for debug_traceTransaction.
JRPC-050, JRPC-060, and JRPC-070 describing requirements to support the
[JSON-RPC-PUB-SUB] API.
JRPC-080 to reserve the eea_ namespace for Enterprise Ethereum extensions.
Pull Request 256: Add non-normative Section 3. Security Considerations, and remove
requirement ONCH-010 mandating an untestable implementation strategy instead of a
requirement on existing implementations.
Pull Request 261: Update requirement PART-050 and add requirement PART-055 to clarify
that implementations MUST support connecting to an identity server, but also support
anonymous participants.
Pull Request 192: Add requirements XCLI-030 and XCLI-040 to implement the Ethereum gas
mechanism, allowing for a gas price of zero.
Pull Request 229: Update requirements OFFCH-010 and EXEC-050 to state clients MAY
(instead of SHOULD) implement Off-chain transactions / Trusted Computing.
Pull Request 147: Update requirement SCAL-010 about the ability for improved on-chain
processing rates of transactions and smart contracts using layer 1 and layer 2 solutions.
Pull Request 225: Update requirement EXEC-040 to state clients SHOULD (instead of MAY)
support EEA-defined precompiled smart contracts.
Pull Request 198: Add requirement PROT-060 that clients SHOULD implement the [Whisper-
protocol].
Pull Request 216: Remove requirements SYNC-010 and SYNC-020 about backup
mechanisms for clients.
Pull Request 213: Remove requirements PERF-010, PERF-020, and PERF-030 about
performance.
Pull Request 217: Remove requirement CONS-090 about support for IBFT [EIP-650]
consensus.
Pull Request 214: Add requirement XCLI-005 about aligning public Ethereum features with
Byzantium release. Remove requirement CONF-010 because we no longer require that clients
can operate on the public Ethereum network.
Pull Request 145: Add requirements PART-070 and PRIV-200 about finer grained
permissioning over different transaction types, closing issue 99.
Pull Request 144: Add requirement ACCT-010 that clients SHOULD support Ethereum
account whitelisting, and requirement ACCT-020 that if account whitelisting is implemented,
it be done through an API.
Pull Request 67: Add the Web3_clientcapabilities RPC method to find information
about client capabilities, closing issue 58. The information available through this method is
expected to be expanded.
B. References §
[ABI]
Contract ABI Specification. Ethereum Foundation. URL:
https://solidity.readthedocs.io/en/develop/abi-spec.html
[debug-traceTransaction]
debug_traceTransaction. URL: https://github.com/ethereum/go-ethereum/wiki/Management-
APIs
[DEVp2p-Wire-Protocol]
ÐΞVp2p Wire Protocol. URL: https://github.com/ethereum/wiki/wiki/ÐΞVp2p-Wire-Protocol
[EIP-650]
Istanbul Byzantine Fault Tolerance. Ethereum Foundation. URL:
https://github.com/ethereum/EIPs/issues/650
[enode]
Ethereum enode URL format. Ethereum Foundation. URL:
https://github.com/ethereum/wiki/wiki/enode-url-format
[ERC-20]
[Byzantine-Fault-Tolerance]
Byzantine Fault Tolerance. URL: https://en.wikipedia.org/wiki/Byzantine_fault_tolerance
[DIF]
Decentralized Identity Foundation. URL: http://identity.foundation/
[EIP-648]
Easy Parallelizability. Ethereum Foundation. URL:
https://github.com/ethereum/EIPs/issues/648
[eWASM]
Ethereum-flavored WebAssembly. URL: https://github.com/ewasm/design
[geth-repo]
Go-Ethereum. URL: https://github.com/ethereum/go-ethereum/
[implementation-code-in-Golang]
implementation code in Golang. URL: https://github.com/ethereum/go-
ethereum/blob/master/core/vm/contracts.go#L50-L360
[PoET]
Proof of Elapsed Time 1.0 Specification. Intel Corporation. 2015-2017. URL: https://
sawtooth.hyperledger.org/docs/core/releases/1.0/architecture/poet.html#
[protocol-buffers]
A language-neutral, platform-neutral extensible mechanism for serializing structured data.
Google Developers. URL: https://developers.google.com/protocol-buffers/
[RAFT]
Raft-based Consensus for Ethereum/Quorum. J.P. Morgan. URL:
https://github.com/jpmorganchase/quorum/blob/master/raft/doc.md
[Remix]
Ethereum Tools for the Web. Ethereum Foundation. URL: https://github.com/ethereum/remix
[RFC4918]
HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV). L. Dusseault,
Ed.. IETF. June 2007. Proposed Standard. URL: https://tools.ietf.org/html/rfc4918
[Truffle]
Ethereum Development Framework. ConsenSys. URL: https://truffleframework.com/