BitcoinTalk
Version 0.3.18

View Satoshi only

External link

Changes:
- Fixed a wallet.dat compatibility problem if you downgraded from 0.3.17 and then upgraded again
- IsStandard() check to only include known transaction types in blocks
- Jgarzik's optimisation to speed up the initial block download a little

The main addition in this release is the Accounts-Based JSON-RPC commands that Gavin's been working on (more details at http://bitcointalk.org/index.php?topic=1886.0).  
- getaccountaddress
- sendfrom
- move
- getbalance
- listtransactions

Download:
http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.3.18/
This is the first update to Bitcion that I'm not jumping on and grabbing right away, because I think the choice of checking transaction types in blocks is not necessarily a good thing... at least while the question is undecided in the community.  It does impact the network but in a subtle and political way.

At the very least I wish that Satoshi would at least express his view on what he thinks about putting extra data into transactions beyond pure financial data into transactions, and I think this is only going to start an arms race for those who want to play with scripts and those who are trying to keep scripts "pure".  All that has happened here is to simply lay the gauntlet down to get past the "IsStandard()" check and find transactions which can pass that test but still contain other data.
At the very least I wish that Satoshi would at least express his view on what he thinks about putting extra data into transactions beyond pure financial data into transactions, and I think this is only going to start an arms race for those who want to play with scripts and those who are trying to keep scripts "pure".  All that has happened here is to simply lay the gauntlet down to get past the "IsStandard()" check and find transactions which can pass that test but still contain other data.

Yeah; it's pretty pointless. Why on Earth would any miner adopt this change, when it means that they will be getting fewer transaction fees due to the lost non-standard transactions?
ArtForz (15+% of the network), tcatm (2Ghash/s), and doublec (pool maintainer) have stated that they will not use IsStandard. Non-standard transactions will therefore still be possible.

When I have time, I will produce a patch for Bitcoin that will remove all non-network-enforced restrictions on transactions, so that other miners can easily also be configured to include these transactions.
I guess we have the first official release that is disputed by the majority of computation power, Bitcoin's coming off age :-)

I do however like that the changes are communicated in an open and unbiased way. One thing that would be nice is to have links to the particular Threads, Checkins, whatever to be able to track/understand changes more easily.
Please start your own block chain, rather than forking the network like this.

I hope it is clear the havoc that your push to include non-currency data is causing.
Please start your own block chain, rather than forking the network like this.

I hope it is clear the havoc that your push to include non-currency data is causing.

Wrong thread?
Yeah; it's pretty pointless. Why on Earth would any miner adopt this change, when it means that they will be getting fewer transaction fees due to the lost non-standard transactions?

There's been exactly one block with non-standard transactions:
  http://blockexplorer.com/b/71036
... and it contained no fees.

HOWEVER:  jgarzik, you're over-reacting, too.  This will not cause a block chain split; all clients will accept blocks containing non-standard transactions as valid.  Most (many?) just won't put non-standard transactions in blocks that they generate, and won't relay them.  There will be no havoc.
HOWEVER:  jgarzik, you're over-reacting, too.  This will not cause a block chain split; all clients will accept blocks containing non-standard transactions as valid.  Most (many?) just won't put non-standard transactions in blocks that they generate, and won't relay them.  There will be no havoc.

I never said it would cause a block chain split.  It's more fundamental: a rules split.

Forking the network implied a majority of miners not running mainline bitcoin transaction rules.  theymos appears to be drawing a line in the sand, where he wants to convince most miners to stop paying attention to mainline bitcoin transaction validation rules.  He's free to do that.  And miners are free to validate what they want to.

But this sort of split will make it more difficult to work on the network in the future, and de facto, opens the door to larding down the block chain with all sorts of non-currency-related data as being discussed in other threads.
HOWEVER:  jgarzik, you're over-reacting, too.  This will not cause a block chain split; all clients will accept blocks containing non-standard transactions as valid.  Most (many?) just won't put non-standard transactions in blocks that they generate, and won't relay them.  There will be no havoc.

