BACK FROM THE DEADhttp://stablecoin.netI'm sure many were disappointed and confused when I vanished earlier this year, and StableCoin development grinded to a halt. My life's been playing out like something out of a Hollywood movie. I do not want to talk at length about the situation at the moment, but it's been a very harrowing experience. I've been disconnected from the rest of the world for the better part of 5 months and have had a lot taken from me.
That being said, it's amazing what can change in 5 months. I feel like I've stepped into a new world. Cryptocurrency has gained more ground that I've ever imagined possible in the timeframe. With it of course, new challenges arise. CoinValidation in particular has caught my interest as I catch up with the latest developments. Anonymity is now even more important than ever. It was one of the driving factors of StableCoin development, and will continue to be going into the future.
To that end, one of the key services I wanted to offer when StableCoin launched was a coin mixing service. Such a service would allow users to 'clear' the trail of their money, and even send money anonymously. The gist of it is that you could send, for example, 100 coins in, and receive 100 coins out. This destroys any associations a coin may have, and lends to anonymity.
The mixing service I described when I launched StableCoin was, I admit, very poorly thought out, so it will be nixed in favor of a new, revolutionary mixing service.
A FOCUS ON ANONYMITY – THE NEW MIXING SERVICEA dedicated master mixing address is designated. This is place that all funds that are to be mixed will be sent to. From here out, we'll call this the master node.
When sending to this address, it will be designated as a special type of transaction. All of this will be done through a dedicated mixing tab in the client. These transactions will have an additional data field that stores an obscured version of the address you want the mixed funds to be sent to. The address will be joined with 80 characters of random data, for privacy purposes. For example:
r7ru5JaNMugN2GK4mrmVmLpSgTXXCWzeL4dGzznV6YWhxq4K2aM7Tcz6VgUNxaLJ7Jzu9fZYmHZmRE4
T
sajaWXsFiQNbH8bzQygYS1UeXqgTRJZQA7The resulting string is then encrypted, using the public key of the master node. When the master node receives such a transaction, it decrypts it using it's private key. The node then strips the first 80 characters, leaving it with the address (the bold part) to send the mixed funds back to.
When sufficient conditions have been met, the master node will create a new set of transactions to send out the now mixed funds. These transactions will be signed, encrypted, and then sent over to another node who's job is to decrypt and broadcast it. All nodes involved will be running on the TOR network. By doing it this way, we are able to obscure where the master node it.
In a time where privacy is a hot button issue, StableCoin will be positioning itself as a leader in anonymity.
For those interested, a more detailed explanation can be found in this topic:
https://bitcointalksearch.org/topic/ann-fighting-coinvalidation-introducing-the-new-stablecoin-mixing-service-353971DESTRUCTION OF THE PREMINEAs some of you may remember, as part of the old mixing service, there were 1.2 million coins premined to act as the basis of the mixing pool. Of course, this caused much anger within the community, with accusations that the money would be used improperly, among other things. 5 months later, these funds have yet to be touched, so I'm happy to have proved those people wrong on those front.
However, under the new mixing system, these coins are no longer necessary. Accordingly, these coins will be publicly destroyed, as they were never intended to be used for anything other than mixing.
In this case, the 1.2 million coins were created in the genesis block. You might notice this is different than most coins that do their premine in block 1 and onward. This is because there is a
well documented quirk within bitcoin that makes the genesis block unspendable. This is because when Satoshi designed the client, he decided not to add the coinbase transaction from the genesis block to the global transaction database.
To make these funds spendable, I added a simple bit of code during the initialization of the client (init.cpp). This code adds the genesis transaction to the global transaction database, making it spendable.
// Genesis block
const char* pszTimestamp = "June 7 2013, The Times, Prince Philip admitted to hospital for two weeks";
CTransaction txNew;
txNew.vin.resize(1);
txNew.vout.resize(1);
txNew.vin[0].scriptSig = CScript() << 486604799 << CBigNum(4) << vector((const unsigned char*)pszTimestamp, (const unsigned char*)pszTimestamp + strlen(pszTimestamp));
txNew.vout[0].nValue = 1250000 * COIN;
txNew.vout[0].scriptPubKey = CScript() << ParseHex("0449D77B9B62E0DB1FD6150ECFC5722F31FEE52E585DE31B5AEFAD2CAC415D5698991F8F0B0CBBA7B9F4431BBE79B684876EDFBD369554ACC4182753FA48A3CD80") << OP_CHECKSIG;
CBlock block;
block.vtx.push_back(txNew);
block.hashPrevBlock = 0;
block.hashMerkleRoot = block.BuildMerkleTree();
block.nVersion = 1;
block.nTime = 1370579804;
block.nBits = 0x1e0fffff;
block.nNonce = 2788;
uint256 genesisHash("0x0a59605118489aa9cde58e64210d3d56e246758fbabcd1482e54bf4032545221");
uint256 hash = txNew.GetHash();
{
LOCK(mempool.cs);
mempool.addUnchecked(hash,txNew);
}
{
CTxDB txdb;
txdb.TxnBegin();
CBlockIndex* pindex = mapBlockIndex.find(genesisHash)->second;
unsigned int nTxPos = pindex->nBlockPos + ::GetSerializeSize(CBlock(), SER_DISK, CLIENT_VERSION) - 1 + GetSizeOfCompactSize(block.vtx.size());
CDiskTxPos posThisTx(pindex->nFile, pindex->nBlockPos, nTxPos);
txdb.UpdateTxIndex(txNew.GetHash(), CTxIndex(posThisTx, txNew.vout.size()));
txdb.TxnCommit();
}
By removing this code, the genesis block becomes unspendable, and the coins are essentially destroyed. This is the most eloquent way to accomplish the goal. Version 1.3 of StableCoin has this bit of code removed. I urge everyone to update immediately.
You can view the relevant commit here:
https://github.com/stablecoin/stablecoin/commit/1912b4c1e9fb195c242e57459c613cb8c7846c8bRELEASE - VERSION 1.4Windows Client:
https://github.com/stablecoin/stablecoin-qt/archive/master.zipMac Client:
http://stablecoin.net/download/StableCoin0630Mac.zip (alt link:
https://mega.co.nz/#!0AY3FQbb!T5wdjVvp3oDfr9Ucun4Dw2JaF0wePwP5xy50meuwn9k)
Source:
https://github.com/stablecoin/StableCoin