Bitcoin Forum

Bitcoin => Development & Technical Discussion => Topic started by: coinjedi on February 23, 2012, 03:01:50 PM



Title: Why do we allow zero transaction blocks?
Post by: coinjedi on February 23, 2012, 03:01:50 PM
I was wondering how come a block with no transaction other than mining reward is a valid block. Is there a technical advantage?

Example:
http://blockexplorer.com/block/000000000000042f7c236a243e2d84bec12210dd2dd5abbeaaf55024898ac70f (http://blockexplorer.com/block/000000000000042f7c236a243e2d84bec12210dd2dd5abbeaaf55024898ac70f)


Title: Re: Why do we allow zero transaction blocks?
Post by: DeathAndTaxes on February 23, 2012, 03:10:51 PM
If you made a rule that blocks had to have transactions well people could just make a dummy transaction sending 1 satoshi to themselves.  

As the block subsidy declines and transaction fees become more important the "problem" will correct itself.  No need for the protocol to enforce it.


Title: Re: Why do we allow zero transaction blocks?
Post by: eleuthria on February 23, 2012, 05:20:09 PM
While it may not be the case today, in the past it was not uncommon for there to be periods of no transactions on the network [look at the first 30k blocks].  If the network refused to process blocks without a transaction, people would be forced to just insert dummy transactions in order to keep the block rate moving in proportion to the hash power of the network.  Otherwise, the difficulty could plummet as a result of low network activity, rather than low hash power.

Even today it is the case that 0 transaction blocks can come about due to -extremely- close blocks on the network.  However, eliminating these short blocks will end up offsetting the average block rate.  A 0-5 second block on the network smooths out the average when we have the occasional 1-hour without a block period.

So it's really two reasons that I see:

1) If 0-tx blocks were stopped, people would just send append a 0-fee transaction to their own blocks, which just wastes space in the chain.
2) If 0-tx blocks were stopped, the network difficulty would be slanted towards a higher difficulty than necessary [even if its not a major impact].


Title: Re: Why do we allow zero transaction blocks?
Post by: coinjedi on February 23, 2012, 05:23:50 PM
Thanks for the clarification.


Title: Re: Why do we allow zero transaction blocks?
Post by: FreeMoney on February 24, 2012, 01:19:07 AM
In addition to the previous points every block empty or not makes it one block more work to rewrite a particular previous block making the tx in them a little bit more secure.


Title: Re: Why do we allow zero transaction blocks?
Post by: DeathAndTaxes on February 24, 2012, 01:39:44 AM
In addition to the previous points every block empty or not makes it one block more work to rewrite a particular previous block making the tx in them a little bit more secure.

Very good point.  So anyone who's transactions were in the prior blocks benefits from increased depth in the blockchain.


Title: Re: Why do we allow zero transaction blocks?
Post by: DeathAndTaxes on February 24, 2012, 03:27:02 AM
@DnT

What amount do you need to send to always avoid transaction fees or is there a minimum amount? How does that work?


It is based on time and amount (not just total amount but amounts of the prior output).

priority = sum(input_value_in_base_units * input_age)/size_in_bytes

You need a priority of 57,600 or higher to avoid spam fees.

IIRC (and I may not be) the simple version is 1 coin 1 day.

IF you receive 1 BTC you need to wait 1 day to avoid a fee when transferring it.
If you receive 10 BTC you need to wait 2.4 hours to avoid a fee when transferring it.

The wallet always attempts to reduce the fee using older coins as necessary to minimize or eliminate any fee.


Title: Re: Why do we allow zero transaction blocks?
Post by: payb.tc on February 24, 2012, 04:05:59 AM
I知 going somewhere with this eventually.

So you can send one coin transactions repeatedly without a fee if the amount in the wallet is large enough because effectively the client will always look for the oldest coin to avoid fees. Correct?

EDIT: Repeatedly  

it also depends on how your wallet is constituted... if all those 'old' transactions are millions of 0.00000001 inputs, then you'll still get fees because of the data size (in bytes) of your transaction.


edit: also, even if you had a wallet with 1000 BTC which was just ONE really old transaction... as soon as you spend 1 btc from it, the remaining 999 btc will be sent as 'change' and will no longer be an old transaction, but a really new one.



Title: Re: Why do we allow zero transaction blocks?
Post by: payb.tc on February 24, 2012, 04:09:46 AM
I知 going somewhere with this eventually.

So you can send one coin transactions repeatedly without a fee if the amount in the wallet is large enough because effectively the client will always look for the oldest coin to avoid fees. Correct?

EDIT: Repeatedly 

it also depends on how your wallet is constituted... if all those 'old' transactions are millions of 0.00000001 inputs, then you'll still get fees because of the data size (in bytes) of your transaction.


Ok, then what is the minimum Tx amount? How is that determined?

you can spend 0.00000001 without a fee if you have an old incoming 0.00000001 that was sent to your wallet.



Title: Re: Why do we allow zero transaction blocks?
Post by: DeathAndTaxes on February 24, 2012, 04:16:26 AM
I知 going somewhere with this eventually.