No, this isn't going to cause a block chain split, it is going to cause a fork of Bitcoin.  I just hope that is thought through very well, and I don't think it has been.

Since transactions aren't being forwarded that fail the IsStandard() algorithm, those who want to put "non-standard" transactions into a bitcoin chain must either hard-connect to a miner who would accept these transactions or force some sort of ad-hoc way of setting up a second tier in the network to find nodes that will accept these kind of transactions AND likely put them into a future block.

That only one block may fail at the moment with this test is ignoring the current discussion where conceivably almost every block in the near future may have some form of these "non-standard" transactions.
Please start your own block chain, rather than forking the network like this.
I hope it is clear the havoc that your push to include non-currency data is causing.

Agree. I don't see any reason why non standard, maybe non-financial transaction should be inside financial block chain. Also don't understand why major miners are going to fork client. I thought this software is about currency. So I'm absolutely OK with last release and I already updated all my miners.

I'm definitely NOT against software based on chains and personally will support any BitDNS effort, but, please, keep bitcoin chain consistent.
Transaction fees will pay for the generation of the chain in the future, therefore if the BitDNS guys (or any other group) want to include carefully crafted transactions in the chain, then they must include the appropriate compensation for the generators, or likely their transactions will be dropped.

Even later in the future, those who include extra things without compensation in their blocks will get their blocks orphaned by the chain.

I for one will upgrade my client to v.18 until their come a time when it is profitable for me to accept non-standard transactions.
Transaction fees will pay for the generation of the chain in the future, therefore if the BitDNS guys (or any other group) want to include carefully crafted transactions in the chain, then they must include the appropriate compensation for the generators, or likely their transactions will be dropped.

That will disadvantage people who use bitcoins for reasons unrelated to storing data in the block chain -- ie. as cash as intended -- because the "appropriate compensation" will prioritize their non-currency transactions over currency transactions.

That will disadvantage people who use bitcoins for reasons unrelated to storing data in the block chain -- ie. as cash as intended -- because the "appropriate compensation" will prioritize their non-currency transactions over currency transactions.

No, it'll disadvantage people who refuse to pay fees. What they're storing in their transactions is irrelevant.
That will disadvantage people who use bitcoins for reasons unrelated to storing data in the block chain -- ie. as cash as intended -- because the "appropriate compensation" will prioritize their non-currency transactions over currency transactions.

No problem with that! It will increase the competitive nature of generation, making Bitcoin harder to attack, and encouraging improvements to the generation network to support more transactions (to maximize profit).

You've gotta love the free market!
No, it'll disadvantage people who refuse to pay fees.

Rather, it will increase everybody's fees, and incentivize creation of a currency-only chain without all the data spam.
I applaude this decision.

Why would anyone want to muddle up their nice distributed currency system, free from complex regulation from governments, and add a DNS system on top of it? How hard would that be to explain to someone's mom, who (conceivably), could be using Bitcoin in the future?

There is plenty of transaction fees to be had when bitcoin builds a larger user base. We don't need non-standard transactions to make mining worthwhile

The simpler Bitcoin stays, the better IMO.
Rather, it will increase everybody's fees, and incentivize creation of a currency-only chain without all the data spam.

No, as no generators will want to block fee paying (profitable) transactions.

When adding non-currency data into the block chain becomes common, then the there will become a strong economic incentive to increase the block size as necessary. Thus keeping the transaction cost down.

In the long run, extra data in the chain will _reduce_ the relative cost of a currency-only transaction, because the currency-only transaction uses much less data, compared to the data transactions, per transaction.
Rather, it will increase everybody's fees, and incentivize creation of a currency-only chain without all the data spam.

No, as no generators will want to block fee paying (profitable) transactions.

When adding non-currency data into the block chain becomes common, then the there will become a strong economic incentive to increase the block size as necessary. Thus keeping the transaction cost down.

Currency transactions would have to fight harder -- pay more fees -- to make sure they're processed in a timely fashion, due to all the non-currency data in the block chain.  Increasing the block size does not reduce transaction fees.
Currency transactions would have to fight harder -- pay more fees -- to make sure they're processed in a timely fashion, due to all the non-currency data in the block chain.  Increasing the block size does not reduce transaction fees.

