summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZmnSCPxj <ZmnSCPxj@protonmail.com>2020-11-16 01:32:11 +0000
committerbitcoindev <bitcoindev@gnusha.org>2020-11-16 01:32:20 +0000
commit908e9567d5166e69b3e7a295a0e6e3bef90359dd (patch)
tree26f94c89dcc9c1e03233a72140956e6416a7df4f
parent2d10fcc5e62d4b2f75017c7a9ad184a227f2ce1b (diff)
downloadpi-bitcoindev-908e9567d5166e69b3e7a295a0e6e3bef90359dd.tar.gz
pi-bitcoindev-908e9567d5166e69b3e7a295a0e6e3bef90359dd.zip
Re: [bitcoin-dev] CoinPools based on m-of-n Schnorr aggregated signatures
-rw-r--r--43/7d67ec8dc9ed5b608e6347276c32665ab12aaf202
1 files changed, 202 insertions, 0 deletions
diff --git a/43/7d67ec8dc9ed5b608e6347276c32665ab12aaf b/43/7d67ec8dc9ed5b608e6347276c32665ab12aaf
new file mode 100644
index 000000000..3301309aa
--- /dev/null
+++ b/43/7d67ec8dc9ed5b608e6347276c32665ab12aaf
@@ -0,0 +1,202 @@
+Return-Path: <ZmnSCPxj@protonmail.com>
+Received: from fraxinus.osuosl.org (smtp4.osuosl.org [140.211.166.137])
+ by lists.linuxfoundation.org (Postfix) with ESMTP id 3EE5DC07FF
+ for <bitcoin-dev@lists.linuxfoundation.org>;
+ Mon, 16 Nov 2020 01:32:20 +0000 (UTC)
+Received: from localhost (localhost [127.0.0.1])
+ by fraxinus.osuosl.org (Postfix) with ESMTP id 2D7F386004
+ for <bitcoin-dev@lists.linuxfoundation.org>;
+ Mon, 16 Nov 2020 01:32:20 +0000 (UTC)
+X-Virus-Scanned: amavisd-new at osuosl.org
+Received: from fraxinus.osuosl.org ([127.0.0.1])
+ by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024)
+ with ESMTP id gqk6gBE9Rqkl
+ for <bitcoin-dev@lists.linuxfoundation.org>;
+ Mon, 16 Nov 2020 01:32:18 +0000 (UTC)
+X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6
+Received: from mail-40140.protonmail.ch (mail-40140.protonmail.ch
+ [185.70.40.140])
+ by fraxinus.osuosl.org (Postfix) with ESMTPS id E949E85FFC
+ for <bitcoin-dev@lists.linuxfoundation.org>;
+ Mon, 16 Nov 2020 01:32:17 +0000 (UTC)
+Date: Mon, 16 Nov 2020 01:32:11 +0000
+DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com;
+ s=protonmail; t=1605490334;
+ bh=w3RXJdKAMZB3NFXI51VI3JeocWKb8dQ1kGRmIgKgwnI=;
+ h=Date:To:From:Reply-To:Subject:In-Reply-To:References:From;
+ b=fQN1Y7075SiscL0l32hxt20PNDhSgNYmgZi9ds++7t9nlTxDerh8WE4WccpHnL7vO
+ jg0LJvNWjAOuVcL4gLWpQ3UtE+j4NtiOJjCbu9O4KnSI6AKuUJUIIe90YDkhOjNL8D
+ oJ6tTtQ8AKJ218aNgab7zFVltCcUI/+z/bELUhaI=
+To: Sridhar G <sridhar87@gmail.com>,
+ Bitcoin Protocol Discussion <bitcoin-dev@lists.linuxfoundation.org>
+From: ZmnSCPxj <ZmnSCPxj@protonmail.com>
+Reply-To: ZmnSCPxj <ZmnSCPxj@protonmail.com>
+Message-ID: <1XMBkdX-KiAjYBAfntpqYxiBPaiJ-S-n11NNwroEMLBp6G7jV1EPAhF0aFaz_pz-PZ-7gxcMfCwg04ofcMqKzYe5rz826mHSJ2eZXsBxXYw=@protonmail.com>
+In-Reply-To: <CAF8yEM_gur=r2WvQ=y3bE53cfds=gQT3se-GAspHvMQzUnW-9Q@mail.gmail.com>
+References: <CAF8yEM_gur=r2WvQ=y3bE53cfds=gQT3se-GAspHvMQzUnW-9Q@mail.gmail.com>
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: quoted-printable
+Subject: Re: [bitcoin-dev] CoinPools based on m-of-n Schnorr aggregated
+ signatures
+X-BeenThere: bitcoin-dev@lists.linuxfoundation.org
+X-Mailman-Version: 2.1.15
+Precedence: list
+List-Id: Bitcoin Protocol Discussion <bitcoin-dev.lists.linuxfoundation.org>
+List-Unsubscribe: <https://lists.linuxfoundation.org/mailman/options/bitcoin-dev>,
+ <mailto:bitcoin-dev-request@lists.linuxfoundation.org?subject=unsubscribe>
+List-Archive: <http://lists.linuxfoundation.org/pipermail/bitcoin-dev/>
+List-Post: <mailto:bitcoin-dev@lists.linuxfoundation.org>
+List-Help: <mailto:bitcoin-dev-request@lists.linuxfoundation.org?subject=help>
+List-Subscribe: <https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev>,
+ <mailto:bitcoin-dev-request@lists.linuxfoundation.org?subject=subscribe>
+X-List-Received-Date: Mon, 16 Nov 2020 01:32:20 -0000
+
+Good morning Sridhar,
+
+My understanding is that it is still possible to generate an m-of-n aggrega=
+ted pubkey, it "just" requires an interactive setup (i.e. all n signers hav=
+e to talk to each other and send data a few times to each other) and they h=
+ave to keep extra data around in order to "sign for" the n - m missing sign=
+ers.
+`andytoshi` and `pwuille` can probably teach you the details.
+
+Of course, if you want to trade off the interactive setup + data storage, f=
+or extra block space and a privacy loss, that seems a reasonable tradeoff t=
+o make.
+
+My understanding is that current plan is to implement a `OP_CHECKSIGADD`, w=
+here your script would be:
+
+ <0> <pubkey1> OP_CHECKSIGADD <pubkey2> OP_CHECKSIGADD <pubkey3> OP_CHECK=
+SIGADD <m> OP_EQUAL
+
+However, `OP_CHECKSIGADD` would have individual signatures from the m parti=
+cipating signers.
+Your `OP_POOL`, as I understand it, would instead have a single m-of-m sign=
+ature.
+
+This adds another tradeoff:
+
+* `OP_CHECKSIGADD` takes up more block space, but each signer can give thei=
+r signature independently without having to enter a signing sessiong with o=
+ther participating signers.
+ * For example, this can reduce the number of communication rounds and the=
+ latency.
+ * A participating signer can emit its own signature and then go offline a=
+nd you can still use its signature when you have gotten the required m part=
+icipants.
+* `OP_POOL` takes less block space, but all participating signers have to b=
+e online simultaneously.
+
+I think the fact that `OP_POOL` requires all participating signers to be on=
+line simultaneously to generate a single signature sort of defeats the purp=
+ose, as (by my naive understanding, which could be grossly wrong) in the m-=
+of-n key setup, the extra data needed would be stored by all participants, =
+so even if one participant loses this data any of the others can still prov=
+ide it.
+Interactive setup may not be so onerous if you are doing multiple interacti=
+ve signing sessions later anyway.
+So doing a verifiable secret sharing at interactive setup, to generate a si=
+ngle pubkey that is just used directly as the pubkey of the UTXO, would end=
+ up being smaller and more private anyway, and would "just" require interac=
+tive setup + storage of extra data.
+
+I guess the question is: just how big is the extra data in the m-of-n verif=
+iable secret sharing?
+
+Regards,
+ZmnSCPxj
+
+
+> Hi everyone,
+>
+> N-of-n multisig transaction using Schnorr aggregate signature is trivial =
+and is similar to the current P2PKH. I would like to propose a model for m-=
+of-n multisig transactions using Schnorr aggregate signatures and use this =
+to enable CoinPools for off-chain scalability.
+>
+> 1. Creating the pool
+>
+> A transaction is made on the bitcoin network with an output having the fo=
+llowing script:
+>
+> <pub_key_1> <pub_key_2> <pub_key_3> .. <pub_key_N> N M OP_POOL
+>
+> Bitcoin network will create a =E2=80=98pool=E2=80=99 with all the =
+=E2=80=98N=E2=80=99 public keys and note down the threshold M for this pool=
+. This UTXO would be referred as <POOL_ID>
+>
+> 2. Depositing money to pool
+>
+> Deposits can be made to a pool with <POOL_ID> with the following script
+>
+> <POOL_ID> OP_LOAD_POOL_AGG_PUB_KEY OP_CHECKSIG
+>
+> 3. Redeeming money from pool
+>
+> Redeem script would contain the aggregated signature from all signers and=
+ the bitmap of signers.
+>
+> <AGG_SIG> <SIGNERS_BITMAP> <POOL_ID>=C2=A0 OP_LOAD_POOL_AGG_PUB_KEY OP_CH=
+ECKSIG
+>
+> With <AGG_SIG> <SIGNERS_BITMAP> provided by the person that redeems money=
+ from a pool, where
+>
+> <AGG_SIG> - is the aggregated signature
+>
+> <SIGNERS_BITMAP> - Is a bitmap representing whether the member of the poo=
+l at position 'i' of bitmap has signed or not(1 =3D signed, 0 - has not sig=
+ned)
+>
+> So we will be introducing two new opcodes:
+>
+> 1. OP_POOL - this will be used to create a new coin pool.
+>
+> 2. OP_LOAD_POOL_AGG_PUB_KEY - This opcode does three things
+>
+>
+> 1. loads the pool (POOL_ID)
+>
+> 2. checks if there are atleast 'm' signers (based on SIGNERS_BITMAP)
+>
+> 3. aggregates the public key of the signers. (based on SIGNERS_BITMAP)
+>
+>
+> The opcode uses the top two elements from the stack- the first element fr=
+om the stack specifies the POOL_ID to load, which will load the public keys=
+ from the pool. This opcode also checks if there are =E2=80=98M=E2=80=99 si=
+gners(as specified at the time of creation of the pool) and aggregates the =
+public keys that have signed based on SIGNERS_BITMAP using Schnorr aggregat=
+e signature scheme and puts back this aggregated public key onto the stack.
+>
+> SIGNERS_BITMAP is a 32 byte value, and represents a bitmap of which publi=
+c keys from the pool have signed the transaction.
+>
+> Having this scheme would enable-
+>
+> 1. Scalability of m-of-n multisig transactions - People can deposit mone=
+y to a pool(with 32 byte SIGNERS_BITMAP, we can allow for 256 possible sign=
+ers).
+>
+> 2. Trust minimized off-chain scalability solutions due to the use of a s=
+ufficiently large pool of signers. Most existing pools might allow for only=
+ a few signers as having many signers would mean higher transaction cost.
+>
+>
+> Downsides:
+>
+> 1. We need to have the public keys of the members of the pool exposed.
+>
+>
+> Despite the downsides of exposing public keys, do you think this would be=
+ a viable scheme for enabling CoinPool for the Bitcoin network? Or, any sch=
+eme that may expose public keys is a no-go in the Bitcoin network?
+>
+> Thanks! Looking for your feedback and thoughts on this.
+>
+> -Sridhar
+
+
+