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/Private-Transaction-Process...

63 lines
3.4 KiB

description: Private Transaction Processing
<!--- END of page meta data -->
# Processing Private Transactions
!!!note
Privacy is under development and will be available in v1.1.
Processing private transactions involves the following:
- **Precompiled Contract**: Smart contract compiled from the source language to EVM bytecode and stored by an
Ethereum node for later execution.
- **Privacy Marker Transaction**: Public Ethereum transaction with a payload of the transaction hash of the
private transaction. The `to` attribute of the Privacy Marker Transaction is the address of the privacy precompile contract.
The Privacy Marker Transaction is signed with the [Ethereum node private key](../Configuring-Pantheon/Node-Keys.md#node-private-key).
Private transactions are processed as illustrated and described below.
![Processing Private Transctions](../images/PrivateTransactionProcessing.png)
1. A private transaction is submitted using [eea_sendRawTransaction](../Reference/JSON-RPC-API-Methods.md#eea_sendrawtransaction).
The signed transaction includes transaction attributes that are specific to private transactions:
* `privateFor` specifies the list of recipients
* `privateFrom` specifies the sender
* `restriction` specifies the transaction is of type [_restricted_](Privacy-Overview.md#private-transactions)
1. The JSON-RPC endpoint passes the private transaction to the Private Transaction Handler.
1. The Private Transaction Handler sends the private transaction to Orion.
1. Orion distributes the private transaction directly (that is, point-to-point) to the Orion nodes specified
in the `privateFor` attribute. All Orion nodes specified in by `privateFor` and `privateFrom` store the transaction.
The stored transaction is associated with the transaction hash and privacy group ID.
1. Orion returns the transaction hash to the Private Transaction Handler.
1. The Private Transaction Handler creates a [Privacy Marker Transaction](Privacy-Overview.md#privacy-concepts) for the private
transaction. The Privacy Marker Transaction is propagated using devP2P in the same way as a public Ethereum transaction.
1. The Privacy Marker Transaction is mined into a block and distributed to all Ethereum nodes in the network.
1. The Mainnet Transaction Processor processes the Privacy Marker Transaction in the same way as any other public transaction.
On nodes that contain the privacy precompile contract specified in the `to` attribute of the Privacy Marker Transaction,
the Privacy Marker Transaction is passed to the privacy precompile contract .
!!! note
Nodes receiving the Privacy Marker Transaction that do not contain the privacy precompile contract
specified in the Privacy Marker Transaction ignore the Privacy Marker Transaction.
1. The privacy precompile contract queries Orion for the private transaction and privacy group ID using the
transaction hash.
1. The privacy precompile contract passes the private transaction to the Private Transaction Processor.
The privacy group ID specifies the private world state to use.
1. The Private Transaction Processor executes the transaction. The Private Transaction Processor can read and write to
the private world state, and read from the public world state.
!!! important
For production systems requiring private transactions, we recommend using a network
with a consensus mechanism supporting transaction finality. For example, [IBFT 2.0](../Consensus-Protocols/IBFT.md).