So you can send one coin transactions repeatedly without a fee if the amount in the wallet is large enough because effectively the client will always look for the oldest coin to avoid fees. Correct?

EDIT: Repeatedly 

No because once you send it, it is gone and the wallet where it is received it is now time 0.


Title: Re: Why do we allow zero transaction blocks?
Post by: payb.tc on February 24, 2012, 04:16:33 AM
I知 going somewhere with this eventually.

So you can send one coin transactions repeatedly without a fee if the amount in the wallet is large enough because effectively the client will always look for the oldest coin to avoid fees. Correct?

EDIT: Repeatedly  

it also depends on how your wallet is constituted... if all those 'old' transactions are millions of 0.00000001 inputs, then you'll still get fees because of the data size (in bytes) of your transaction.


Ok, then what is the minimum Tx amount? How is that determined?

you can spend 0.00000001 without a fee if you have an old incoming 0.00000001 that was sent to your wallet.


If I send one coin a day to the wallet for 60 days could I then send .1 60 times an hour without a fee?

best guess: yes (for ONE hour)

then you'd have the remaining 90% as 60 x 0.9 btc in new change addresses.

after the first hour (the first 60 x 0.1 transactions), all your wallet would contain would be new addresses with 0.9 in them.



Title: Re: Why do we allow zero transaction blocks?
Post by: DeathAndTaxes on February 24, 2012, 04:18:07 AM
I知 going somewhere with this eventually.

So you can send one coin transactions repeatedly without a fee if the amount in the wallet is large enough because effectively the client will always look for the oldest coin to avoid fees. Correct?

EDIT: Repeatedly  

it also depends on how your wallet is constituted... if all those 'old' transactions are millions of 0.00000001 inputs, then you'll still get fees because of the data size (in bytes) of your transaction.


Ok, then what is the minimum Tx amount? How is that determined?

you can spend 0.00000001 without a fee if you have an old incoming 0.00000001 that was sent to your wallet.


If I send one coin a day to the wallet for 60 days could I then send .1 60 times an hour without a fee?
No because you can't send part of a coin.

If you have a 1 BTC input and want to send 0.1 you can't do that 10 times.

You have to send 1 BTC so you send 0.1 and get 0.9 back as change.  The change now has a time 0 and is too young to be sent without incurring a fee.


Title: Re: Why do we allow zero transaction blocks?
Post by: payb.tc on February 24, 2012, 04:22:29 AM
So, if someone had 20 computers and 40 clients, one running in a VM and one on the desktop. That machine with the proper script could be made to send coins to itself in a continuous loop or to one of the other 20 in a series. Yes?


sure, if they had RPC switched on i guess.



Title: Re: Why do we allow zero transaction blocks?
Post by: DeathAndTaxes on February 24, 2012, 04:24:08 AM
So, if someone had 20 computers and 40 clients, one running in a VM and one on the desktop. That machine with the proper script could be made to send coins to itself in a continuous loop or to one of the other 20 in a series. Yes?


How many coins per transaction?

24 BTC?  You can send 24 BTC again in 6 confirmations without fee, since 6 confirmation is the minimum it could continue forever.  The point of the fees is to avoid cheaply spamming the network.  i.e. taking 1 BTC and sending a million 1 satoshi transactions and keep doing that every seconds until you generate TB worth of transactions.

The number of nodes is irrelivent.  It doesn't matter where you send coins.  Hell you can send them to another address in the same wallet.

Everytime you transfer a coin its time resets to 0.  If it is too young to be used in a new transaction you must pay a fee or wait.


Title: Re: Why do we allow zero transaction blocks?
Post by: eleuthria on February 24, 2012, 04:24:30 AM
Just to add to the talk about fees (in the case of 0tx blocks):  Don't forget that you can send your coins anywhere without a fee when you're the one mining a block :).  Or you could send .00000001 and tack on a 500 BTC fee, since you're the one mining that block [don't broadcast it, just include it in the block when you build it].


Title: Re: Why do we allow zero transaction blocks?
Post by: DeathAndTaxes on February 24, 2012, 04:33:51 AM
So, if someone had 20 computers and 40 clients, one running in a VM and one on the desktop. That machine with the proper script could be made to send coins to itself in a continuous loop or to one of the other 20 in a series. Yes?


How many coins per transaction?

24 BTC?  You can send 24 BTC again in 6 confirmations without fee, since 6 confirmation is the minimum it could continue forever.  The point of the fees is to avoid cheaply spamming the network.  i.e. taking 1 BTC and sending a million 1 satoshi transactions and keep doing that every seconds until you generate TB worth of transactions.

The number of nodes is irrelivent.  It doesn't matter where you send coins.  Hell you can send them to another address in the same wallet.

Everytime you transfer a coin its time resets to 0.  If it is too young to be used in a new transaction you must pay a fee or wait.

So again, if someone had 20 computers and 40 clients, one running in a VM and one on the desktop. Each of the 40 wallets had 24BTC with the proper script could be made to send coins to itself in a continuous loop.
 
How long would it take for the associated bloat to affect the block chain?



I don't get the fascination of 20 computers.  I already explained you could send it from 1 address in a wallet to another address in the SAME wallet and it would generate the same amount of transactions, same amount of transaction data, and incur the same limits.

Using 20 computers and 40 wallets would just be stupid.  Lots of electricity to accomplish nothing.


As far as transferring 24 BTC continually. It would create negligible transaction volume.  You must wait 6 confirms before spending so you could perform 1 transaction per hour, or ~24 per day.  At 0.25 KB per day you would add a massive 6KB per day or 2MB per year.


Title: Re: Why do we allow zero transaction blocks?
Post by: payb.tc on February 24, 2012, 04:44:40 AM
You are helping me settle an argument with someone.

So, there is no amount small enough or large enough that (since you don稚 like 20 we値l say a few computers) you could send in a continuous stream of transactions increasing the size of block chain to a point that it would be difficult to hold it on a single hard drive (my position on the issue)? Correct?


that's ridiculous in 2012... even an 'old' hard drive is 80gb+
a 'not old' hard drive is 500gb+.


Title: Re: Why do we allow zero transaction blocks?
Post by: DeathAndTaxes on February 24, 2012, 04:49:08 AM
You are helping me settle an argument with someone.

So, there is no amount small enough or large enough that (since you don稚 like 20 we値l say a few computers) you could send in a continuous stream of transactions increasing the size of block chain to a point that it would be difficult to hold it on a single hard drive (my position on the issue)? Correct?


Not without prohibitively massive cost.  That is the entire point of spam fee.  It prevents spam.   Well technically it doesn't prevent it.  If someone wanted to spend tens of millions of dollars acquiring bitcoins just to massively spam the the chain they could they would just lots tens of millions of dollars in wealth to transaction fees. :)  It would be a good day to be a miner.

Blockchain pruning could be used to clean up any "circular" spam.  To have a lasting effect you would need to send coins somewhere permanently (so it could be pruned out).  Thus costing you not just the spam fees but the principal.

TL/DR I wouldn't say impossible just prohibitively expensive.  You could also mine your own transactions "for free" but then you are limited to block size and how many blocks you can generate per day.  To generate a large number of blocks (full of spam) each day would require hundreds if not thousands of MH/s of hashing power (which isn't free). 


Title: Re: Why do we allow zero transaction blocks?
Post by: DeathAndTaxes on February 24, 2012, 04:56:41 AM
He did make one good point though. He said that Bitcoin couldn稚 be used for any real business because you need to send too many continuous transactions per hour to make it useful to big business unless they had an infinite # of wallets on a shitload of computers or they would have to pay Tx fees like a Visa terminal only the fees would be slightly lower. 

The later contradicts the former.

Couldn't be used for business except the fees would be lower.  How would lower fees make it impossible to be used by business.

Also you keep getting hung up on # of wallets.  # of wallets would have no effect on fees.  Amazon could have 1 wallet or a quadrillion wallets running on a quadrillion computers.  It would have absolutely no effect on fees, spam, transaction volume, etc.


Title: Re: Why do we allow zero transaction blocks?
Post by: payb.tc on February 24, 2012, 05:02:55 AM
you keep getting hung up on # of wallets.  # of wallets would have no effect on fees.  Amazon could have 1 wallet or a quadrillion wallets running on a quadrillion computers.  It would have absolutely no effect on fees, spam, transaction volume, etc.

actually d&t i think it would have a negative effect.

imagine a wallet has 3 transactions:

3 btc: old
3 btc: old
4 btc: new


you could make 2 x 1btc spends from that without incurring fees.

but let's say you had them in 3 different wallets:

a = 3 btc: old
b = 3 btc: old
c = 4 btc: new

if you spend from the 'c' wallet, you'd have to pay a fee because it can't find any old transactions to spend from... even though you've got plenty of old transactions in your other wallets.



Title: Re: Why do we allow zero transaction blocks?
Post by: DeathAndTaxes on February 24, 2012, 05:03:24 AM
There would be no way to handle a massive amount of transactions without paying a fee of some kind? In other words, a completely free system to use?

Bitcoin isn't free.  It was never intended to be and never will be.  It is the largest distributed computing network in the world requiring hundreds of megawatts of power and millions of dollars in computing hardware.  What do you think pays for it?


Title: Re: Why do we allow zero transaction blocks?
Post by: dooglus on February 24, 2012, 07:35:03 AM
The wallet always attempts to reduce the fee using older coins as necessary to minimize or eliminate any fee.

Are you sure about that?  I thought it didn't.


Title: Re: Why do we allow zero transaction blocks?
Post by: dooglus on February 24, 2012, 09:12:06 AM
The wallet always attempts to reduce the fee using older coins as necessary to minimize or eliminate any fee.

Are you sure about that?  I thought it didn't.

Read CWallet::SelectCoinsMinConf() in wallet.cpp.  It tries to spend as little as possible, ignoring coin age.