Sorry I have to disagree with you,  the transaction fees are based upon the 'cost' to generator to include the transaction.  The cost is directly related to the amount of data needed to be included.

In the future there will be no 'hard limits' on block size, only the risk that the block will be rejected and orphaned by the chain as it is to large.

When a generator deciding what transactions to include, if the network is already profitable with very large blocks, (eg. 20mb+ as they have much non-currency data in them), then including very small 'currency' transactions have a minute cost. For example, 20,000,000 vs 20,000,010.

If the block chain is restricted to just currency data, there is much less incentive to improve the efficiency of handling large blocks data.  Therefore the relative cost will be much greater... 500,000 vs 500,010. Therefore the transaction fees required for small amounts of data are likely to be higher on a system that only induces currency data.
Currency transactions would have to fight harder -- pay more fees -- to make sure they're processed in a timely fashion, due to all the non-currency data in the block chain.  Increasing the block size does not reduce transaction fees.

Sorry I have to disagree with you,  the transaction fees are based upon the 'cost' to generator to include the transaction.  The cost is directly related to the amount of data needed to be included.

This is not an opinion; read the source.  Transaction fees vary on total block size, not just transaction size.

Thus, larger blocks == higher fees.

Thus, more data spam, or more overall network traffic (currency or not) == higher fees.

This is not an opinion; read the source.  Transaction fees vary on total block size, not just transaction size.

Yes, that is what the source says for the moment, in the future I do not expect the generators to just arbitrarily follow the current rules, rather I expect the generators to be quite discerning in what rules they enforce or ignore.

Yes, larger block will be more expensive, (eg. bandwidth, and risk of rejection costs), but as the average amount of data in the blocks increase, the _relative_ cost per data amount will go down.
These experiments are better suited for an alternate network and block chain.  Leave the currency as a currency, and preserve the investments that many have already made in bitcoin.

It could be as simple as a patch that accepts "-datanet" and non-standard transactions, such as
http://yyz.us/bitcoin/patch.bitcoin-datanet-fork

(warning: demonstration patch, do not use; you would want a real genesis block for a production network)

consider also that it's possible to encode data into the bitcoin blockchain already, merely by specially crafting the transaction. (See the 'first' option on http://privwiki.dreamhosters.com/wiki/Bitcoin_DNS_System_Proposal#Overcoming_potential_resistance_bitcoin_developers.2Fcommunity ).

alternatively, only timestamping and proof of expense (i.e., a regular transaction with a fee) may be used, pushing off the actual data storage off to external service (see 'third' option, ibid.)

but why not make it easier on everyone and just allow say, 64 or 128 bytes of random data in a transaction? it seems that in the net, these side-band uses of bitcoin will only serve to increase the security of the network, by increasing the mining incentive, and bringing on more generation power.
I guess we have the first official release that is disputed by the majority of computation power, Bitcoin's coming off age :-)

I do however like that the changes are communicated in an open and unbiased way. One thing that would be nice is to have links to the particular Threads, Checkins, whatever to be able to track/understand changes more easily.

You already have that
but why not make it easier on everyone and just allow say, 64 or 128 bytes of random data in a transaction? it seems that in the net, these side-band uses of bitcoin will only serve to increase the security of the network, by increasing the mining incentive, and bringing on more generation power.

I personally agree with nanotube's point here, especially in light of the fact that arbitrary data can already be disguised in standard transactions if a person is motivated enough.  I have not looked at the source code, but from what I understand I think that a much more pleasant (politically and technically speaking) solution would be to:

by default disallow non-standard transactions that exceed 128 bytes (or whatever threshold is agreeable)?

I would like to hear why the above option was thrown out by the developers.

While I agree that bitcoin transactions themselves should be the primary use of the blockchain,  a good currency need not ostracize itself either.
by default disallow non-standard transactions that exceed 128 bytes (or whatever threshold is agreeable)?

I would be happy with 128 bytes of arbitrary data. But it seems pointless for the official Bitcoin client to attempt to "legislate" any restrictions of this type when all miners have an interest in including any and all fee-carrying transactions. As long as these restrictions exist, miners are incentivized to:
- Remove the restrictions to get more fees
- Connect to as many peers as possible to get a higher chance of catching any non-standard transactions that would be produced, further increasing the load on those few nodes accepting incoming connections.

The restriction on relaying these transactions should be removed, at the very least.
by default disallow non-standard transactions that exceed 128 bytes (or whatever threshold is agreeable)?

I would be happy with 128 bytes of arbitrary data. But it seems pointless for the official Bitcoin client to attempt to "legislate" any restrictions of this type when all miners have an interest in including any and all fee-carrying transactions. As long as these restrictions exist, miners are incentivized to:
- Remove the restrictions to get more fees
- Connect to as many peers as possible to get a higher chance of catching any non-standard transactions that would be produced, further increasing the load on those few nodes accepting incoming connections.

...unless the use of bitcoin for non-currency purposes discourages currency use.  Some uses of the network can act as an overall disincentive against mainstream use.  If people see that miners care little for currency transactions on the bitcoin network, or all the data spam increases TX fees to annoying levels, currency users will find a new network elsewhere.  If people find out law-enforcement-objectionable data such as "kiddie-pr0n.p2p DNS data" is being managed on this network, that increases the incentive for currency users to go elsewhere.

Maybe that makes some miners happy in the short term, and you happy, but I'm here for the revolutionary new type of digital cash.

And this generalized data timestamping/notary service seems like it has the distinct probability of degrading service for digital cash, if it is even remotely successful.
by default disallow non-standard transactions that exceed 128 bytes (or whatever threshold is agreeable)?
I would be happy with 128 bytes of arbitrary data.
I introduced six persons to bitcoins yesterday, and one so far today, by giving them 20 BTC each for a promise to put the coins into circulation.  They all had the same complaint:  It took ages, for one of them almost two hours, to download the initial blocks!

It doesn't get any faster by adding junk to the blocks.  I don't get it?  Why is it so important for people here to make Bitcoins slow and inefficient?

Fees?  Come on, miners!  How much do you make from fees?
Fees?  Come on, miners!  How much do you make from fees?

Not much,  Grin  I've made about 0.5 BTC from fees.  It is just too profitable to just mine for the hell of it, I get 50 BTC each time I make a block, and (if I'm very lucky, I make 0.05 BTC from fees).

About the large chain size, this isn't a issue, in the future it will be possible to 'prune' the chain with balances. This will reduced the size by a vast amount.  When extra data is included in the chain, it is likely to be forgotten by (most) the network if it stops being important.

For example, the BitDns guys will keep a relocation of a the DNS data for ages, however the banks are likely to just keep the bitcoin currency transfer data and drop the rest.
There are many questions still unclear about bitcoin. We have yet to see a lightweight client, freed of the block chain's burden. We still have to see how the TX fee market will develop. There is uncertainty about what the average number of transactions per minute would be in, say, two years.

Distributed DNS using bitcoin concepts is really cool. But isn't this a separate currency/commodity? Why not create a separate chain for it? Why force bitcoin users to support services they aren't aware of?

What if I want only BitDNS? And I don't need the payments stuff?
You've gotta love the free market!

We should not trust the "free market" blindly.

The problem is that including a lot of data in a block creates costs, not just for the miner who includes the data, but for all other miners and all other users, for all eternity.

In the current implementation, the user is passing on the costs to the miner, and the miner is passing on the costs to the rest of the network. However, the user's transaction fee only compensates the miner's costs.

As long as this tragedy of the commons situation hasn't been sorted out, the free market won't fix anything.
In the current implementation, the user is passing on the costs to the miner, and the miner is passing on the costs to the rest of the network. However, the user's transaction fee only compensates the miner's costs.

Current implementations, in the future the clients will only keep the stuff they care about.  The DNS client will keep the DNS stuff, the bitcoin currency traders will keep the currency transactions.

Let the generators worry about the chain; if bitcoins become worthless, then they will not have any incentive to generate!

I for one have lots of faith in the free market, after all I'm a laissez-faire capitalist  Grin,  I will be voting will my generation.  I suggest you invest in more that 50% of the generation network (or with like minded people), and ignore my the block I generate if you disagree with the data they contain.  That is the life in a free market.

When we all bought into bitcoin, we all knew that then network is dictated by the majority of generation power.  All I'm arguing is that the generators will look out for their best interests, and their interests happen to fit very nicely with bitcoin: A strong bitcoin currency.
I propose a law:

"He who makes the chain, gets to decide what it looks like"
I propose a law:

"He who makes the chain, gets to decide what it looks like"
This could work combined with:
"Everyone can choose to accept a block or discard it"

I don't want everyone to be spammed by blocks full of junk, and prefer to try to nullify it by generating a competing block without including the junk.  The junk will of course make it eventually, unless the majority of miners switch on their spam filters.
Well I spport Satoshi completely in this matter.

Leaving a possibility to store data in bitcoin chain is an accident waiting to happen. Just wait until somebody encodes kiddie porn into the chain - it would stay there forever. And the governments would have a perfect propaganda possibility for fighting it. "Normal" people won't use bitcoin at all if it is associated with perverts, mafia, and financial scams.
New transaction templates can be added as needed.  Within a few days, there will be plenty of GPU power that accepts and works on it.  Network support will be thorough long before there'll be enough clients who understand how to receive and interpret the new transaction.

Timestamp hashes are still already possible:

txin: 0.01
txout: 0.00  <appid, hash> OP_CHECKSIG
fee: 0.01

If there's an actual application like BitDNS getting ready to actually start inserting hashes, we can always add a specific transaction template for timestamps.

I like Hal Finney's idea for user-friendly timestamping.  Convert the hash of a file to a bitcoin address and send 0.01 to it:

I thought of a simple way to implement the timestamp concept I mentioned above. Run sha1sum on the file you want to timestamp. Convert the result to a Bitcoin address, such as via http://blockexplorer.com/q/hashtoaddress . Then send a small payment to that address.

The money will be lost forever, as there is no way to spend it further, but the timestamp Bitcoin address will remain in the block chain as a record of the file's existence.

I understand that this is arguably not a good use of the Bitcoin distributed database, but nothing stops people from doing this so we should be aware that it may be done.
by default disallow non-standard transactions that exceed 128 bytes (or whatever threshold is agreeable)?

I would like to hear why the above option was thrown out by the developers.

Several months ago, around the time when the 0.3.9 bugs were found, I privately told Satoshi that I thought whitelisting acceptable transaction types was a better way to go, rather than blacklisting transaction types that we find out cause problems.

The danger is similar websites that try to blacklist <script> tags in HTML entered by users to prevent cross-site-scripting hacks.  See http://ha.ckers.org/xss.html for a nice sampling of how creative hackers can be.

I haven't asked Satoshi if the recent discussion of BitDNS putting extra data in the block chain swayed his opinion or if he woke up in the middle of the night and realized that a creative use of OP_SOMETHING might lead to an exploit.  I don't think it matters; I'm still convinced that whitelisting acceptable transaction types is the right thing to do.

As for "the above option was thrown out by the developers"  -- nothing has been thrown out!  Again, I haven't talked to Satoshi, but I'm open to the idea of a third 'standard' transaction type that includes extra, arbitrary data.   Lets have that discussion, implement it on the -testnet, poke at it, try to imagine all the possible ways it can be misused, try to estimate the benefits and costs... and if there's general consensus that it is a good idea, roll it into production.
I came to agree with Gavin about whitelisting when I realized how quickly new transaction types can be added.

why not make it easier on everyone and just allow say, 64 or 128 bytes of random data in a transaction?
That's already possible.  <pubkey> OP_CHECKSIG.  <pubkey> can be 33 to 120 bytes.

I also support a third transaction type for timestamp hash sized arbitrary data.  There's no point not having one since you can already do it anyway.  It would tell nodes they don't need to bother to index it.