So to summarize:
We started with the idea of a "special" private key to delay access to spending bitcoins. However, since Bitcoin relies on all the peers to enforce the rules, and the peers don't have access to the private key, we quickly realized we need to use information that is publicly available.
Next we considered the idea of a "special" address that would delay access to spending bitcoins. Since the bitcoin address is public information, this would seem to address the concern that we need to use something publicly known. However, we can't control the spending at the point of transaction creation since an attacker could create their own tool for spending the bitcoins at the address.
If we use the address to enforce the delay at the peer level, the only "timestamp" that the peers have access to is the time they first hear of the transaction. The peers could delay relaying it, but this doesn't seem to solve the problem. The attacker could connect directly to miners/pools and the "true owner" of the bitcoins wouldn't even hear bout the transaction until it was too late.
We've now arrived at the idea that since the output scripts were specifically designed for the ourpose of controlling access to spending the output, perhaps the output script is the best place to create the delay. This means that you would have to rely on the sender to use the output script you desire, but this could potentially be dealt with by immediately sending any bitcoins received with a "typical" output script to this new output script as soon as we receive it.So after gaining an understanding of the issues with the other suggestions, we're now ready to talk about what can and can't currently be accomplished with output scripts.
Unfortunately, as far as I know, the current script commands do not provide a method of determining block height. Now, if we are talking about forking changes, changes to the protocol, and/or changes to what is recognized as a valid transaction, then perhaps it would be worth considering modifying the script command set to allow scripts some way of referencing information about the block where the transaction is confirmed as well as the block where the transaction output is spent.
Since we are talking about peoples money here, and any changes we make to the protocol and transaction validation could potentially have unintended consequences, we should be extremely careful about making any such changes. Perhaps it is a worthwhile effort to see if we can get the security we desire with the current command set even if we don't get the specific functionality we are considering.
I'm not against modifying the command set if it is well tested and can be demonstrated that a significant value will be gained while careful analysis and testing determine that the new command set presents minimal risks.
Right now I'm still hearing very "pie in the sky" ideas. The details would have to be thought out carefully to see if such an idea is even feasible and to determine if it opens new lines of attack.
I'll have to think on this for a while. I've tried to come up with how such a script would look, and how it would be satisfied. It is clear that if you wish to include some sort of requirement that an "intent to spend" transaction be created, and then later an actual spending transaction, along with some delay between those two transaction as indicated in the original output, that some significant changes would need to be made to the protocol.
If I can come up with a way such a script could be structured, I'll come back to this thread and let you know. If I can't then I'll try to let you know what the stumbling block are. Regardless, any discussion about future scrips beyond the simple script we all think of as "send to address" is a welcome discussion.
Some comments on specific things that have been said by various people in this thread in the past 18 hours:
Your suggestions require total protocol change, not just bitcoin-qt. (if you think bitcoin-qt = bitcoin network, that's completely wrong) . . .
Seeing as Bitcoin-Qt is the "reference client", what are you suggesting. Is there some other protocol definition beyond the rules enforced by bitcoin-qt?
I was not defending the idea, just pointing out that the blockchain is not just data, it's data and a majority of clients who enforce a set of rules.
I'm pretty sure "the blockchain" is just data. It is just a "chain" of data "blocks" that have been appended to each other. The clients enforcing the rules are not "the block chain", they are the clients. Clients store a copy of the blockchain, but the blockchain
doesn't enforce the rules, the clients do.
A rule to allow chargebacks for about 144 blocks is technically possible, I'm not saying it's a good idea or it can not be exploited by evil attackers, just that the bitcoin network has the capability to enforce those kind of rules if it must.
Perhaps. Even so, the tricky part about any significant change is that if you don't want to fork bitcoin into two competing currencies, it requires that everyone agree to update their software to the new way of doing things. Convincing everyone to do anything is an extremely difficult thing to accomplish. I'm still not certain that such a change could occur without some significant unintended consequences, but maybe. The first concern that comes to mind would be the possibility that attackers would find a way to take advantage of this new output type and use it to defraud others. Still, it might be worth a look to see what could theoretically be accomplished.
To Danny Hamilton: Your patience is commendable.
Thank you for the compliment.
I hope you realize how dead-set I am on understanding this.
Indeed. One of the reasons that I keep coming back to this thread and responding to the thoughts to yourself and others is because you seem to really want to understand take the time to understand the explanations that are given. You don't seem to be just trolling and attempting to force others to argue for arguments sake.
Indeed my suggestions might sound a little ludicrous at this point, but hopefully I can get to where I able to describe them in terms that are understandable.
Now that you've begun talking about the output scripts rather than "special private keys" and/or "special addresses", the conversation is beginning to sound much less ludicrous. I'm still not certain if what you want can be implemented without introducing significant problems, but at least we are reaching a point where those with an open mind can have a discussion.
Also, if you want to post an address I'll tip you for your time.
If you are serious, PM me, and I'll send you an address. If not, that's ok, I'm enjoying the conversation.
What you've explained so far is interesting.
The design of bitcoin can be surprising when you first learn about the details.
Something to keep in mind is that some truly great mathematicians and crypto-analysts have been trying to come up with a workable crypto-currency for decades. Most had a "gut feeling" that it "should be possible", and yet for decades any possible solution required a centralized clearing house that could confirm for users that a "coin" hadn't already been spent elsewhere. This resulted in opportunity for fraud perpetrated by the clearing house as well as central point of attack.
Satoshi isn't a "prophet", Bitcoin isn't a "religion", and Satoshi's White Paper isn't a "Bible". Bitcoin has undergone changes over the past 4 years, and it will undergo additional changes in the future. However, there are certain core features that provide the "solution" that makes a decentralized crypto-currency possible. If we aren't careful about changing those core features, we begin to run a significant risk of "breaking" bitcoin.