Old forum thread for context: http://forum.bitcoin.org/index.php?topic=5529.0
Current version works with a single type of contract: capped BTC/USD futures settled in BTC, with MtGox used as a spot price.
Here's what it means, how it works and why it makes sense:
Let's say Alice wants to sell 100 BTC for 30 USD each on a certain date (like 2011-06-15) and Bob wants to buy it. However they do not want to deal with USD because it is messy (not anonymous! subject to regulations!) and instead agree to settle in bitcoins. I.e. instead of giving Alice 30*100 = 3000 USD Bob will give her an equivalent in BTC.
Of course they need to decide what is equivalent. For example, they can agree on smoothed out MtGox price, like 24h average.
1. If MtGox price goes to 40 by the settlement date then Bob owes Alice 3000 USD / 40 = 75 BTC.
2. If it goes to 25 then it is 3000 / 25 = 120 BTC.
So in the first scenario Bob gives Alice 75 BTC and she give him 100 BTC back (amount of BTC sold). So if Bob agreed to buy at 30 BTC/USD but price went up to 40 BTC/USD he have earned 25 BTC and instead of sending money back and forth Alice can send him this sum and they'll be settled.
Likewise, if price goes down (Bob bought BTC for higher price then real price is) Bob has a 20 BTC loss and needs to send this to Alice.
So you can see this as a bet where parties agree to pay each other depending on external conditions, but in theory if Alice actually wants to buy USD she can jump to MtGox, do the trade and get them.
But as bitcoins are kinda anonymous it is hard to enforce this contract (if Bob have lost the bet he will pretend he is dead), so Alice and Bob ask a trusted 3rd party -- let's call him killerstorm -- to make sure that agreement is enforced.
Killerstorm will take money both from Alice and Bob and hold it as a reserve. At the date of settlement he will compute who owes whom how much and will move money, returning unused reserves. But now we have to deal with situation that reserves are finite and need to be available at date of agreement, not at date of settlement. Each party's profit is limited by reserve his counterparty have made and his loss is limited by reserve he made. So each party is interested in making his reserve as small as possible while conterparty's reserve is adequate. (Also it is possible that they don't have that much BTC on agreement date so reserve percentage limits contract amount.)
Reserve amounts define price range in which settlement will be exact. For example, if Bob reserves 20 BTC and Alice reserves 25 BTC then they can settle exactly as long as price is in 25..40 USD-per-BTC range. If it shots to 45, for example, Bob will get only part of his possible profit. This is why we call them capped futures.
(Note that it doesn't make sense to reserve more than 100% of contract amount for seller -- seller never takes loss higher than what he sells. Buyer's loss in BTC is potentially unbound, though -- if BTC price drops to, say, 0.01 he would need lots of BTC to settle the contract.)
So, as you might have guessed, I made a service which implements this kind of trading. It is not 100% ready yet, but at least it can accept orders, make contracts, calculate spot price and do the settlements. So I think it is usable.
But I run it on testnet for now. So instead of bitcoins it works with testcoins. Also, withdrawals are disabled. But I'll promise I'll send all testcoins I've received to the faucet.
EDIT: Due to apparent lack of interest in testnet version I've switched it to real bitcoins, but please not deposit more than a few cents -- software is not well tested yet. Minimal order is 0.001 so even one cent is enough for testing.
So here is it: http://killerstorm.xen.prgmr.com:31337/st/main.html
(apparently, it is a temporary URL).
And here is how you can test it:
1. Go to http://killerstorm.xen.prgmr.com:31337/st/main.html
, choose login/password and click register.
2. It it works you'll see your account (empty) and address to fill it.
Note it is a TESTnet address, not Bitcoin address. If you don't have testcoins you can get them from the Faucet http://testnet.freebitcoins.appspot.com/.
Then you have to wait for a single confirmation, ~10 minutes and hit 'update balance'. (Note: if server sees your transaction address will change, but it will show money only when 1 confirmation is made). (Sometimes if bitcoind hangs my server hangs too, so if it doesn't work please retry some time later.)
3. Meanwhile you can explore 'order book' (probably empty at start) and spot price sections.
4. Once you've got money on balance go to My Orders and hit 'place new order' button. You will see a dialog which is fairly obvious. Maturity is in days, e.g. +1 is next day. Price is how much USD you think one BTC will cost. Seller/buyer reserve percentage is relative to order amount in BTC, e.g. 100 BTC contract with 50% percentage means that 50 BTC is reserved. Placing order costs you 0.0001 (t)BTC. Once you place it it can be filled partially from orders currently in order book and the rest will show up in 'my orders'. When exchange sees orders in different directions which agree in price it destroys them and creates corresponding contracts. Go to 'my contracts' to see them.
5. At around 00:01 UTC (GMT) settlement will be made. Orders and contracts will be wiped, you will get money on balance and you'll see how much you've earned/lost
So, testing will take about 10 minutes to move money and <24h to see settlement. (Hmm, if you people do not like that and want to try trading part faster I can give some fake amount to each new account and set up more frequent settlements.)
On the technical side it is implemented via JSON-RPC so you can write a bot or make an alternative client.
If there is enough interest I will launch server working with real BTC (EDIT: done!), but as it is an 'alpha'-quality version I would recommend depositing no more than 0.02 BTC