public inbox for bitcoindev@googlegroups.com
 help / color / mirror / Atom feed
* [bitcoin-dev] Trustless Segwit activation bounty protocol (aka. bribing the miners)
@ 2017-04-27 17:48 Matt Bell
  2017-04-27 18:25 ` Alex Mizrahi
                   ` (3 more replies)
  0 siblings, 4 replies; 6+ messages in thread
From: Matt Bell @ 2017-04-27 17:48 UTC (permalink / raw)
  To: bitcoin-dev

[-- Attachment #1: Type: text/plain, Size: 4017 bytes --]

Hello everyone,

I've been thinking of an alternative to possibly get Segwit activated
sooner: bribing the miners. This proposal may not be necessary if everyone
is already set on doing a UASF, but  miners seem to optimize for short-term
profits and this may make it easier for BitMain to accept its fate in
losing the ASICBoost advantage.

Here is a possible trustless contract protocol where contributors could
pledge to a Segwit bounty which would be paid out to miners iff Segwit is
activated, else the funds are returned to the contributor:

# Setup

- The contributor picks a possible future height where Segwit may be
activated and when the funds should be released, H.
- The contributor chooses a bounty contribution amount X.
- The contributor generates 3 private keys (k1, k2, and k3) and
corresponding pubkeys (K1, K2, and K3).
- The contributor creates and broadcasts the Funding Transaction, which has
2 outputs:
  * Output 0, X BTC, P2SH redeem script:
    <H> CHECKLOCKTIMEVERIFY DROP
    <K1> CHECKSIGVERIFY
  * Output 1, 0.00001 BTC, P2SH redeem script:
    <H> CHECKLOCKTIMEVERIFY DROP
    <K2> CHECKSIGVERIFY
- The contributor builds the Segwit Assertion Transaction:
  * nTimeLock set to H
  * Input 0, spends from Funding Transaction output 1, signed with k2,
SIGHASH_ALL
  * Output 0, 0.00001 BTC, P2WPKH using K3
- The contributor builds the Bounty Payout Transaction:
  * nTimeLock set to H
  * Input 0, spends from Funding Transaction output 0, signed with k1,
SIGHASH_ALL
  * Input 1, spends from Segwit Assertion Transaction output 0, signed with
k3, SIGHASH_ALL
  * No outputs, all funds are paid to the miner
- The contributor publishes the Segwit Assertion Transaction and Bounty
Payout Transaction (with signatures) somewhere where miners can find them

# Process

1. After the setup, miners can find Funding Transactions confirmed on the
chain, and verify the other 2 transactions are correct and have valid
signatures. They can sum all the valid bounty contracts they find to factor
into their expected mining profit.
2A. Once the chain reaches height H-1, if Segwit has activated, miners can
claim the bounty payout by including the Segwit Assertion and Bounty Payout
transactions in their block H. Since Segwit has activated, the output from
the Segwit Assertion tx can be spent by the Bounty Payout, so both
transactions are valid and the miner receives the funds.
2B. If Segwit has not activated at height H, Input 1 of the Bounty Payout
is not valid since it spends a P2WPKH output, preventing the miner from
including the Bounty Payout transaction in the block. (However, the output
of the Segwit Assertion tx can be claimed since it is treated as
anyone-can-spend, although this is not an issue since it is a very small
amount). The contributor can reclaim the funds from Output 0 of the Funding
tx by creating a new transaction, signed with k1.

# Notes

- This is likely a win-win scenario for the contributors, since Segwit
activating will likely increase the price of Bitcoin, which gives a
positive return if the price increases enough. If it does not activate, the
funds will be returned so nothing is at risk.
- Contributors could choose H heights on or slightly after an upcoming
possible activation height. If contributors pay out to many heights, then
the bounty can be split among many miners, it doesn't have to be
winner-take-all.
- If Segwit does not activate at H, the contributor has until the next
possible activation height to claim their refund without risking it being
taken by another miner. This could be outsourced by signing a refund
transaction which pays a fee to some third-party who will be online at H
and can broadcast the transaction. If the contributor wants to pay a bounty
for a later height, they should create a new contract otherwise a miner
could invalidate the payout by spending the output of the Segwit Assertion.

Thanks, I'd like to hear everyone's thoughts. Let me know if you find any
glaring flaws or have any other comments.
Matt

[-- Attachment #2: Type: text/html, Size: 4579 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2017-04-27 21:05 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-04-27 17:48 [bitcoin-dev] Trustless Segwit activation bounty protocol (aka. bribing the miners) Matt Bell
2017-04-27 18:25 ` Alex Mizrahi
2017-04-27 18:41 ` Alex Mizrahi
2017-04-27 19:45 ` Antoine Le Calvez
2017-04-27 20:10 ` Johnson Lau
2017-04-27 21:05   ` ZmnSCPxj

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox