Author

Topic: Incentives (and an idea) (Read 1965 times)

legendary
Activity: 1246
Merit: 1014
Strength in numbers
March 10, 2011, 03:26:47 PM
#16
I think you have an incorrect assumption in your argument:  what makes you think there will be a high variability in block rewards (because they're mostly fees) 40 years from now?

Assuming bitcoin is still around in 40 years, there should be at least tens of thousands of transactions per block, and with that many transactions sum(fees) should be pretty darn stable.



Okay, true enough. I should retract 'variability'. But if a block clears out all or most fee paying transactions then there will be a period of waiting for transactions with fees to pile up to make it worth electricity even. During this period it might be worth it to work on the old block that did have lots of fees in it.
legendary
Activity: 1652
Merit: 2216
Chief Scientist
March 10, 2011, 03:00:39 PM
#15
I think you have an incorrect assumption in your argument:  what makes you think there will be a high variability in block rewards (because they're mostly fees) 40 years from now?

Assuming bitcoin is still around in 40 years, there should be at least tens of thousands of transactions per block, and with that many transactions sum(fees) should be pretty darn stable.

legendary
Activity: 1246
Merit: 1014
Strength in numbers
March 10, 2011, 02:44:25 PM
#14


Of course. That was all from the receiver's point of view.


Right. So we've got a spender who wants to get in a block then once that happens we've got a miner who wants his block built on (the receiver has a similar desire, but doesn't care which version it gets in, just that it gets built on asap). Right now other miners choose to do this based on whichever version they hear of first, but I know if this is actually a lasting equilibrium. It does seem to be a local equilibrium since everyone knows that everyone else is just going with the first that they see it makes no sense to keep trying to find another version, but this can be broken if there is a way to pay the miner who builds on you .01BTC. This is rational to offer because of the chance of a race. Suppose something like a 1% chance of racing and consider that you only pay if you get included and it makes sense to offer a lot more than .01 if you need to. Right now this doesn't change much, but when there is high variability in the block reward because it is dominated by fees, some miners will rationally choose to continue working on a previous block as long as it has higher fees than the 'correct' block to work on. This will largely not actually happen because the finder of the previous block will know to pass on some of his fees to anyone who builds on him to tip the balance toward working on the next block instead of competing with his version of the old block.



 
db
sr. member
Activity: 279
Merit: 261
March 10, 2011, 02:02:43 PM
#13
Yes. That attacker is not attacking you and will most likely leave your transaction in to claim the fee. You could still be vulnerable to a double spender who is defrauding you and several others in parallel, though.


We actually shouldn't be worried about our sends falling out of the chain, they can be put back, and we can't be defrauded by that. It's the ones we receive that we want buried quickly.

Of course. That was all from the receiver's point of view.
legendary
Activity: 1246
Merit: 1014
Strength in numbers
March 10, 2011, 01:56:24 PM
#12
Are you saying that a 1000BTC transaction isn't safe until 1000BTC of rewards and fees have been paid after it? That makes a certain sense I guess, but you still can't be sure because the attacker may be going back anyway to undo a 10k transaction in the block before.

Yes. That attacker is not attacking you and will most likely leave your transaction in to claim the fee. You could still be vulnerable to a double spender who is defrauding you and several others in parallel, though.


We actually shouldn't be worried about our sends falling out of the chain, they can be put back, and we can't be defrauded by that. It's the ones we receive that we want buried quickly.

 
db
sr. member
Activity: 279
Merit: 261
March 10, 2011, 01:38:43 PM
#11
Are you saying that a 1000BTC transaction isn't safe until 1000BTC of rewards and fees have been paid after it? That makes a certain sense I guess, but you still can't be sure because the attacker may be going back anyway to undo a 10k transaction in the block before.

Yes. That attacker is not attacking you and will most likely leave your transaction in to claim the fee. You could still be vulnerable to a double spender who is defrauding you and several others in parallel, though.
legendary
Activity: 1246
Merit: 1014
Strength in numbers
March 10, 2011, 12:11:26 PM
#10

You can never buy your own security.

Strictly speaking I could buy thousands of GPUs to bury transactions coming to me faster making it harder for an attacker to rewrite than he expected it to be.


To make it unprofitable to double spend, the block rewards / transaction fees must be at least as large as the transaction that is to be protected.

This seems wrong, the double spend attack's profitability depends strongly on how many confirms merchants are requiring and a bunch of other factors besides. And I don't even really understand the claim. Are you saying that a 1000BTC transaction isn't safe until 1000BTC of rewards and fees have been paid after it? That makes a certain sense I guess, but you still can't be sure because the attacker may be going back anyway to undo a 10k transaction in the block before.

edit: There was no need for me to be hyperbolic about buying thousands for GPUs. Each extra bit of hashing power I supply adds to the security of all previous transactions. The incentive mismatch I see is that those previous transactions don't pay me at all. I used to think that it would be unaesthetic and awkward to pay for each future confirm, but block finders paying miners to build off of their blocks handles all of this nicely.

I feel like I'm not getting across how important this is. I'm going to keep thinking and maybe write it all again if I think of a better way to explain.
db
sr. member
Activity: 279
Merit: 261
March 10, 2011, 05:40:13 AM
#9
I've been worried about that too. I think it boils down to getting your security by hoping there are fee tx coming after the block yours are in. Which isn't unreasonable, but it's a pretty variable level of security and it's hard to 'buy' more since your fee goes only to the first confirmation. 

You can never buy your own security. To make it unprofitable to double spend, the block rewards / transaction fees must be at least as large as the transaction that is to be protected.
legendary
Activity: 1246
Merit: 1014
Strength in numbers
March 09, 2011, 11:47:25 PM
#8
Well, I can always pay you to work on my block, just like I can pay you to work on my car. So it can certainly be arranged, outside the Bitcoin protocol.

Yes, it breaks the anonymity though and requires another layer of reputation and stuff.



I'm not sure I've seen a convincing analysis of the optimal strategy for miners in the era of no block creation fees, even ignoring these kinds of side payments.

I've been worried about that too. I think it boils down to getting your security by hoping there are fee tx coming after the block yours are in. Which isn't unreasonable, but it's a pretty variable level of security and it's hard to 'buy' more since your fee goes only to the first confirmation. 
Hal
vip
Activity: 314
Merit: 3803
March 09, 2011, 11:30:16 PM
#7
Well, I can always pay you to work on my block, just like I can pay you to work on my car. So it can certainly be arranged, outside the Bitcoin protocol.

I'm not sure I've seen a convincing analysis of the optimal strategy for miners in the era of no block creation fees, even ignoring these kinds of side payments.
legendary
Activity: 1246
Merit: 1014
Strength in numbers
March 09, 2011, 08:47:25 PM
#6
Okay, here is why I think this is important. It will be easiest to see if we skip to the far future, but I think it applies to some extent immediately and certainly around the 210000 block.

So it's the future and there is no block reward only fees. A particularly large number of fees come in and the block is solved and you hear about it. Now you could start working off of this block helping the miner who found it and the people who have transactions in it, but for what? There aren't yet any pending transactions, so you wait. Eventually enough transactions come in to make you start working, but in the meantime you have an idea. Keep working on your own version of the previous block, ignore the one that just came in. If you get a valid block you can always just pay others to work off of yours instead of the other one. This is what miners will do unless the previous block solver agrees to pass on part of his fees. This is entirely appropriate because each confirmation is a benefit to the transactions in this block. It would be annoying for regular users to pay multiple fees, but it looks to me like the miners have incentive to divvy them up 'correctly'.

I am confident that there is some way to handle the payment to the next block that builds on yours. If my thinking is right I have a feeling this may have been foreseen.
legendary
Activity: 1246
Merit: 1014
Strength in numbers
March 09, 2011, 06:59:34 PM
#5
Making the fee transaction depend on the block's coinbase would run afoul of this code in CTransaction::ConnectInputs:
Code:
            // If prev is coinbase, check that it's matured                                                                                                         
            if (txPrev.IsCoinBase())
                for (CBlockIndex* pindex = pindexBlock; pindex && pindexBlock->nHeight - pindex->nHeight < COINBASE_MATURITY; pindex = pindex->pprev)
                    if (pindex->nBlockPos == txindex.pos.nBlockPos && pindex->nFile == txindex.pos.nFile)
                        return error("ConnectInputs() : tried to spend coinbase at depth %d", pindexBlock->nHeight - pindex->nHeight);

... and the entire block would be rejected as invalid.  Which is a good thing, otherwise miners could get around the "no spending newly minted coins for COINBASE_MATURITY blocks" rule.


Is there possibly a way to commit to paying, but not actually pay for 120 blocks?

Alternatively, is it possible to include a transaction in only your block and if your block fails to be included ensure that that transaction can never be included in a later block. Like a do not-include-after-block-13204 switch or something?
legendary
Activity: 1652
Merit: 2216
Chief Scientist
March 09, 2011, 05:36:29 PM
#4
Making the fee transaction depend on the block's coinbase would run afoul of this code in CTransaction::ConnectInputs:
Code:
            // If prev is coinbase, check that it's matured                                                                                                         
            if (txPrev.IsCoinBase())
                for (CBlockIndex* pindex = pindexBlock; pindex && pindexBlock->nHeight - pindex->nHeight < COINBASE_MATURITY; pindex = pindex->pprev)
                    if (pindex->nBlockPos == txindex.pos.nBlockPos && pindex->nFile == txindex.pos.nFile)
                        return error("ConnectInputs() : tried to spend coinbase at depth %d", pindexBlock->nHeight - pindex->nHeight);

... and the entire block would be rejected as invalid.  Which is a good thing, otherwise miners could get around the "no spending newly minted coins for COINBASE_MATURITY blocks" rule.
Hal
vip
Activity: 314
Merit: 3803
March 09, 2011, 05:10:17 PM
#3
I don't believe the software does this now, but a miner could copy the transaction from your block, and include both that and the one with the txn fee in its new block. Then it could collect the fee even if it built on another block than yours.

Maybe it would work to make the fee transaction depend on your 50 btc creation fee. That one can't be moved.
legendary
Activity: 1246
Merit: 1014
Strength in numbers
March 09, 2011, 05:06:50 PM
#2

Make a new address.
Pay desired amount to this address, but do not announce the tx, put it only in your version.
Make a payment from this address that has a fee attached.
This fee can only be collected by a miner if they work off of your block because otherwise the address will be empty.
 

I'm worried this doesn't work. The tx will be reissued if your block doesn't get taken and someone will get that fee later even if your block does not end up in the chain.

Still thinking.
legendary
Activity: 1246
Merit: 1014
Strength in numbers
March 09, 2011, 02:47:36 PM
#1
I'm constantly amazed by how well built Bitcoin is in terms of providing incentive for right behavior by nodes. Eg. you don't build off a bad block not because you are honest but because others won't build off of yours and you will never get your reward paid. Or how new block finders have incentive to share as quickly as possible.

It occurred to me that when two versions of the same block are found near the same time miners are ambivalent about which to work from and arbitrarily choose to continue to work from the first that they received. But the finder of each version has a large desire for his block to be chosen. If he could offer a small extra reward for building off of his block then this would be in his interest.

I think there is a way to do this, I don't know for sure if it works or if it is the best way.

Make a new address.
Pay desired amount to this address, but do not announce the tx, put it only in your version.
Make a payment from this address that has a fee attached.
This fee can only be collected by a miner if they work off of your block because otherwise the address will be empty.

If this works or if someone knows a way that does I think it has some very exciting implications which I will elaborate on.
Jump to: