Development Update #51

We had a productive day yesterday. Some people were able to get builds working immediately. Other people had problems with golang and path issues we are working through.

We launched the blockchain after a few hours of work. Fixed half a dozen bugs.

Then we will live code the trading bot, test it with Bitcoin. Then start trading for real!

Skycoin: Transaction Malleability

A crypt-coin does two things:
So as an application, a coin is very boring by itself.
Skycoin has combinations of these:
More fundamental, the majority of the work and design in Skycoin so far has been on the extremely boring fundamentals of:
This may seem trivial but it is actually done poor by every existing coin:

The inner details of Skycoin’s blockchain design and it differs from Bitcoin only interest a very small number of developers. The improvements Skycoin makes in these areas are not visible, like improvements to the wallet GUI. They only become apparent or important in a crisis.


Overview of Skycoin/Bitcoin. Most people do not understand what a “transaction” is in Bitcoin.

You must spend a whole output. If there are 10 coins, the whole output is consumed. You cannot partially spend the output. So to send 5 coins to someone, you send them 5 coins and send 5 coins back to yourself.

Outputs are named by hashes. In Bitcoin a transaction might be identified as 590f7f552aedb219ff814331201a97c3467b08d590016991c4d31dfdcd4b88ce

The transaction may have three outputs. 590f7f552aedb219ff814331201a97c3467b08d590016991c4d31dfdcd4b88ce:0 590f7f552aedb219ff814331201a97c3467b08d590016991c4d31dfdcd4b88ce:1 590f7f552aedb219ff814331201a97c3467b08d590016991c4d31dfdcd4b88ce:2

In Skycoin, there is an explicit output set. Outputs are actual data objects and part of the blockchain “state”. Transactions are functions that act upon the blockchain state. Transactions consume outputs in the state and create new outputs.


Malleability means that someone can take a transaction and modify it, so that it is still valid but the hash is changed. - in Bitcoin, the output is named by the transaction hash - in Bitcoin, anyone can take a transaction and modify it, so that it is still valid but has a different hash. Even if they do not know the secret keys for any address for any of the inputs used in the transaction. This is non-intuitive and subtle but has implications in a crisis, such as a blockchain fork.

If there is a chain of transactions T1 T2 T3 And each transaction spends, outputs created by an earlier transaction. Then if the hash of T2 is modified, transaction T3 becomes invalid. T3 is trying to spend an output that does not exist. This only becomes a problem in a blockchain fork or 51% attack scenario.

There are three levels transaction malleability
In the event of a major attack or blockchain fork on Bitcoin

Effect of Signature Malleability on Loss Ratio in Crisis Scenario

A transaction invalidation attack, is any attack where a previously executed transaction is revocated and some of the outputs spend by the transaction are spent into different outputs. This only happens during blockchain reorgs, forks or other crisis scenarios.

In Skycoin:

This is extremely important. In a crisis, the number of users affected is limited:

Survival of Crisis

Transaction malleability has effects

In Skycoin, if an attack succeeds at introducing a fork then there are several remedies

There are several steps to prevent it from getting this far, such as local timestamps, distributed timestamps.

In Bitcoin, if there is a fork:

Bitcoin has a simple failure case, but when it does fail it is very difficult to “fix”. There is not an effective response or remedy to an attack and there is only limited scope for preventing similar future attacks.

No translation bounty

Discuss this post on telegram

Skycoin Telegram