Created
February 25, 2020 21:10
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
βcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccβ | |
β β | |
β _ _ ___ _____ β | |
β | |__ | |___ / __\/__ \ β | |
β | '_ \| / __| / / / /\/ β | |
β | |_) | \__ \/ /___ / / β | |
β |_.__/|_|___/\____/ \/ β | |
β β | |
β=========================================================================β€ | |
β β | |
β blsCT - a private transaction protocol β | |
β β | |
β=========================================================================β€ | |
β β | |
β β | |
β _ Confidential _ β | |
β β | |
β A transaction does not reveal the transacted amount. β | |
β β | |
β β | |
β _ Untraceable _ β | |
β β | |
β It is hard to identify the source of the coins. β | |
β β | |
β β | |
β _ Unlinkable _ β | |
β β | |
β Given two transactions are sent to the same user, it's impossible to β | |
β link them by an observer. Moreover, given two public keys, an β | |
β adversary cannot determine whether they belong to the same user. β | |
β β | |
β β | |
βcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccβ | |
~~~~ WHAT IS blsCT ~~~~ | |
βcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccβ | |
β β | |
β β | |
β _ blsCT transactions are aggregatable _ β | |
β β | |
β two blsCT transactions can be merged in one blsCT transaction. an β | |
β observer can't tell if a transaction has been aggregated! β | |
β transactions can be aggregated infinite times! β | |
β β | |
β β | |
β _ aggregated blsCT transactions are good for privacy _ β | |
β β | |
β blsCT hides the transaction amounts. when two transactions are β | |
β aggregated and their inputs are mixed, an observer can't tell which β | |
β inputs pay which outputs! β | |
β β | |
β β | |
β _ aggregation can be passive _ β | |
β β | |
β transactions can be aggregated at various layers: block construction β | |
β by miners, tx broadcast by nodes, aggregation market by senders! β | |
β β | |
β β | |
β _ blsCT helps scalability _ β | |
β β | |
β only one signature is needed for each block, instead of needing one β | |
β signature for each input! β | |
β β | |
β β | |
β _ liquidity providers can earn money _ β | |
β β | |
β nodes can earn coins offering their coins for mixing β | |
β participating in the aggregation market! β | |
β β | |
β β | |
βcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccβ | |
~~~~ AGGREGATION MARKET ~~~~ | |
$ Hello nodes! If you give me one .βββββββ. | |
$ transaction to mix with mine, I ( NODE2 ) | |
$ .βββββββββ. will pay you 1 NAV! `βββββββ' | |
$ β± β² .βββββββ. | |
$ ( MY NODE β β β β β β β β β β β β β β β β ββΆ ( NODE3 ) | |
$ `. ,' `βββββββ' | |
$ `βββββββ' .βββββ. .βββββ. .βββββ. .βββββββ. | |
S $ .βββββββ. β( TX2 )( TX3 )( TX4 ) β β ( NODE4 ) | |
E $ ( MY TX ) β `βββββ' `βββββ' `βββββ' `βββββββ' | |
N $ `ββββ¬βββ' | |
D $ β β βΌ | |
E $ .βββββββββ. | |
R $ β β± β² | |
$ ββΆ( AGGREGATION ) | |
$ `. ,' | |
$ `ββββ¬βββ' | |
$ The aggregated transaction | |
$ .ββββββΌβββββ. β β β β β is broadcasted to other | |
$ (AGGREGATED TX) nodes | |
$ `βββββββββββ' β | |
β | |
Γ β β β β β .βββββββ. | |
Γ β β β β β β( NODE5 ) | |
Γ .ββββΌβββ. β `βββββββ' | |
Γ ( NODE4 )β β βΌβ β β β .βββββββ. | |
B Γ `βββββββ' .βββββββββ. β β β( NODE6 ) | |
R Γ β β β± β² β `βββββββ' | |
O Γ β βΆ ( AGGREGATION )ββ β .βββββββ. | |
A Γ β βΆ. ,' β β β β( NODE7 ) | |
D Γ β `ββββ¬βββ'ββ β β `βββββββ' | |
C Γ Aggregation happens | |
A Γ again with other β β .ββββββΌβββββ. | |
S Γ txs (AGGREGATED TX) | |
T Γ `βββββββββββ' | |
Γ β | |
Γ .βββββββββββ. .βββββββββββ. | |
Γ (AGGREGATED TX) β (AGGREGATED TX) | |
Γ `βββββββββββ' βΌ `βββββββββββ' | |
β .βββββββββ. β | |
Γ β± β² | |
Γ β β β β β β βΆ( AGGREGATION )β β β β β β | |
Γ `. ,' | |
Γ `βββββββ' | |
Γ And again... β | |
Γ βΌ | |
Γ .βββββββββββ. | |
Γ (AGGREGATED TX) | |
Γ `βββββββββββ' | |
Γ β | |
Γ | |
Γ β | |
Γ βΌ | |
Γ .βββββββββββββ. | |
S Γ _.βββ' `ββββ. | |
T Γ ,β' 'β. | |
A Γ ,' `. | |
K Γ ,' `. | |
E Γ ,' `. | |
R Γ β± BLOCK β² | |
Γ β± ββββββββββββββββ β² | |
/ Γ β± β blsCT TX β β² | |
Γ ; ββββββββββββββββ€ ; | |
M Γ ; β SIGNATURE β ; | |
I Γ ; βββββββββ¬βββββββ€ : | |
N Γ β βINPUT4 βOUTP1 β β | |
E Γ inputs and β β ββΆβINPUT2 βOUTP4 β β | |
R Γ outputs are βINPUT5 βOUTP2 β ; | |
Γ mixed, can't link βINPUT3 βOUTP3 βββββββββββββ ; | |
Γ them βINPUT1 β ... β β ; | |
Γ β ... β β | |
Γ β² βββββββββ΄βββββββ | |
Γ β² this transaction | |
Γ β² pays 1 NAV to each | |
Γ `. node2, node3 and | |
Γ `. node4 | |
Γ `. | |
Γ 'β. | |
Γ `ββββ. _.βββ' | |
Γ `βββββββββββ' | |
Γ | |
Γ | |
Γ | |
~~~~ HOW DOES IT WORK ~~~~ | |
ββββββββββββββββ ββββββββββββββββ | |
β TX 1 β β TX 2 β | |
ββββββββββββββββ€ ββββββββββββββββ€ | |
β SIGNATURE β β SIGNATURE β | |
βββββββββ¬βββββββ€ βββββββββ¬βββββββ€ | |
βINPUT1 βOUTP1 β βINPUT4 βOUTP3 β | |
βINPUT2 βOUTP2 β βINPUT5 βOUTP4 β | |
βINPUT3 β β βINPUT6 β β | |
βββββββββ΄βββββββ βββββββββΌβββββββ | |
β | |
.βββββββββ. β | |
β β± β² | |
β βΆ ( AGGREGATION ) β β | |
`. ,' | |
`βββββββ' | |
β | |
βΌ | |
ββββββββββββββββ | |
β TX β | |
ββββββββββββββββ€ | |
β SIGNATURE ββ β β only one signature | |
βββββββββ¬βββββββ€ | |
βINPUT4 βOUTP1 β | |
inputs and outputs β β ββΆβINPUT2 βOUTP4 β | |
are mixed, can't link βINPUT5 βOUTP2 β | |
them βINPUT3 βOUTP3 β | |
βINPUT1 β β | |
βββββββββ΄βββββββ | |
~~~~ HOW DOES A TX LOOK LIKE ~~~~ | |
βcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccβ | |
β β | |
β BLS signature - aggregation of the signatures: β | |
β β | |
β β | |
β for each input: β | |
β β | |
β Sign(prev output spending key, H(input)) β | |
β β | |
β β | |
β for each output: β | |
β β | |
β Sign(output blinding key, H(output)) β | |
β β | |
β β | |
ββββββββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββ€ | |
β β β | |
β β β | |
β β BLS output β | |
β β β | |
β β amount: 0xffffffff as a marker β | |
β β to show it is a bls output. β | |
β β β | |
β β scriptPub: spending script. β | |
β β <TRUE> if no spending β | |
β β conditions. β | |
β β β | |
β β blinding key: public key used to β | |
β β create a bls signature of the β | |
β β output and as ephemeral key for β | |
β BLS input β creating a shared secret. β | |
β β β | |
β Same structure as a normal β spending key: public key β | |
β input. It can only point to a β authorized to spend, derived β | |
β BLS output. β using the shared secret. β | |
β β β | |
β β encrypted data: amount, blinding β | |
β β factor and memo encrypted using β | |
β β the shared secret. β | |
β β β | |
β β amount commitment: pedersen β | |
β β commitment to the output amount β | |
β β and a blinding factor. β | |
β β β | |
β β range proof: proof that amount β | |
β β is positive. β | |
β β β | |
β β β | |
βcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccβ | |
~ CRYPTOGRAPHIC PRIMITIVES ~ | |
β=========================================================================β | |
β β | |
β _ BLS signatures _ β | |
β β | |
β https://tools.ietf.org/html/draft-boneh-bls-signature-00 β | |
β β | |
β β | |
β _ Bulletproofs _ β | |
β β | |
βcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccβ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment