mirror of
https://github.com/0xb100d/manifestos.git
synced 2025-12-16 23:54:22 +01:00
861 lines
48 KiB
Plaintext
861 lines
48 KiB
Plaintext
http://mimblewimble.cash/20161006-WhitePaperUpdate-e9f45ec.pdf
|
||
|
||
Mimblewimble
|
||
Andrew Poelstra∗
|
||
2016-10-06 (commit e9f45ec)
|
||
Abstract
|
||
At about 04:30 UTC on the morning of August 2nd, 2016, an anonymous person using the
|
||
name Tom Elvis Jedusor signed onto a Bitcoin research IRC channel, dropped a document hosted
|
||
on a Tor hidden service[Jed16], then signed out. The document, titled Mimblewimble, described
|
||
a blockchain with a radically different approach to transaction construction from Bitcoin, supporting
|
||
noninteractive merging and cut-through of transactions, confidential transactions, and
|
||
full verification of the current chainstate without requiring new users to verify the full history of
|
||
any coins.
|
||
Unfortunately, while the paper was detailed enough to comminicate its main idea, it contained
|
||
no arguments for security, and even one mistake1
|
||
. The purpose of this paper is to make
|
||
precise the original idea, and add further scaling improvements developed by the author.
|
||
In particular, Mimblewimble shrinks the transaction history such that a chain with Bitcoin’s
|
||
history would need 15Gb of data to record every transaction (not including the UTXO set, which
|
||
including rangeproofs, would take over 100Gb). Jedusor left open a problem of how to reduce
|
||
this; we solve this, and combine it with existing research for compressing proof-of-work
|
||
blockchains, to reduce the 15Gb to less than a megabyte.
|
||
License. This work is released into the public domain.
|
||
∗grindelwald@wpsoftware.net
|
||
1https://www.reddit.com/r/Bitcoin/comments/4vub3y/mimblewimble_noninteractive_coinjoin_
|
||
and_better/d61n7yd
|
||
1
|
||
Contents
|
||
1 Introduction 2
|
||
1.1 Overview and Goals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
|
||
1.2 Trust Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
|
||
2 Preliminaries 5
|
||
2.1 Cryptographic Primitives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
|
||
2.1.1 Standard Primitives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
|
||
2.1.2 Sinking Signatures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
|
||
2.2 Mimblewimble Primitives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
|
||
3 The Mimblewimble Payment System 9
|
||
3.1 Fundamental Theorem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
|
||
3.2 The Blockchain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
|
||
3.3 Consensus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
|
||
3.3.1 Block Headers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
|
||
3.3.2 Proven and Expected Work . . . . . . . . . . . . . . . . . . . . . . . . . . 13
|
||
3.3.3 Sinking Signatures and Compact Chains . . . . . . . . . . . . . . . . . . . 14
|
||
4 Extensions and Future Research 16
|
||
5 Acknowledgements 17
|
||
1 Introduction
|
||
In 2009, Satoshi Nakamoto introduced the Bitcoin cryptocurrency[Nak09], an online currency system
|
||
to allow peer-to-peer transfer of digital tokens. These tokens’ ownership is ascertained by the
|
||
use of public keys, and transfer is accomplished by means of a public ledger, a globally replicated
|
||
list of transactions which destroy unspent transaction outputs (UTXOs) and create new ones of
|
||
equal value but different keys.
|
||
All Bitcoin coins originate in coinbase transactions, transactions which create new outputs without
|
||
destroying any old ones, and which are limited in value to maintain a fixed inflation schedule.
|
||
Once created, they change hands by means of ordinary transactions. This means that new users, in
|
||
10 order to fully verify that their view of the system is uncompromised (absent theft or illegal inflation),
|
||
must download and validate the entire history from the system’s genesis in 2009 until today.
|
||
In other words, they must download and “replay” every transaction that has ever occurred.
|
||
Today the Bitcoin blockchain sits just shy of 100Gb on the author’s disk. Had Bitcoin used Con-
|
||
fidential Transactions[Max15] (CT), each of the approximately 430 million outputs would consume
|
||
2.5Kb each, totalling over a terabyte of historical data2
|
||
.
|
||
In this paper, we describe a research project to design a Bitcoin-like cryptocurrency, which
|
||
achieves dramatically better scaling and privacy properties than Bitcoin. In particular, it allows
|
||
2The author is aware of unpublished research that would reduce this quantity by about 25%; the total is still formidable.
|
||
2
|
||
removal of most historic blockchain data, including spent transaction outputs, rangeproofs and all,
|
||
while still allowing users to fully verify the chain. Indeed, it is possible for the system to function
|
||
20 even if no users retain the vast majority of historic blockchain data.
|
||
Further, this currency allows transactions to be noninteractively combined (a la Coinjoin[Max13a])
|
||
and cut-through[Max13b], eliminating much of the topological structure of the transaction graph. If
|
||
this is done without publishing the original component transactions, the result is an enormous boon
|
||
to user privacy, amplified by CT.
|
||
Unfortunately, it accomplishes these goals at cost of sacrificing functionality.
|
||
1.1 Overview and Goals
|
||
Mimblewimble is a design for a cryptocurrency whose history can be compacted and quickly veri-
|
||
fied with trivial computing hardware even after many years of chain operation. As a secondary goal,
|
||
it should support strong user privacy by means of confidential transactions and an obfuscated trans-
|
||
30 action graph. However, to achieve these goals, Mimblewimble cannot support a general-purpose
|
||
scripting system such as that in Bitcoin. This precludes such functionality as zero-knowledge contingent
|
||
payments[Max16], cross-chain atomic swaps[Nol13] and micropayment channels[PD16].
|
||
Further research is needed to emulate these functionalities on top of Mimblewimble, and is discussed
|
||
in Section 4.
|
||
More precisely,
|
||
• Direct transfer of value between parti(es) to other parti(es) should be possible on the system.
|
||
• All transactions should use confidential transactions to blind their output amounts.
|
||
• Transactions should be noninteractively aggregable[Mou13], i.e. support a noninteractive
|
||
variant of CoinJoin[Max13a, Max13b], such that parties not privy to the original transactions
|
||
40 are unable to separate them. This can improve censorship resistance and privacy, though it is
|
||
unclear how to design a safe peer-to-peer network capable of exploiting this ability.
|
||
• For a new participant, the amount of bandwidth and processing power needed to catch up
|
||
with the system should be proportional to the current state of the system, i.e. the size of the
|
||
UTXO set plus rangeproofs, rather than the total size of all historical transactions.
|
||
As described in the next section, and more thoroughly in Section 3.3, Mimblewimble has
|
||
a scheme for compressing blockchain history to a size polylog in the original size, which in
|
||
practice for a system with Bitcoin’s scale should allow a decade or more of transaction history
|
||
to be verified in several seconds using a couple megabytes of data3
|
||
.
|
||
3Experiments with the compact chains described in this paper suggest that a 500000 block chain may have a compact
|
||
length of around 300 blocks (though with high variance across multiple experiments), each containing sinking signatures
|
||
which average ten 96-byte elliptic curve points, merkle commitments to previous blocks consisting of forty 40-byte (blockhash,
|
||
difficulty) pairs, and some extra block header data, totalling less than 3Kb of data. Across 300 blocks this is 900Kb
|
||
total of compact chain data. Verification time is dominated by pairing computations, of which there are on average ten per
|
||
block, or 3000. On the author’s laptop using Ben Lynn’s libpbc library, these can be done in under 20 seconds using a
|
||
single core. By more careful choice of elliptic curve, and focused optimization work, this number can surely be improved.
|
||
3
|
||
On the other hand, Bitcoin’s current state of 40 million unspent outputs would grow to 100Gb
|
||
50 and a few days of verification on a modern CPU, thanks to Mimblewimble’s use of confidential
|
||
transitions. It is an open problem how to improve this. We observe that even without
|
||
cryptographic improvements, it would go a long way to simply cap the UTXO set size as a
|
||
function of blockheight and let the transaction-fee market take care of it.
|
||
1.2 Trust Model
|
||
Like Bitcoin, Mimblewimble is a blockchain-based cryptocurrency intended to be instantiated in
|
||
a decentralized manner in which users may join or leave the system at any time. Further, upon
|
||
(re)joining the network, users should be able to determine the network state, at least up to some
|
||
recent time, and verify that this state was obtained by a series of valid state transitions, without
|
||
trusting the honesty of any third parties.
|
||
60 However, there are two points of departure from Bitcoin’s trust model:
|
||
1. Unlike Bitcoin, whose blockchain describes every transaction in its entirety, and therefore
|
||
allows all users to agree on and verify the precise series of transactions that led to the current
|
||
chainstate, Mimblewimble only allows users to verify the essential features:
|
||
• A transaction, once committed to the block, cannot be reversed without rewriting the
|
||
block (or by the owner(s) of its outputs explicitly undoing it).
|
||
• The current state of all coins was obtained by zero net theft or inflation: there are exactly
|
||
as many coins in circulation as there should be, and there for each unspent output there
|
||
exists a path of transactions leading to it, all of which are committed in the chain and
|
||
authorized.
|
||
70 Note that there may be other paths which have also been committed in the chain, during
|
||
which some transactions may have been invalid or unauthorized or inflationary, but
|
||
since a legitimate path exists, all these things must have netted out to zero.
|
||
2. Like Bitcoin, verifiers may see multiple differing blockchains, and select the valid one as the
|
||
one with the greatest total work. This is detailed in Section 3.3.2.
|
||
However, in Bitcoin the total work represents both the expected work to produce such a
|
||
blockchain as well as the proven work of the chain, in the sense that any party who expends
|
||
significantly less than this much work will be unable to produce such a chain except with
|
||
negligible probability.
|
||
Mimblewimble, on the other hand, separates these. The total work still represents the ex-
|
||
80 pected work to produce the blockchain, and therefore incentivizes rational actors to contribute
|
||
to the most-work chain rather than rewriting it. The proven work, on the other hand, is
|
||
capped at some fixed value independent of the length of the chain, and serves to make forgery
|
||
by irrational lucky actors prohibitively expensive.
|
||
4
|
||
2 Preliminaries
|
||
2.1 Cryptographic Primitives
|
||
Groups. Throughout, G1, G2 will denote elliptic curve groups adorned with an efficiently computable
|
||
bilinear pairing ˆe : G1 ×G2 → GT , with GT equal to the multiplicative group of Fq
|
||
k for some
|
||
prime q, small positive integer k. We further require both G1 and G2 to have prime order r. Let G, H
|
||
be fixed generators of G1 whose discrete logarithms relative to each other are unknown (i.e. they are
|
||
90 nothing-up-my-sleeve (NUMS) points; G2 does not need any canonical generators. We will make
|
||
computational hardness assumptions about these groups as needed. We write Zr for the integers
|
||
modulo r, and write + for the group operation in all groups.
|
||
All cryptographic schemes will have an implicit GenParams(1
|
||
λ
|
||
) phase which generates r, G1,
|
||
G2, GT , G and H uniformly randomly given a security parameter λ.
|
||
2.1.1 Standard Primitives
|
||
Definition 1. A commitment scheme is a pair of algorithms Commit(v,r) → G , Open(v,r,C) →
|
||
{true,false} such that Open(v,r,Commit(v,r)) accepts for all (v,r) in the domain of Commit. It
|
||
must satisfy the following security properties.
|
||
• Binding. The scheme is binding if for all (v,r) in the domain of Commit, there is no (v
|
||
0
|
||
,r
|
||
0
|
||
) 6=
|
||
(v,r) such that Open(v
|
||
0
|
||
,r
|
||
0
|
||
100 ,Commit(v,r)) accepts. It is computationally binding if no PPT
|
||
algorithm can produce such a (v
|
||
0
|
||
,r
|
||
0
|
||
) with nonneglible probability.
|
||
• Hiding. The scheme is (perfectly, computationally) hiding if the distribution of Commit(v,r)
|
||
for uniformly random r is (equal, computationally indistinguishable) for different values of v.
|
||
Definition 2. We define a homomorphic commitment scheme as one for which there is a group
|
||
operations on commitments and Commit is homomorphic in its value parameter. That is, one where
|
||
commitments to v, v0
|
||
can be added to obtain a commitment to v + v
|
||
0 having the same security
|
||
properties.
|
||
Example 1. Define a Pedersen commitment as the following scheme: Commit : Z
|
||
2
|
||
r → G maps (v,r)
|
||
to vH +rG, and Open : Z
|
||
2
|
||
r ×G → {true,false} checks that Commit(v,r) equals vH +rG.
|
||
110 If the discrete logarithm problem in G is hard, then this is a computationally binding, perfectly
|
||
hiding homomorphic commitment scheme[Ped01].
|
||
Definition 3. Given a homomorphic encryption C, we define a rangeproof on C as a cryptographic
|
||
proof that the committed value of C lies in some given range [a,b]. We further require that rangeproofs
|
||
are zero-knowledge proofs of knowledge (zkPoK) of the opening information of the commitments.
|
||
Unless otherwise stated, rangeproofs will commit to the range [0,2
|
||
n
|
||
] where n is small enough
|
||
that no practical amount of commitments can be summed to produce an overflow.
|
||
We may use, for example, the rangeproofs described in [Max15] for Pedersen commitments,
|
||
which satisfy these criteria.
|
||
5
|
||
120 2.1.2 Sinking Signatures
|
||
This brings us to the first new primitive needed for Mimblewimble.
|
||
Definition 4. We define a sinking signature as the following collection of algorithms:
|
||
• Setup(1
|
||
λ
|
||
) outputs a keypair (sk,pk);
|
||
• Sign(sk,h) takes a secret key sk and nonnegative integer “height” h which is polynomial in
|
||
λ, and outputs a signature s.
|
||
• Verify(pk,h,s) takes a public key pk and signature s and outputs from {true,false}.
|
||
satisfying the following security and correctness properties:
|
||
• Correctness. For all polynomial h, (sk,pk) ← Setup(1
|
||
λ
|
||
), s ← Sign(sk,h), we have that
|
||
Verify(pk,h,s) accepts.
|
||
• Security. Let (·,pk) ← Setup(1
|
||
λ
|
||
130 ). Then given pk and an oracle H which given h returns
|
||
Sign(sk,h), no PPT algorithm A can produce a pair (s,h
|
||
0
|
||
) with h0 > h for all h given to the
|
||
oracle, and Verify(pk,h
|
||
0
|
||
,s) accepts. (Except with negligible probability.)
|
||
The name “sinking signature” is motivated by the fact that given a signature s on height h, it
|
||
may be possible for a forger to create a signature s
|
||
0 on height h
|
||
0 with the same public key and h
|
||
0 ≤ h,
|
||
thus “decreasing the height” of the signature. We will use this feature later to aid scalability for a
|
||
Mimblewimble chain.
|
||
Definition 5. We say a sinking signature is aggregatable or summable if given a a linear combination
|
||
pk of pki
|
||
values computed from Setup(1
|
||
λ
|
||
), the same linear combination of si ← Sign(ski
|
||
,h)
|
||
(for fixed h) it is possible to compute a signature s such that Verify(pk,h,s) accepts.
|
||
140 For a summable sinking signature, we generalize the above security game to allow the adversary
|
||
A to play polynomially many times in parallel and win with an arbitrary linear combination of its
|
||
received public keys. (It must also provide the coefficients of the linear combination.)
|
||
Definition 6. We propose the following summable sinking signature (Poelstra, Kulkarni). Let H2
|
||
be a random oracle hash with values in G2.
|
||
• Setup(1
|
||
λ
|
||
) chooses a uniformly random sk ← Zr and sets pk = sk ·G.
|
||
• Sign(sk, x) first computes the sequence {x0,..., xn} where x0 = x and xi+1 is obtained by
|
||
subtracting from xi
|
||
the largest power of 2 that divides it (i.e., by clearing its least significant
|
||
1 bit). We observe that xn = 0 and that n is one plus the number of one bits in x and is
|
||
therefore O(log2
|
||
x).
|
||
Finally, it outputs s = {sk ·H2(xi}
|
||
n
|
||
i=0
|
||
150 .
|
||
• Verify(pk, x,{si}) computes S as the sum of all si
|
||
, computes H = ∑
|
||
n
|
||
i=0H2(xi), and checks
|
||
that e(G,S) = e(pk,H).
|
||
6
|
||
Observe that the verification step uses only the sum S of the elements of the signature. However,
|
||
the extra data will be useful later, so we state it here so we can prove the scheme is secure with it.
|
||
Correctness and summability of the scheme are immediate.
|
||
Theorem 1. This is a secure summable sinking signature, in the following sense: if an adversary
|
||
A exists which wins the game described in Definition 5, a simulator B exists which can solve the
|
||
computational co-Diffie-Hellman (co-CDH) problem for (G2,G1), given oracle access to A .
|
||
Proof. B answers random oracle queries to H and works in the following way. (Recall that the
|
||
160 game in Definition 5 is the game from Definition 4 played in parallel.)
|
||
We suppose without loss that before making signature queries on any height x, the adversary first
|
||
all random oracle queries needed to verify such a signature; similarly before producing a forgery on
|
||
height x
|
||
∗
|
||
it makes the required queries. We then suppose that in total it requests at most qp public
|
||
keys and makes at most qh random oracle queries.
|
||
1. B receives a co-CDH challenge (G,P,Q) from its challenger, where G,P ∈ G1, Q ∈ G2, and
|
||
the goal is to produce R ∈ G2 such that ˆe(P,Q) = eˆ(G,R).
|
||
2. B responds to the ith public key request by generating a uniformly random keypair (xi
|
||
,Pi)
|
||
and replies with Pi +P.
|
||
3. B responds to the jth random oracle query by generating a uniformly random keypair (y j
|
||
,Hj)
|
||
except that Hj
|
||
∗ = Q for j
|
||
∗
|
||
$←− {1,...,qh}, and replying with Hi
|
||
170 .
|
||
4. B responds to the kth signature query on height h
|
||
k
|
||
and pubkey P
|
||
k
|
||
as follows: it computes
|
||
the sequence {h
|
||
k
|
||
n} and checks if any of the H(h
|
||
k
|
||
n
|
||
) values is Q; if so, it aborts.
|
||
Otherwise, for each i{0,...,n} it knows a zi such that H(h
|
||
k
|
||
i
|
||
) = ziG and produces s = {ziP}i
|
||
.
|
||
5. Finally, A wins by producing a forgery consisting of coefficients {ci}
|
||
m
|
||
i=1 with not all ci zero,
|
||
a pubkey P
|
||
∗ = ∑
|
||
m
|
||
i=1
|
||
ci(Pi+P), a height h
|
||
∗ greater than any h
|
||
∗
|
||
thus queried on, and a signature
|
||
s
|
||
∗ = {Si} such that ∑
|
||
n
|
||
∗
|
||
i=0
|
||
e(G,Si) = ∑
|
||
n
|
||
∗
|
||
i=0
|
||
e(P
|
||
∗
|
||
,H(h
|
||
∗
|
||
i
|
||
)).
|
||
6. If some H(h
|
||
∗
|
||
i
|
||
∗ ) = Q, then for the above sum to hold, writing x
|
||
∗
|
||
for P
|
||
∗ = x
|
||
∗G, we must have
|
||
n
|
||
∗
|
||
∑
|
||
i=0
|
||
Si =
|
||
n
|
||
∗
|
||
∑
|
||
i=0
|
||
y
|
||
∗
|
||
i P
|
||
∗
|
||
for y
|
||
∗
|
||
i
|
||
such that H(h
|
||
∗
|
||
i
|
||
) = y
|
||
∗
|
||
i G
|
||
=
|
||
n
|
||
∗
|
||
∑
|
||
i=0
|
||
m
|
||
∑
|
||
j=1
|
||
[cjxjy
|
||
∗
|
||
i G+cjy
|
||
∗
|
||
i P]
|
||
=
|
||
n
|
||
∗
|
||
∑
|
||
i=0
|
||
m
|
||
∑
|
||
j=1
|
||
[cjxjH(h
|
||
∗
|
||
i
|
||
) +cjy
|
||
∗
|
||
i P]
|
||
=
|
||
m
|
||
∑
|
||
j=1
|
||
cjR+
|
||
n
|
||
∗
|
||
∑
|
||
i=0
|
||
i6=i
|
||
∗
|
||
m
|
||
∑
|
||
j=1
|
||
[cjxjH(h
|
||
∗
|
||
i
|
||
) +cjy
|
||
∗
|
||
i P]
|
||
where R is the solution to B’s CDH challenge, and every other term is computable by B.
|
||
7
|
||
To complete the proof, we must show that we abort with probability bounded away from 1,
|
||
and that our win condition occurs with nonneglible probability. We observe that we only abort if
|
||
180 the attacker asks for a signature that requires Q be used, and we win if Q is used in the attacker’s
|
||
forgery.
|
||
Both occur if H(h
|
||
∗
|
||
) = Q, which has probability 1/qh, which completes the proof.
|
||
2.2 Mimblewimble Primitives
|
||
Definition 7. A Mimblewimble transaction is the following data:
|
||
• A list of homomorphic commitments termed the inputs, with attached rangeproofs. Alternately,
|
||
inputs may be given as explicit amounts, in which case they are treated as homomorphic
|
||
commitments to the given amount with zero blinding factor.
|
||
• A list of homomorphic commitments termed the outputs, with attached rangeproofs.
|
||
• A blockheight x.
|
||
190 • An excess commitment to zero, with a summable sinking signature on blockheight x with this
|
||
as pubkey.
|
||
We make the further restriction on transactions that every input within a transaction be unique.
|
||
Definition 8. We define the sum of a transaction to be its outputs minus its inputs, plus its excess.
|
||
If
|
||
• the sum is zero4
|
||
, and
|
||
• the rangeproofs and sinking signature are valid
|
||
then we say the transaction is valid.
|
||
Definition 9. We define the canonical form of a transaction T as the transaction equal to T except
|
||
if any input is equal to an output, both are removed.
|
||
200 Notice that the canonical form of any transaction has equal sum to the original transaction; in
|
||
particular a transaction is valid if and only if its canonical form is valid.
|
||
We observe that all valid transactions are noninflationary; the total output value must be equal
|
||
to the total input value.
|
||
Definition 10. Given a finite set of transactions {Ti} with pairwise disjoint input sets, we define the
|
||
cut-through of {Ti} as the canonical form of the union of all Ti’s.
|
||
Next, we define some terms that will allow us to treat Mimblewimble transactions as mechanisms
|
||
for the transfer of value within a blockchain.
|
||
Definition 11. (Ownership.) We say that a party S owns a set of transaction outputs if she knows
|
||
the opening of the sum of the outputs.
|
||
4By zero we mean the homomorphic commitment which commits to zero with zero blinding factor.
|
||
8
|
||
210 Definition 12. (Sending n coins.) To send n coins from S to R, S produces a transaction: chooses
|
||
inputs, creates uniformly random change output(s) and a uniformly random excess, whose sum is a
|
||
commitment to n. S sends this to R along with the opening information of the sum.
|
||
Definition 13. (Receiving n coins.) To receive n coins, R receives a transaction T0 which sums to a
|
||
commitment of m ≥ n coins, along with opening information of this sum, and completes it to a valid
|
||
transaction T by the following process:
|
||
1. R first produces uniformly random outputs whose total committed value is n, and adds these
|
||
to the transaction.
|
||
2. If m = n, R negates the sum of this transaction and adds it to the excess of the transaction, so
|
||
that the total sum is now zero. (It also computes a summable sinking signature for the amount
|
||
220 added, and adds this to the original signature, so that the final excess has a valid signature
|
||
on it.)
|
||
Otherwise the transaction now has sum committing to m−n, so R adds a uniformly random
|
||
value to excess, updates the signature, and gives the opening information of the new sum to
|
||
another recipient who can take the remaining value.
|
||
When we define a blockchain and require transaction inputs to be outputs of earlier transactions,
|
||
we will show that after this process, R is the only party who owns any of the outputs that he added.
|
||
3 The Mimblewimble Payment System
|
||
3.1 Fundamental Theorem
|
||
Theorem 2. (Fundamental Theorem of Mimblewimble) Suppose we have a binding, hiding ho-
|
||
230 momorphic commitment scheme. Then no algorithm A can win at the following game against a
|
||
challenger C except with negligible probability:
|
||
1. (Setup.) C computes a finite list L of uniformly random homomorphic commitments. C sends
|
||
L to A .
|
||
2. (Challenge.) At most polynomially many times, A selects some (integer) linear combination
|
||
Ti of L and requests the opening of this combination from C . C obliges.
|
||
3. (Forgery.) A then chooses a new linear combination T which is not a linear combination of
|
||
{Ti} and reveals the opening information of T .
|
||
Proof. Consider the lattice Λ of formal linear combinations generated by L, that is, the set {∑A∈L bAA :
|
||
bA ∈ Z}. Consider the quotient lattice Λ/Γ where Γ is the sublattice of Λ generated by the queries
|
||
240 {Ti}. We may consider every element of Λ/Γ to be a homomorphic commitment by using some
|
||
canonical representative. In particular, every element of Λ/Γ is a homomorphic commitment which
|
||
satisfies the same hiding/blinding properties that the original scheme did.
|
||
9
|
||
Then the projection of every {Ti} into Λ/Γ is zero, and the projection of T is nonzero. Therefore
|
||
A has learned no information about the projection of T from its queries; however, if A knows the
|
||
opening of T then it also knows the opening of the projection of T, contradicting the hiding property
|
||
of the homomorphic commitment scheme.
|
||
3.2 The Blockchain
|
||
Mimblewimble consists of a blockchain, which is a weighted-vertex directed rooted tree of blocks
|
||
(defined below) for which the highest-weighted path is termed the consensus history.
|
||
250 Definition 14. We define a Mimblewimble block as the following data:
|
||
• A canonical transaction, whose inputs are of one of the two forms:
|
||
– A reference to an output of the transaction in an earlier block; or
|
||
– An explicit (i.e. with zero blinding factor) input restricted by rules above those given in
|
||
this paper5
|
||
.
|
||
• A block header, which has a binding commitment to earlier blocks in the chain, termed backlinks;
|
||
a commitment to the current UTXO set after this block’s transaction has taken effect;
|
||
and the transaction included in this block.
|
||
If the block’s transaction is valid, we say the block is valid.
|
||
In Section 3.3, we will describe how blocks are weighted, and which previous blocks specifically
|
||
260 should be linked to. For now we may use Definition 14 as our definition of validity, though note
|
||
that there will be additional requirements on the commitments.
|
||
Definition 15. We define the consensus chain state of a Mimblewimble blockchain as the cutthrough
|
||
of all transactions on the consensus history.
|
||
If the consensus chain state is valid, we call the blockchain valid.
|
||
Note that for a blockchain to be valid, it is not required that all blocks be valid, only that the
|
||
entire chain sum to a valid transaction.
|
||
Next, we prove that Mimblewimble is a sound payment system, in the sense of the following
|
||
two theorems.
|
||
Theorem 3. (No inflation.) The total value committed by the outputs of the consensus chainstate of
|
||
270 a valid blockchain is equal to the value of the explicit inputs in each block.
|
||
Proof. By hypothesis the consensus chain state, which is the canonical form of the cut-through of
|
||
all transactions, is valid. Since every non-explicit input of every block is the output of a previous
|
||
transaction, it does not appear in this canonical form. Therefore the only inputs of the chain state
|
||
are the explicit ones.
|
||
5A typical rule would be that each block can have only a single coinbase input of fixed value.
|
||
10
|
||
Lemma 1. (Unique ownership.) Suppose that all outputs of a transaction were created by receiving
|
||
coins as in Definition 13 or sending as in Definition 12, so that all blinding factors are kept secret.
|
||
Then for every subset of outputs in which not all have not been sent, the only owner of that subset
|
||
is the person who created all its outputs. (In particular, if the subset contains outputs created by
|
||
different parties, then that subset has no owner.)
|
||
280 Proof. Let O be an output in the subset which has not been sent. Then the only combination of
|
||
outputs containing O whose commitment included O that may have been revealed also included
|
||
some uniformly random excess E which was chosen when O was created.
|
||
Further no other sum containing E was ever revealed, so that any combination including O but
|
||
not E is not a linear combination of combinations whose opening information has been revealed.
|
||
The subset in question does not contain E, since E is an excess not an output. Therefore by Theorem
|
||
2 nobody knows the opening information of the subset except the person who created O.
|
||
Theorem 4. (No theft.) Consider a valid blockchain. An output x created as in Definition 13
|
||
cannot be removed from the consensus chain state without replacing the block in which it appeared,
|
||
i.e., forming a higher-weighted valid blockchain not containing this block, except by parties who
|
||
290 (collectively) own a set U of outputs containing x.
|
||
Proof. Suppose otherwise; then there exists a higher-weighted chain containing the block B in
|
||
which x appeared, but for which the consensus chain state does not contain x.
|
||
Consider the transaction T which is the canonical form of the cut-through of the first block after
|
||
B to the tip of the chain. (Note that T may not be valid; we know only that the full chain states are
|
||
valid.)
|
||
Then the outputs of T are a subset of the outputs of the new chain state; in particular they contain
|
||
rangeproofs which are proofs of knowledge of the openings of the outputs. Similarly, the excess
|
||
value is also known. We conclude that the parties who created these blocks (and therefore T) know
|
||
the openings of all outputs and sum of the excess value, and therefore own the set of all inputs of T.
|
||
300 However, the inputs of T form a set of outputs containing x, completing the proof.
|
||
3.3 Consensus
|
||
Mimblewimble uses a hashcash[Bac02] style blockchain in which every block in a blockchain is
|
||
labelled by a weight called its difficulty. A blockchain is valid if every block of difficulty D has a
|
||
header which hashes into a range of size 1/D of the total space of hashes. We define a directed edge
|
||
from block A to B iff A commits to B in its header, and require each block commit to its unique
|
||
parent.
|
||
We can then refine our definition in Section 3.2 of consensus history as the highest-weighted
|
||
path terminating at the root. This is the same as Bitcoin’s design.
|
||
3.3.1 Block Headers
|
||
310 However, in we also define a second graph structure on blocks as vertices, called the compact
|
||
blockchain. We define the compact blockchain iteratively as follows.
|
||
11
|
||
1. The genesis block is in the compact blockchain.
|
||
2. The first block after the genesis is added to the compact blockchain, and is assigned effective
|
||
difficulty equal to its difficulty.
|
||
3. Each new block is added to the tip of the compact blockchain, and may cause blocks to be
|
||
removed from the compact chain as follows:
|
||
(a) First, its effective difficulty is calculated as follows. Consider the “maximum possible
|
||
difficulty” M of the block, which is the size of the hash space divided by the hash of the
|
||
block. (This may be larger than the actual difficulty.)
|
||
320 The effective difficulty is determined by starting with the block’s difficulty, then adding
|
||
the effective difficulties of as many consecutive blocks as possible, starting from the tip,
|
||
so that the total is less than or equal to M.
|
||
(b) All blocks whose effective difficulty was used in the above calculation, except the new
|
||
block itself, are dropped from the compact chain.
|
||
The compact blockchain is encoded in the real blockchain by having every block commit to a merkle
|
||
sum tree (with effective difficulty the quantity being summed) of all blocks in the current compact
|
||
chain.
|
||
We next prove several theorems to give an intuition of the properties of the compact blockchain.
|
||
Lemma 2. The expected work required to produce a block with effective difficulty D is equivalent to
|
||
computing D hashes; similarly to produce several blocks with total effective difficulty D0
|
||
330 one must
|
||
do expected work of computing D0 hashes.
|
||
Proof. This is immediate in the random oracle model.
|
||
Theorem 5. The expected amount of work to replace a block B in the compact chain (i.e. produce
|
||
a blockchain of greater or equal total difficulty whose compact chain does not contain B) is greater
|
||
than or equal to the work needed to replace B, its parent in the non-compact chain, its parent, and
|
||
so on, up to but not including B’s parent in the compact chain.
|
||
Proof. This follows immediately from Lemma 2 and the fact that the effective difficulty of every
|
||
block is defined to be greater than or equal to the sum of the difficulty of the skipped blocks.
|
||
Corallary 1. The expected work required to produce a compact blockchain is at least as large as
|
||
340 the expected work required to produce a full chain containing the same blocks.
|
||
Theorem 6. Assuming constant difficulty, given a blockchain of length N, the expected length of
|
||
the compact chain will be O(logN).
|
||
Proof. The compact chain has been defined such that the proof in [BCD+14, Appendix A] still
|
||
holds. We summarize it here:
|
||
12
|
||
1. First, consider starting from the tip and scanning backward until we find a block that can skip
|
||
all remaining blocks back to the genesis. By construction this block will be in the compact
|
||
chain. The probability that such a block exists within the first x blocks we check is
|
||
1−
|
||
x
|
||
∏
|
||
i=1
|
||
N −i
|
||
N −i+1
|
||
= 1−
|
||
N −x
|
||
N
|
||
=
|
||
x
|
||
N
|
||
and the expectation of this over all 1 ≤ x ≤ N is N+1
|
||
2
|
||
, i.e. we expect the chain length to be
|
||
halved by this one skip.
|
||
350 2. Inductively, we can scan back from the tip until we find a block that skips back to the block
|
||
in the previous step. This halves (in expectation) the remaining chain, and so on.
|
||
The number of times we repeat this process until we have no more blocks to skip is the length of
|
||
the compact chain, since each step added one more block to the compact chain, and since each step
|
||
halved the number of remaining blocks, we see that there are only logarithmically many steps.
|
||
We observe that small variations in difficulty do not affect the character of this proof, and therefore
|
||
the constant-difficulty case can be considered a good approximation to the real-world situation.
|
||
Theorem 7. Given a blockchain B (for the purpose of this theorem, we considering B to be only the
|
||
most-work path), there is exactly one compact chain C ⊆ B. Further, verifiers can determine that
|
||
that C is the compact chain given only the blocks of C and the opening of each block’s commitment
|
||
360 to the previous in the compact chain. Finally, no blocks in B\C will appear in the compact chain
|
||
of any extension of B (i.e. once a block is dropped it may be forgotten forever).
|
||
Proof. By construction, a compact chain C exists which is a subset of B. Suppose that some other
|
||
compact chain C
|
||
0 6= C of B also exists. Let C← be the longest path from the tip contained in both
|
||
C
|
||
0
|
||
and C (since the tip itself is in both C
|
||
0
|
||
and C by construction, this is nonempty), and let β be the
|
||
deepest block of C←.
|
||
Now, the block preceding β must differ in C and C; however, this is impossible since β commits
|
||
to an ordered Merkle sum tree of previous blocks in the compact chain, the “preceding block” must
|
||
be the first one that β’s hash is not small enough to skip, and this is uniquely specified by the shape
|
||
of the Merkle sum tree. We conclude that C
|
||
0 = C.
|
||
370 Next, we argue that when B is extended, no blocks of B\C are added to the compact chain. But
|
||
this is immediate, since by construction only new blocks are ever added to a compact chain.
|
||
3.3.2 Proven and Expected Work
|
||
However, while the expected work can be computed to be the same, the the compact chain does not,
|
||
in general, prove as much work as the full chain. Here by “proving an amount of work” we mean
|
||
that a prover who does less than this amount of work has negligible chance of producing the chain.
|
||
For example, consider a blockchain of total difficulty D across n blocks, whose compact chain has
|
||
logn blocks.
|
||
Suppose an attacker attempts to produce this chain in εD work, where 0 < ε < 1. Then this
|
||
requires, on average, that each individual block be produced in ε the expected time. Each block’s
|
||
13
|
||
380 production time is an independent variable, so the Chernoff bound lets us approximate this more
|
||
precisely: if ε < 1 then the probability decays exponentially with the number of blocks in the chain.
|
||
For the full chain this means probability O(exp[(1 − ε)n]) (exponential in n); for the compact
|
||
chain O(exp[(1−ε)logn]) or O(n
|
||
1−ε
|
||
) (sublinear in n). In fact, the extreme case is even worse: a
|
||
compact chain may consist of only a single block which has difficulty D, in which case the probability
|
||
is simply O(exp(1−ε)). This means an attacker willing to expend some fixed percentage of
|
||
the total chain work has the same probability of successfully rewriting the chain regardless of the
|
||
length of the chain.
|
||
To be conservative, we conclude that compact chains, as described in this paper, prove no
|
||
work.6
|
||
.
|
||
390 So what good are they? In Mimblewimble, we expect verifiers of a chain to demand all blocks
|
||
from the most recent two months, say, and a compact chain from there to the start (in Section 3.3.3
|
||
we will see how full verification can proceed using only a compact chain). The resulting composite
|
||
will:
|
||
• be forgeable with expected work equal to the entire chain’s work; but
|
||
• only prove the most recent two months of work
|
||
Unlike Bitcoin, where the expected work to forge a blockchain is the same (asymptotically) to its
|
||
proven work, in Mimblewimble these quantities are different. The expected work affects incentives:
|
||
rational actors will choose to extend the most-work chain rather than attempting forgeries, just as in
|
||
Bitcoin; on the other hand, the proven work affects verifiers’ certainty about the state of the world:
|
||
400 they know at least two months worth of work has been done to produce the chain they see, that it
|
||
was not an accident, and that if it is a forgery it was a very expensive one that cannot be reliably
|
||
repeated.
|
||
3.3.3 Sinking Signatures and Compact Chains
|
||
In this section, we describe how sinking signatures interact with compact chains, and in particular
|
||
we find that it is possible to do a full Mimblewimble verification with only a compact chain. We
|
||
introduce a notion of compact validity of blocks which which is weaker than validity as described
|
||
in in Definition 14. Nonetheless, we preserve the trust model of Section 1.2.
|
||
To do this, we modify the Merkle sum tree of previous blocks and their effective difficulty to
|
||
sum not only difficulty, but (a) the excess of the blocks’ transactions (Definition 7), (b) the sinking
|
||
410 signatures on this excess. The excess values are summed in the obvious way, added as points, but
|
||
the sinking signatures are more complicated.
|
||
Rather than directly adding the signatures, we combine sets of signatures from each child at
|
||
every node of the Merkle tree, in the following fashion: for any blockheight x, let {xn} denote the
|
||
decreasing sequence defined in Definition 6. Then the signature set on a node is the union of the
|
||
signature set of its children, except that whenever two heights x < y appear in the set such that
|
||
6This says nothing about the compact SPV proofs described in, e.g. [KLS16], which put lower bounds on the length of
|
||
compact proofs in order to upper-bound the probability a less-than-expected-work attacker can succeed. We cannot take this
|
||
approach because we are using these proofs in consensus code and therefore need Theorem 7.
|
||
14
|
||
{xn} ⊆ {yn}, then both signatures are dropped and replaced by the signature on {xn} obtained by
|
||
adding the corresponding components of the original signature.
|
||
Therefore for a block at height h, the root of the Merkle sum tree committing to its ancestor
|
||
blocks will have O(logh) sinking signatures, one for every power of 2 between 0 and h.
|
||
420 With this structure in place, we are able to define validity of a block.
|
||
Definition 16. A block is compact valid if
|
||
• It is valid in the sense of Definition 14.
|
||
• Its Merkle sum tree commits to the deepest block allowable under the rules of Section 3.3.1.
|
||
• This commitment is valid, in the sense that all the summing rules are obeyed.
|
||
• The above commitment will be a Merkle proof consisting of a path from the commitment to
|
||
the Merkle root of the form {ci
|
||
, c
|
||
0
|
||
i
|
||
} where c0 is a direct commitment to the block; for all i c0
|
||
i
|
||
is the sibling in the Merkle tree of ci; and ci+1 is a commitment to {ci
|
||
, c
|
||
0
|
||
i
|
||
}.
|
||
We require the first c0
|
||
i
|
||
that is a right sibling in the tree to have a valid set of sinking signatures
|
||
on it. (If there is no such c0
|
||
i
|
||
then this block is skipping back to the genesis, so we instead
|
||
430 require that all the signatures at the root of the tree are correct.)
|
||
Definition 17. A block is fully valid if it is compact valid and
|
||
• It commits to its immediate predecessor in the full chain (and the excess/signature committed
|
||
to in the tree match the previous block).
|
||
• It has a valid commitment to the current UTXO set at the time of its creation.
|
||
(The latter condition allows the UTXO set to be verified using only the compact chain; it also
|
||
prevents consensus attacks whereby users are given the same chain but differing UTXO sets that
|
||
it commits to. The former condition ensures that compact blocks’ contents don’t differ from full
|
||
blocks’ contents, as long as full verifiers are watching.) (And if nobody is watching, it’s a moot
|
||
point anyway.)
|
||
440 The conditions of Definition 16 are very technical. We can summarize them simply as follows:
|
||
whenever a block at height h skips back to h0
|
||
, we sink the signatures of every intervening block to
|
||
the lowest height greater than h0 possible, then aggregate all the signatures that wound up on the
|
||
same height. This mess of Merkle sum trees is only to show how this condition can be checked by
|
||
a verifier given only polylogarithmically much data.
|
||
We argue that this design preserves the trust model. In particular:
|
||
Theorem 8. No transaction can be removed without (doing as much work as) rewriting the block
|
||
it appeared in.
|
||
Proof. Every transaction has a sinking signature on the height h of the block it appears in. When a
|
||
block is removed from the compact chain, the above construction may cause this signature to only
|
||
be verified after being sunk to some lower height h
|
||
0
|
||
450 .
|
||
15
|
||
However, since h
|
||
0
|
||
is always guaranteed to lay between the same two blocks in the compact
|
||
chain that h does, this signature cannot be removed except be rewriting the more recent of these
|
||
two blocks. However, by construction, this has expected work greater than or equal to rewriting the
|
||
block that the transaction originally appeared in.
|
||
Theorem 9. The commitments required by Definition 16 take O(log3
|
||
) space in the height of the full
|
||
chain.
|
||
Proof. The commitment contains logarithmically many nodes from the Merkle tree, each of which
|
||
contain logarithmically many sinking signatures, each of them are logarithmic in size.
|
||
4 Extensions and Future Research
|
||
460 Multisignature Outputs. We observe that CT rangeproofs can be produced interactively in the
|
||
same ways that Schnorr signatures can to produce multisignature outputs. Similarly the sinking
|
||
signatures can be trivially produced in a multiparty way. So support for multiparty signatures, while
|
||
not addressed in this article, is simply a matter of wallet support and requires no further changes to
|
||
the system.
|
||
Payment channels. Bitcoin’s script system supports off-chain payment channels, which are used
|
||
by the Lightning network[PD16] to support unlimited transaction capacity in constant blockchain
|
||
space. A scaling-focused blockchain design such as Mimblewimble ought to support such a scheme.
|
||
It is an open problem to produce payment channels that are as ergonomic and flexible as those in
|
||
Bitcoin, but to show that this ought to be possible, here is an example of a primitive Mimblewimble
|
||
470 payment channel. Suppose that a party A wants to send a series of payments to party B of maximum
|
||
value V.
|
||
1. First A creates a spend of V coins to a multisignature output requiring both A’s and B’s
|
||
signature to sign. A “timelocks” this by taking the highest 0 bit i in the current blockheight
|
||
h, then asking B to sign a transaction with height h+2
|
||
i
|
||
returning the coins to A. Only after
|
||
receiving this signature, A publishes the spend.
|
||
The signing signature construction ensures that such a refund transaction cannot be spent in
|
||
any block between h and h+2
|
||
i
|
||
. On the other hand, this means that if A wants a locktime of
|
||
2
|
||
i blocks he must wait for a blockheight that is a multiple of 2i+1
|
||
to create it.
|
||
2. Now that all V coins are in a multisignature output requiring both A’s and B’s signatures to
|
||
spend (with the coins going back to A after 2i
|
||
480 blocks in case of stall), A can send an amount
|
||
v to B by signing a transaction from this output sending v to B and (V −n) to A.
|
||
3. To increase the value v, A simply signs a new transaction with the new value v. B will not
|
||
sign and publish until the channel is near-closing, at which point B can publish one transaction
|
||
taking the whole value v, even if it was actually produced over the course of many
|
||
interactions.
|
||
16
|
||
Sidechain support. If Mimblewimble blocks commit to a structure containing all peg-in transactions
|
||
and all peg-out transactions (in the same way they commit to the UTXO set, except these
|
||
structures will never shrink), then it is possible for Mimblewimble to be implemented as a pegged
|
||
sidechain. This would provide a tremendous scaling benefit to its parent chain, since most blockchain
|
||
490 transactions are of the simple transfer-of-value sort that Mimblewimble supports, and also reduce
|
||
the risk to users of Mimblewimble from quantum computers, since it is easy to move coins off of a
|
||
sidechain.
|
||
On a technical level, both peg-ins and peg-outs may look like transaction excess values which,
|
||
instead of signing blockheights, sign an output on the destination chain. Then verifiers add this
|
||
excess plus as ±vH to the total utxoset value (where v is the value of the output).
|
||
Working out the details of this, and arguing security, is left as future research, but it appears on
|
||
a high-level that there are no open problems.
|
||
Quantum resistance. Since Mimblewimble depends on the discrete logarithm problem for security
|
||
against theft and inflation, it is highly susceptible to attacks by quantum computers. Find-
|
||
500 ing quantum-secure analogues to the primitives used in this paper would allow a quantum-secure
|
||
Mimblewimble with the same asymptotic scaling properties of the original. Some research in this
|
||
direction includes:
|
||
• Pedersen commitments can be replaced by a quantum analogue such as [CDG+15]. Note that
|
||
these commitments are not homomorphic in the strong sense of allowing arbitrarily many
|
||
commitments to be added, since after a fixed noise threshold the commitments will no longer
|
||
open — however, this is not a problem since Mimblewimble only requires that (unmerged)
|
||
transactions sum to (a non-hiding) commitment to zero.
|
||
• Sinking signatures can likely be replaced by a LWE-based candidate, or a variation of the
|
||
NIZK proof-of-openings given in the above paper. The only interesting property required of
|
||
510 these is that signatures on same value can be added to form multisignatures, which should be
|
||
algebraically easy to obtain.
|
||
• The author is unaware of any quantum-secure rangeproofs.
|
||
• The blockchain commitments, being based on hashes, are already quantum secure, and the
|
||
compact chain arguments go through unchanged.
|
||
5 Acknowledgements
|
||
The author would like to thank
|
||
• Avi Kulkarni for developing the sinking signature construction described in the paper (and
|
||
breaking the author’s original construction).
|
||
• Gregory Sanders for asking probing questions about Mimblewimble’s guarantees until a clear
|
||
520 picture of its consensus structure appeared.
|
||
17
|
||
References
|
||
[Bac02] A. Back, Hashcash — a denial of service counter-measure, 2002, http://hashcash.
|
||
org/papers/hashcash.pdf.
|
||
[BCD+14] A. Back, M. Corallo, L. Dashjr, M. Friedenbach, G. Maxwell, A. Miller, A. Poelstra,
|
||
J. Timon, and P. Wuille, ´ Enabling blockchain innovations with pegged sidechains,
|
||
2014, https://www.blockstream.com/sidechains.pdf.
|
||
[CDG+15] D. Cabarcas, D. Demirel, F. Gopfert, J. Lancrenon, and T. Wunderer, ¨ An unconditionally
|
||
hiding and long-term binding post-quantum commitment scheme, Cryptology
|
||
ePrint Archive, Report 2015/628, 2015, http://eprint.iacr.org/2015/628.
|
||
[Jed16] T.E. Jedusor, Mimblewimble, 2016, Defunct hidden service, http:
|
||
//5pdcbgndmprm4wud.onion/mimblewimble.txt. Reddit discussion at
|
||
https://www.reddit.com/r/Bitcoin/comments/4vub3y/mimblewimble_
|
||
noninteractive_coinjoin_and_better/.
|
||
[KLS16] A. Kiayias, N. Lamprou, and A.-P. Stouka, Proofs of proofs of work with sublinear
|
||
complexity, Financial Cryptography and Data Security: FC 2016 International Workshops,
|
||
BITCOIN, VOTING, and WAHC, Christ Church, Barbados, February 26, 2016,
|
||
Revised Selected Papers (Berlin, Heidelberg) (J. Clark, S. Meiklejohn, Y.A.P. Ryan,
|
||
D. Wallach, M. Brenner, and K. Rohloff, eds.), Springer Berlin Heidelberg, 2016,
|
||
pp. 61–78.
|
||
[Max13a] G. Maxwell, CoinJoin: Bitcoin privacy for the real world, 2013, BitcoinTalk post,
|
||
https://bitcointalk.org/index.php?topic=279249.0.
|
||
[Max13b] , Transaction cut-through, 2013, BitcoinTalk post, https://bitcointalk.
|
||
org/index.php?topic=281848.0.
|
||
[Max15] , Confidential transactions, 2015, Plain text, https://people.xiph.org/
|
||
~greg/confidential_values.txt.
|
||
[Max16] , The first successful zero-knowledge contingent payment,
|
||
2016, Blog post, https://bitcoincore.org/en/2016/02/26/
|
||
zero-knowledge-contingent-payments-announcement/.
|
||
[Mou13] Y. M. Mouton, Increasing anonymity in Bitcoin ... (possible alternative to Zerocoin?),
|
||
2013, BitcoinTalk post, https://bitcointalk.org/index.php?topic=290971.
|
||
[Nak09] S. Nakamoto, Bitcoin: A peer-to-peer electronic cash system, 2009, https://www.
|
||
bitcoin.org/bitcoin.pdf.
|
||
[Nol13] T. Nolan, Re: Alt chains and atomic transfers, https://bitcointalk.org/index.
|
||
php?topic=193281.msg2224949#msg2224949, 2013.
|
||
18
|
||
[PD16] J. Poon and T. Dryja, The bitcoin lightning network, 2016, https://lightning.
|
||
network/lightning-network-paper.pdf.
|
||
[Ped01] T. Pedersen, Non-interactive and information-theoretic secure verifiable secret sharing,
|
||
Lecture Notes in Computer Science 576 (2001), 129–140.
|
||
19
|