Proof of transaction – Ethereum Research – Medium
Understanding the sending of a private transaction
Each of Alice and Bob actions (making and accepting the offer) are private transactions. A private transaction is a standard Ethereum transaction created and signed by the sender’s wallet (Alice and respectively Bob’s wallet), that gets stored in the PrivateTxStorage smart contract in the public blockchain by a privacy node (Alice and respectively Bob’s node).
First, at the level of the private transaction created by Alice (or Bob) the action is encoded as an interaction with a smart contract that has been created before. This transaction is signed with Alice’s wallet, ie Alice must have access to the private key of that wallet.
Alice’s privacy node generates a json web token that gets signed with the private key of Alice’s node. Alice (or someone she trusts) must control that private key. The JW Token contains a gzip of the transaction and the public key of the privacy node.
Alice’s privacy node generates a symmetric 32 bytes key and a 16 bytes random init vector for AES-256-CBC encryption algorithm, and a unique id for the transaction.
Alice’s privacy node then sends to the public blockchain the symmetrically encrypted JWT via transactions signed by a local wallet that it must have the private key for. The transactions contains 320 bytes parts of the encrypted JWT to reduce the size of each transaction and facilitate its inclusion into the public chain of blocks. Then for each receivers (itself and Bob’s node) Alice’s node encrypts with the public key of the recipient the entry id of the transaction and the aes elements to decrypt the JWT and generates events in the public smart contract