Why LiteBringer uses SegWit and P2WPKH

In LiteBringer we use addresses encoded with Bech32 with compressed keys. For us, using SegWit addresses fits our needs perfectly to keep our players safe.

In LiteBringer we use addresses encoded with Bech32 with compressed keys just like any other SegWit address. For us, using SegWit addresses was the best option because all other methods come with several disadvantages which can cause serious problems. One of them is the so-called transaction malleability. This means that a transaction can be altered after it has been sent. This again results in a still valid transaction but with a different hash, causing serious problems!

For example, to send a character on a quest a transaction is needed. The details of this transaction are saved by the client. When the hash is altered at a later moment in the same block the client would need a lot more resources than the standard methods to find the transaction again.

This is the very reason hackers were able to attack Mt Gox, the very first cryptocurrency exchange, causing its insolvency. On February 10th 2014 Mt Gox, released a statement claiming transaction malleability as the reason they were preventing customers from withdrawing funds. What the hackers did, is easy to explain:

Let’s say, attackers are trying to buy 1 Litecoin from an exchange. After receiving the payment, the exchange will send the coin to their wallet with the transaction ID A. Before the transaction is confirmed, the attackers alter the signature data to produce the new ID B and inform the exchange that nothing has arrived. To investigate this claim, the exchange will search for the transaction ID A using a block explorer. Of course, they will not find anything. They will assume a failed transaction and that the coin was never sent. Now the exchange would repeat the transaction and give the attackers 2 instead of the one Litecoin they have paid for.

As you can see, this can become a serious problem. To prevent both our players and ourselves from getting into serious problems we decided to use SegWit which makes modifying IDs impossible. It is the most up to date method anyways. SegWit uses the new Bech32 address format which is why we had to follow this format as well. While it does mainly the same as previous formats it also contains the essential hash.

We could have used the Pay to script (P2SH) method and the corresponding addresses starting with the prefix M. However, because our payments are always to a single address and are not backed by a multisig progress, we do not need script hashes. Consequently, P2WPKH, which stands for “Pay To Witness Public Key Hash” fits our needs perfectly.