An enterprise-grade Java-based, Apache 2.0 licensed Ethereum client https://wiki.hyperledger.org/display/besu
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
besu/docs/Privacy/Privacy.md

93 lines
4.5 KiB

## Privacy
### Private Transaction
A transaction conforming to the definition of a *restricted* transaction
as defined in the EEA Client Specification v2. The private payload is
only stored within the nodes participating in the transaction and not
in any other node. 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.
The sending actor is specified in the `privateFrom` attribute of the
transaction. The receiving parties are specified in the `privateFor`
attribute of the transaction. See [eea_sendrawtransaction](../Reference/JSON-RPC-API-Methods.md#eea_sendRawTransaction)
for implementation details.
### Important Concepts
- **Precompiled Contract**: A smart contract compiled from its source
language to EVM bytecode and stored by an Ethereum node for later
execution.
- **Privacy**: It is “The right of individuals to control or influence
what information related to them may be collected and stored and by
whom and to whom that information may be disclosed.” For the purposes
of this Specification, this right of privacy also applies to
organizations to the extent permitted by law.
- **Private State**: Data that is not shared in the clear in the
globally replicated state tree. This data can represent bilateral or
multilateral arrangements between counterparties, for example in
private transactions.
- **Private Transaction**: A transaction where some information about
the transaction, such as the payload data, or the sender and
recipient, is only available to the subset of network actors who are
parties to that transaction.
- **Private Transaction Manager**: A subsystem of an Enterprise Ethereum
system for implementing privacy known as an Enclave.
e.g. [Orion](https://github.com/PegaSysEng/orion).
- **Actor**: The public key of someone involved in the private transaction (e.g. a `privateFor` actor).
- **Privacy group id**: A unique identifier associated with the set of actors
that are involved in private transaction.
### How Private Transaction is Processed
1. A private transaction is sent to the [eea_sendrawtransaction](../Reference/JSON-RPC-API-Methods.md#eea_sendRawTransaction)
endpoint, using the `privateFor` attribute to specify the list of actors,
The `privateFrom` attribute specifies the sending actor, and `restriction`
attribute is set to *restricted*.
2. The JSON RPC endpoint hands off the private transaction to a
Private Transaction Handler.
3. The Private Transaction Handler sends the private transaction to an Enclave
(Private Transaction Manager)
4. The Enclave will store the private transaction in map. The transaction will
be associated with a random key (Enclave-key) identifying that transaction
in the enclave and a privacy group id.
5. The Enclave distributes the private transaction point-to-point directly
to the enclaves of actors specified in the `privateFor` attribute. All
enclaves storing this transaction will associate it with the same key and
privacy group id.
6. The Enclave returns the Enclave-key back to the Private
Transaction Handler (as a response to the synchronous HTTP call).
7. The Private Transaction Handler will create a Privacy Marker Transaction (PMT).
A PMT is a standard public Ethereum transaction. The payload of the PMT
is the Enclave-key of the private transaction. The `to` attribute of the PMT the
privacy precompile contract. The PMT is signed with the nodes default key.
The PMT is sent to the transaction pool. Once the PMT has been mined in a block
it is distributed to all nodes in the network.
8. The Transaction Processor of every node in the network will process the
PMT as per any other public transaction. The PMT will be passed to the
privacy precompile contract on those nodes that contain that precompile
contract specified in the `to` attribute of the PMT.
8. The Privacy Precompile Contract queries the Enclave for the Private
Transaction and Privacy Group Id based on the Enclave-key.
9. The Privacy Precompile Contract executes the Private Transaction using the
Private Transaction Processor, specifying the private world state to use based on the
Privacy Group Id. The Private Transaction Processor can read and write to
the private world state, and read from the public world state.
### Privacy JSON-RPC API method
The [EEA methods](../Reference/JSON-RPC-API-Methods.md#eea_sendRawTransaction) created to
provide and support privacy.
!!!note EEA methods are for privacy features. Privacy features are under development and will be available in v1.1.