2017-03-29

Hard fork contingency plans and SegWit readiness - a challenge to solution evangelists

Currently, the biggest discussion in the Bitcoin community concerns the possible forks we might see this year - Bitcoin Unlimited and SegWit. Whether those forks should or should not be activated and whether they will create a network split is an important discussion, but what is less discussed is the risk mitigation in case either of those forks happen. I would like to post a challenge to the various solution evangelists to see if their software is ready for any outcome.

Note - some questions apply to more than one scenario. Duplicates have been omitted for conciseness.

Scenario 1 - SegWit activates before Bitcoin Unlimited


Lets say SegWit activates before Bitcoin Unlimited or any other block scaling solution takes place.

First, some questions to the Core team:

How much extra transaction throughput are you expecting to see with this solution?
Do you have any estimates as to how many transactions should move off-chain in the near future? When do you expect this solution to start reaching critical mass to alleviate the block congestion?

How many of the big Bitcoin companies will be ready for SegWit?
This important question is somewhat answered by a handy spreadsheet or two. Let's have a look and see if some important players are missing... Coinbase is "planned" so far. BitPay is nowhere to be seen. BitGo is "wip". Top exchanges - Poloniex, bitFlyer, BTC-E, OKCoin are missing. For the wallets - Armory, BreadWallet are wip, Bither, Exodus and Multibit HD are planned.

All in all, the coverage looks good, but some top players still need to get on board.

What are the fees users should be expecting?
A large pressure for the increase in the network capacity comes from the high fees to the average user. What fees should the users expect under SegWit? I've seen mention that on-chain fees will drop from 0.5BTC/block to about 0.2BTC/block, but some numbers on the off-chain fees would also be interesting.

What is the block scaling plan going forward?
Are you planning on changing the block size following SegWit? If so, when are we likely to see the size change and what would it be?

And a big question for the Bitcoin Unlimited team:

Is your client SegWit ready?
Are you ready to integrate SegWit into your client? Will it have some issues in case SegWit activates?

Scenario 2 - Bitcoin Unlimited activates first, network splits


In this scenario, Bitcoin Unlimited activates first and the network splits itself into Bitcoin Core and Bitcoin Unlimited.

Question to both sides:

How are you mitigating the damages of the split for your users?
There are many things that need to be considered when the network splits. How are you mitigating the cross-split replay vulnerability? How will you avoid the confusion when it comes to addresses being the same on both networks?

Bitcoin Unlimited devs:

Is your code ready to be pulled to Bitcoin Core?
A lot of people consider Bitcoin Core to be the "gold standard" when it comes to Bitcoin clients. Developing a different client without allowing the options to be pulled into Bitcoin Core cleanly will only make the adoption of your client harder.

So, is your code ready to create a pull request to Bitcoin Core? Do you have a branch that is up-to-date with the latest commits to Core, or will you need to catch up? If you don't have these ready, it is almost inviting a network split, rather than working on keeping the network unified.

Will you be activating SegWit on your network?
There are some good use cases for off-chain transactions - will you be activating SegWit or other soft forks required to run off-chain transactions on your network anytime soon?

How are you planning to convince more exchanges to adopt Bitcoin Unlimited?
Some developers have sworn off BU completely - for example, BitGo (and thus indirectly - BitStamp, OKCoin, Kraken, etc.), while others might be on the fence. Do you have any plans on convincing them to start supporting your software?

Bitcoin Core devs:

Will you make your client opt-in compatible with Bitcoin Unlimited?
This question was originally asked by Gavin - since "Bitcoin Core does not want to and does not make decisions on Bitcoin’s consensus rules", is Bitcoin Core prepared to let the users op-in to be able to connect to the Bitcoin Unlimited network? It shouldn't be that much work to add a flag disabling the block size check at the very least.

Scenario 3 - Bitcoin Unlimited activates first, minority network gets attacked


In this scenario, Bitcoin Unlimited activates first, the network splits, but the minority chain gets attacked by miners in hopes of preserving only one side of the fork.

Bitcoin Core devs:

What is your contingency plan for such an attack?
As I understand, the current plan is to change the PoW algorithm in a hardfork. Is that hard fork already in the works? Is the new PoW algorithm decided on yet? Has the hardfork been tested? It is a large change - you don't want to be scrambling around trying to figure this out while an attack is ongoing. Do you have your legal side of things covered? Will you be coordinating actions with important Bitcoin players, such as exchanges?

Since hardforks don't come as often, are you planning on implementing any of the hardfork wishlist items while you're at it? Will the hardfork also include SegWit?

Bitcoin Unlimited devs:

What is your plan for such an outcome?
Will you be endorsing the attack, or will you be disowning it? Are you prepared for potential legal, community, etc. backlash you might receive if the attack takes place (even if it's not of your own doing)?

Conclusions


There are many important questions that need to be addressed early on before Bitcoin starts forking. While we might still have some time before either fork activates, it's better to mitigate the potential risks early on than to scramble when they actually take place. I'm looking forward to developers from either of the sides sharing their thoughts on the issues raised here.

2017-03-26

Bitcoin hard fork - if you want peace, prepare for war

Over the last few weeks we had a lot of people discussing Bitcoin forks. Every member of the Bitcoin community is voicing their opinions on the matter, so I figured I'd write down my thoughts as well.

Historical perspective


While the debate has picked up a lot recently, it's by no means a new problem. BIP101 proposed increasing the block size in mid-2015 and BIP-141 introduced SegWit in late 2015. Since then we had a number of projects wanting to fork Bitcoin - BitcoinXT, Bitcoin Unlimited and Bitcoin Classic. This is in addition to things like Sidechains, Liquid, user-activated soft forks, etc.

All in all, we can all agree (well, with some exceptions) that we need to expand the Bitcoin network transaction capacity. We can't really wait much longer - this was starting to be an issue in 2015, and now it has become a necessity.

Bitcoin slowing down


Bitcoin for a long while had the first mover advantage - everyone wanted to get into it, develop on top of the platform, etc. Being in the community early was really fun - seeing the first ATM launch, getting merchants on board, etc. However, nowadays it's a different story. Waiting multiple blocks to get one confirmation, paying over 30 cents in fees, etc. - that's not an ideal situation in comparison to what we saw years ago.

If nothing changes, we'll probably see a lot of the big Bitcoin companies expand or migrate to other platforms. Coinbase already doesn't want to pay the fees by themselves, Storj has moved to Ethereum, etc. With Ethereum's growing market cap, there are only so many reasons to stay with Bitcoin...

The fork


So this brings us to the fork situation. There is currently a lot going on in the community, but from what I can understand, there are two main camps when it comes to forking at the moment - those that want to activate Bitcoin Unlimited and soon, and those that want to get SegWit activated sometime this year.

When figuring out what can happen next, we have to keep in mind the scant few examples we had of contentious coin hard forks in the past.

From what I can tell, Bitcoin Unlimited is heading in the direction of activating its hard fork no matter what. It's ramping up in node and mining power count. It is likely that the node count is fake, and there have been some reports about the possibility of attacks on pools that don't signal Bitcoin Unlimited (by orphaning non-signalling blocks in a minority attack). There is also a concern with miners being blacklisted by the effective monopoly in mining ASICs if they signal SegWit.

Lastly, we need to keep in mind the man pushing for Bitcoin Unlimited adoption - Roger Ver. I'm not going to get into discussing his past or personality (there are plenty of trolls that have you covered), instead, lets focus on one fact - he's an early Bitcoin adopter, and he appears to be loaded. Being able to trade 130k BTC loaded. That's more than 4 times the amount of BTC Ethereum raised during its presale. So my guess is, that he could safely pay out of pocket to fund the forking effort, even if it doesn't make economic sense.


So because of this, I think the Bitcoin Unlimited will activate its fork sometime soon. Now, what will happen next?

The aftermath


It was interesting hearing Gavin's exchange with Matt on whether Bitcoin Core should have an opt-in flag to accept the possible fork or not. It looks like the answer for the time being is "no", which means the repository everyone considers to be the "gold standard" for Bitcoin will not accept Bitcoin Unlimited blocks, causing a fork.

If you want to keep Bitcoin network on only one side of the fork, you have to attack the other side. Whether that is a moral or legal way of handling the situation - it's up for debate. At any rate, 51% attack on the Bitcoin Core side of the fork is a possibility that has to be kept in mind. Luckily, there is "a nuclear option" to defend against something like that - PoW change. Since the vast majority of Bitcoin mining power is in ASICs, any change to the mining algorithm makes all of that hardware obsolete. This will mean that an attacker that has been stacking up on ASICs will end up with a large pile of useless hardware, but also that your honest miners will have the same issue.

So if Bitcoin Unlimited forks and tries attacking the Bitcoin Core side of the fork, it is likely we will end up with a PoW change fork and the unchanged, SHA256 fork. The SHA256 fork will either be kept alive by miners that oppose the Unlimited fork, or it will be left by the wayside as they will realise where the wind is blowing and switch over to Bitcoin Unlimited to maintain some income from their hardware.

Early on, the PoW fork would still be vulnerable to an attack. There are a lot of altcoin miners out there ready to put their CPUs and GPUs to work. Whether they will stand with the Bitcoin PoW fork supporters or be mercenaries for hire by the attackers remains to be seen.

If there is no attack on the minority fork, the Bitcoin landscape will probably be more peaceful, but also more divided. A number of exchanges have already signed a statement on the hard fork matter, and it looks like they will either be ignoring Bitcoin Unlimited, or treating it as an altcoin. So all in all, we'll have the Ethereum / Ethereum Classic scenario once more.

If a fork happens and Bitcoin Unlimited doesn't secure key supporters early on (miners, exchanges, developers, etc.), it is possible it will go the way of Elacoin. A coin needs to be traded and developed upon to stay relevant.

Preparations


Since the fork has not yet happened, there is still some time for preparations. Every Bitcoin business will have to consider the implications of the fork on what they're doing. How will customer BTC balance be handled? How will you prepare for the relay attack? What are the edge cases you need to think about?

Even working for Factom I had a discussion about this issue, and we're not holding BTC balance for our users.

Finally, every Bitcoin user will have to prepare for the fork. Whether you decide to hold onto bitcoins at a responsible exchange, keep it in your wallet, or sell it for now in hopes of buying cheap coins during the turmoil, you should make a conscious decision on what to do, or risk getting some of your coins lost in the process.

Conclusions


Bitcoin needs to address its transaction throughput sooner than leter. It is likely Bitcoin Unlimited will attempt to hard fork soon. The fork will either lead to the community being divided, or an attack on the minority chain to force everyone to switch. The attack will likely lead to another fork and an uncertain future fo the minority chain. Everyone should ready themselves for the fork.

If you want peace, prepare for war.


2017-03-19

Fourth year of /r/Bitcoin moderation

Last week marked my fourth year of moderating /r/Bitcoin . A lot has changed in the last year, but also, a lot has stayed the same. So I figured I'd make some post to collect my thoughts on our current situation and a few important events that have transpired recently.

Related topic - On /r/Bitcoin moderation - three years in review

Coinbase and the mod reshuffle


A few more perceptive readers might notice something has changed in the mod team on /r/Bitcoin - I'm claiming to have been moderating for four years, but the page only accounts for seven months. This mod reshuffle has been due to the alleged discussion between Coinbase and Reddit CEOs about removal of Theymos from the /r/Bitcoin mod team. Our top mod reshuffled the mod team to ensure BashCo would be the first in line in case he gets removed, as unfortunately Reddit has some issues when it comes to managing moderators. While not an ideal situation from my perspective obviously, I could get behind BashCo being the top moderator if worse came to worse.

So, why was Coinbase allegedly discussing removal of Theymos? That was most likely spurred by the thread coming from Theymos to label Coinbase as an altcoin service for their support of BIP 101 (the 8MB hardfork), effectively banning it from /r/Bitcoin and bitcointalk, two of the more prominent places to discuss Bitcoin.

My stance on this situation is that companies should be free to make their stance on the hard fork known without fear of being punished for it. Consensus on the hard fork comes from discussion, not from silencing dissident opinion. An opinion of one moderator should not dictate the discussion of the entire forum.

I would love to talk with Coinbase and Reddit CEOs about what issues they might have with our subreddit and how they would like to resolve them.

Forks


There is no denying it, Bitcoin blocks are practically filled by now. Some measure has to be taken in order to fix this problem soon. There have been many proposed solutions by now, including:
Unfortunately, the scaling / forking debate has become more heated recently due to a bug in Bitcoin Unlimited that crashed a lot of nodes. Following that, a lot of hostilities in the community have sprung up (along with terms like "North Corea"), and a number of exchanges have released a statement with their take on the situation. Bitcoin Unlimited is forming a Confederation with a president and getting some criticism for it.

All in all, with the rising tensions in the community, I feel like we're headed towards a contentious hard fork and a network split. We will have an Ethereum / Ethereum Classic situation on our hand. While that doesn't bode well for our current situation, it looks like Ethereum has more than recovered since its DAO incident, so there is some hope in long-term recovery...

My stance on the hard fork situation is pretty much the same as it was last year. Bitcoin needs a scaling solution, and it pretty much needs it last year. The block size needs to be increased, or perhaps even abolished one day. That being said, SegWit is also not a bad idea. It by no means should be the only solution, but it would work as a complementary approach.

As for the BU crash and the subsequent fallout, well, people make mistakes. It's unfortunate, but inevitable. Smaller teams are understandably more susceptible to unexpected crashes since there are fewer eyes on the repo and fewer people on at the same time to look out for new exploits 24/7. If any solution becomes the dominant Bitcoin implementation, it will have more scrutiny put on it. If it forks the network and remains its own blockchain, well, that's a different story entirely. It's hard for a small team to maintain a large financial system like Bitcoin.

Too little and too much moderation


A big divide in the Reddit Bitcoin communities is the issue of moderation. /r/Bitcoin moderation is generally seen as heavy-handed for obvious reasons, so a few communities have sprung up that are focused on much lighter moderation - /r/bitcoin_uncensored/ and /r/BTC being the most prominent.

It was interesting to hear some thoughts from /u/jratcliff63367 , a former /r/Bitcoin mod, when he announced his resignation from the /r/BTC moderation team. It seems that neither side of the /r/Bitcoin - /r/BTC split is sunshine and rainbows.

I could take time iterating over the various problems with both subreddits and communities, but that wouldn't be productive really. It seems like there is room for a new subreddit that would attempt to move away from the politics and take lessons from the existing communities on what to avoid, but that is neither here nor there at the moment.

My stance on the situation is that some moderation is needed, but moderation should not be shaping the discussion of potential forks. Oh how I miss /r/Bitcoin from early 2015, before the community grew more divided...

Conclusions


The /r/Bitcoin moderation situation for me hasn't changed much in the last year. Unfortunately, the Bitcoin community has grown more divided over the years, which makes the pressing issue of Bitcoin block debate even less civil. I hope that by this time next year something good will come of this and we'll be able to put some of our differences behind us, but I'm not holding my breath. It feels like we're heading for crossroads that will further drive a wedge between us...

2017-02-20

Blockchain Terminology - a developer perspective

One of the discussions I had with SCC's committee on "Blockchain and electronic distributed ledger technologies" was about the various terminologies used by the Bitcoin / blockchain community. In light of that, I figured I would put together some of my interpretations of those terms as they might be viewed by a developer working in the field. The following list is by no means exhaustive and it could be further refined, but I hope at least some of the examples and nuances in meaning would be helpful in expanding some of the definitions of more rigorous dictionaries.

Address

A string of characters representing the destination of a funds transfer on a Blockchain. For example, "1PiachuEVn6sh52Ez7o6Fymvw54qvQ4RBm" is a Bitcoin address, "0xcd234a471b72ba2f1ccf0a70fcaba648a5eecd8d" is an Ethereum address. Addresses are usually a human-readible representations of a Public Key composed using a fixed scheme, but they can also represent concepts that don't correspond to Keys, like Ethereum's contract addresses.

In most blockchain systems, every entity can own many addresses. Some blockchains like Bitcoin focus on creating a lot of addresses, while others, like Ripple, focus on reusing the same address many times over.

Addresses are analogous to bank account numbers.

Altcoin

A term that originated early in the Bitcoin history, an Altcoin refers to "an alternative coin implementation", usually being an alternative to Bitcoin. It has often been used dismissively and sometimes even derogatorily, especially when referring to a lot of "copycat coins" that are a carbon copy of Bitcoin with minor tweaks. Most well known Altcoins include Litecoin and Dogecoin.

A lot of Altcoins mostly focus on tweaking small parameters of Bitcoin while preserving how the system operates on a higher level. The tweaks most often focus on the Hashing Algorithm, Block creation time, Coin distribution, name and branding.

When an Altcoin is created solely to be speculated on and then abandoned, it's usually referred to as a "pump and dump" or a "ScamCoin".

Some part of the community refers to every non-Bitcoin cryptocurrency as an Altcoin, while others shy away from this term when talking about more sophisticated projects that differ greatly from Bitcoin, such as Ripple or Ethereum.

Block

A Block is a cryptographically secured collection of Transactions along with some extra information stored in the Block Header. That extra information usually states the Hash of the previous Block, the current time, and the Merkle Root of the transactions, among other information.

There is usually some limitation to how many and how often Blocks are created in a given Blockchain project. In Bitcoin, the Blocks require a Proof of Work to be valid. Ripple Blocks require a consensus to be reached.

Blocks are usually referred to by their Hash. Due to how their Hash is computed, the Block cannot be altered without creating a completely different Hash.

Blockchain

A Blockchain is a collection of Blocks refering to one another in a linear sequence all the way to a Genesis Block. Because of how the chain is created, any change to any Block in the sequence would invalidate all of the Blocks that came afterwards. This is one of the core features of a Blockchain known as Immutability.

If two or more Blocks refer to the same previous Block Hash, this is known as a Fork. In most systems, only one of those Blocks will be considered valid, usually the one that will end up in the longest branch.

The term "Blockchain" is also used to refer to the projects that use Blockchains. Bitcoin is a Blockchain project that contains the Bitcoin Blockchain. This term was popularized in mid-2015 by large enterprises such as Overstock and NASDAQ wanting to use the then called "Bitcoin technology" without using the term "Bitcoin" due to its various connotations.

Colored Coins

A Colored Coin is an idea of "earmarking" particular outputs of a given Transaction and assigning some extrinsic value to them, usually representing some real world assets or currencies. This is the most basic implementation of a Crypto 2.0 system, allowing simple Blockchains such as Bitcoin to track non-native currencies.

There are specific rules governing how a perticular implementation of Colored Coins handles transaction mixing and other related features.

CryptoCurrency

A CryptoCurrency is a cryptographically secured currency. The authorisation of transfers of CryptoCurrency between Addresses is handled either by public-key cryptography, or Smart Contracts.

Most Blockchain projects contain at least one form of Native CryptoCurrency, often referred to as a Coin or a Token. Bitcoin the project is used to transact in bitcoin the currency, Litecoin - litecoins, etc. Some projects have multiple native tokens (such as Factom with its Factoids and EntryCredits), while a few projects (usually Permissioned Blockchains) have none (such as Hyperledger or Eris).

Some Blockchain projects, sometimes referred to as "Crypto 2.0", can also support user-created CryptoCurrencies. Those usually take a form of an IOU for a real-world asset, such as BitstampUSD on Ripple, or TetherUSD on Omni. A few projects also create currencies based on derivatives from the Native Tokens, such as BitUSD. Some of the Crypto 2.0 projects that support Smart Contract allow for complex script to manage how the currency behaves.

Decentralized Autonomous Organizations

A Decentralized Autonomous Organization (or DAO) is a computer software that is able to manage money without being reliant on third parties. They usually take a form of an automated Smart Contract, but the definition can also include some Blockchain Projects as a whole, such as BitShares.

DAOs are created with a set of rules governing how it will handle its money (usually in a form of the Native Cryptocurrency). Once put in place those rules are usually immutable.

DAOs can exist in a legal gray area due to their distributed nature. One of the first concepts for a DAO is that of a decentralized casino. While operating an online casino might be illegal in some jurisdictions, it is hard to say whether a DAO casino is legal or not.

The most well-known example of a DAO was called "The DAO".

Distributed Ledger Technology

Distributed Ledger Technology is a term used to describe a superset of the Blockchain Technology and ledgerless crypto suites (such as Corda or Open Transactions).

The term is relatively new as of February 2017 and it may be seen as a way for governments and big companies to further move away from the terms "Bitcoin" and "Blockchain".

Fork

There are multiple different concepts in the Blockchain space that are referred to as "forks".

The simplest Fork is a Repository Fork - a term originating from software development where a developer copies a repository of a given project to create their own version of the software. This is most often used to create Altcoins - most of them are Forks of the Bitcoin repository, or other forked repositories.

Another type of Fork is a Blockchain Fork. It is an event in which there are multiple competing blocks of the same height. Those Forks may occur naturally due to multiple Miners creating a Block each at a similar time, or they can be malicious, for example - a result of a 51% Attack.

The last type of Fork is a Blockchain Fork caused by changes in the software operating the Blockchain (such as bitcoind). Those Forks may be incidental (such as the March 2013 Bitcoin fork), or deliberate (Ethereum's DAO fork). The latter are generally split into two kinds - Soft Forks and Hard Forks.

Soft Forks are less invasive and mainly require the Miners to upgrade their software. Old software will still recognize new blocks created after the Soft Fork as valid. An example of a Soft Fork could be the bugfix for Value Overflow Incident.

Hard Forks are more invasive and require everyone to upgrade their software. Old software will not recognize new blocks or transactions as valid after the Hard Fork. The Ethereum DAO Fork is perhaps the most famous example of a Hard Fork.

Contentious Hard Forks can sometimes lead to network splits, where a part of the network and community decide not to opt into the Forked code and Blockchain, and instead decide to take a different approach. Ethereum Classic is a network split that resulted from the DAO Fork.

Hash

A Hash is a cryptographic digest of a piece of data. Hashes are most often used to refer to a given Transaction or a Block, as each of them would have a unique Hash, and the length of that Hash is short enough to be easy to use.

Most Blockchain Projects use the SHA256 hashing algorithm dominantly, with ocasional use of other algorithms (such as RIPEMD-160 being used by Bitcoin for creating its Addresses).

The Block Hash is also an integral part of the Proof of Work Mining algorithm.

Merkle Tree

Merkle Tree is a tree build out of Hashes. Each node in the tree is a hash of its child nodes. The final hash in the Merkle Tree is called a Merkle Root.

Merkle Trees are used to create a single Hash that represents a collection of Hashes. It can be used in Simplified Payment Verification or Proof of Existence to prove a given Transaction was part of a Block by specifying only log2(n) hashes, rather than n hashes it would take to list all of the Transaction Hashes. SPV is an important part of Light Nodes / Wallets.

Miner

Miner is an entity involved in the Mining process of a Proof of Work Blockchain, such as Bitcoin. Other Block generation schemas use different terminology for similar functions - Validators, Farmers, etc.

The term Miner can refer to:
  • The machine doing the computations
  • The business owner running said machines
  • Less frequently, to the piece of software performing the computations
Miners often use Mining Pools to pool their computation resources and create Blocks together to reduce the variance of their income.

Mining

Mining is the process by which Miners create a Proof of Work Block in Blockchains such as Bitcoin. It is a process of iterating through many possible Blocks (often iterating using the Nonce) until the Block satisfied the PoW criteria. This involves the Hash of the Block being a number smaller than the Target for a given block (see: Difficulty).

The Miners are rewarded for creating a valid Block by the Block Reward and any Fees spent by Transactions included in the Block.

There are also a handful of minor activities similar to Block Mining that serve a different purpose. As Addresses are essentially random numbers, some people iterate over them in a process of Vanity Address Mining to create a desirable looking Address (similar to vanity plates for cars). One can also mine for different Transaction Hashes, but it's a fringe activity used only in special cases.

Node

A Node is a computer running the specialized software used to communicate directly with a Blockchain Network. A Node is often a Wallet, but it doesn't need to be.

Generally, there are two types of Nodes - a Full Node and a Light Node.

A Full Node downloads and stores all of the Blockchain information. It can provide the data to other Nodes in the network as needed. Distributed Blockchain Networks require a web of Full Nodes to be operating at all times to maintain the network.

A Light Node only downloads the core data it needs to validate the current Blockchain status (most often - Block Headers) and any information relating to the Addresses it cares about. It has a much lower memory and network footprint than a Full Node, but it cannot provide all of the information a Full Node might. A set of Full Nodes is till required to maintain the network.

Nonce

A nonce is a random number used to easily create a different input. It is most notably used in a Block Header to create a different Block Hash without changing any important information stored in a Block. This is most often used in Proof of Work Blockchains that need to iterate over many block hashes. Due to the avalanche effect, changing even a single bit in the nonce creates a completely different Hash.

Permissioned Blockchain

A Permissioned Blockchain is a Blockchain Project that restricts access to its Blockchain in some way to the users. It could require user authentication before they can connect their nodes to the network, or even download their Clients.

In constract, Permissionless Blockchains, such as Bitcoin, are inclusive by nature, allowing anyone to join and transact on the network.

Permissioned Blockchains are still in early phases of adoption as of February 2017. For their time being, their target market consists of banks, governments and other large entities that want to exert some form of control over their Blockchain network. This could be done due to regulatory, KYC or other reasons.

Some Permissionless Blockchains do offer some features for their users to restrict access to some of their financial assets. Ripple allows explicit white- and blacklists of Addresses, while Smart Contract scripts give even finer control over how a given asset can be used.

Proof of Existence

Proof of Existence is a cryptographics-based proof that a given piece of data existed, unchanged, at a given point in time. It can be used as a replacement for a notary service.

Proof of Existence relies on a public Blockchain, such as Bitcoin's. The data in question is hashes and embedded into a Transaction or a Block. Given that a Block contains a timestamp and it is impossible to rewrite old Blocks without invalidating the proceeding Blocks, it is possible to prove the data existed in its current form no later than when that Block was created.

Factom is one Blockchain project that focuses on providing Proof of Existence "as a service". It maintains its own Blockchain that is itself "anchored" into the Bitcoin Blockchain, extending the Proof of Existence to a bigger amount of data.

Proof of Stake

Proof of Stake is an alternative Block creation algorithm to Proof of Work. Instead of relying on a lot of computational power to create a Block, one instead relies on a large supply of Coins. The reasoning behind Proof of Stake is that an attacker trying to subvert the network would be risking a lot of their wealth in the attempt, therefore they would be disincentivised to attack the network to preserve the value of their Coins. Similarly, users with a lot of Coins have a high stake in keeping the Blockchain operating properly to increase the value of their Coins.

Proof of Work

Proof of Work is a Block creation algorithm that uses a Hashing algorithm to ensure predictable Block creation rate. It relies on the fact that a Hash of a Block is essentially a very large random number, and that it takes some computational time to create the Hash. While it might take a fraction of a second to create one Hash, having to create a lot of Hashes takes a significant amount of time and resources.

A valid Block has a Hash smaller than a given Target (see Difficulty). To create a Hash that satisfies that criteria, the Miner needs to compute many potential Hashes until they find a satisfactory one. Since Hashes are essentially random numbers, it is easy to approximate how many times one would need to compute a Hash to get one that is small enough.

As more Miners join the network with more powerful Mining machines, they naturally can compute more Hashes in the same amount of time. The Proof of Work algorithms are designed to handle that by making it harder to compute a valid Hash by lowering the Target more and more. If the Miners leave the network and the available computational power decreases, the Target increases to maintain the Block creation speed.

Another important design of the Proof of Work algorithm is that it takes a lot of computational power to create a valid Hash, but very little to verify it (one needs to hash the data once).

Proof of Work is used to secure the Blockchain Network from attackers trying to subvert it (they would need to have a lot of spare computing power), as well as to create a fair distribution model for the Coins (Miners are rewarded with newly minted Coin for creating a valid Block).

Smart Contracts

A Smart Contract is a simple computer script that represents an implicit contractual agreement between the parties to transact in the way described by that contract ("Code is Law"). Smart Contracts are an important aspects of such Blockchain Projects like Ethereum. In contrast to traditional legal contracts, Smart Contracts do not need a legal team to enforce them, and once put in place they usually cannot be altered. Smart Contracts can contain functions that can be called by creating a specific Transaction. The code execution is deterministic and is carried out by the Miners.

Smart Contracts may be paired with legal contracts (such as in the case of Corda), but that's rarely the case on most Blockchains.

See also: Decentralized Autonomous Organizations.

Transactions

A Transaction is an atomic operation on the Blockchain. It usually involves transfer of Cryptocurrency between Addresses, but some Blockchain Projects also have non-monetary Transactions (such as invoking a function in a Smart Contract on Ethereum, or setting a trustline in Ripple). Transactions are grouped into Blocks.

In Blockchains like Bitcoin, Transactions specify the Transaction outputs they consume to cover their fees and the outputs they create. There are some Blockchains (like Ripple or Factom) that operate on account-balance model, which keeps a running tally of the funds remaining in an account, so a Transaction doesn't need to specify which outputs they are consuming.

Transactions are authorised by the use of private-public key cryptography. A Transaction spending an output from a given Address is only valid if the private key associated with a given Address has signed the transaction.

Most Blockchain projects contain some special Transaction types. Most common special Transaction type is the Coinbase Transaction. It is the first Transaction of a given Block that credits the Miner newly minted Coins for creating that Block. This Transactions has no Inputs and is not signed by any Address. Coinbase Transactions are both rewards to the Miners and a way to distribute new Coins into the network.

Wallet

A Wallet is a collection of Addresses along with their associated private keys. The term can also refer to the piece of software that manages that Wallet, and the file that stores the data (a Wallet file).

Wallets can take the form of a standalone application (sometimes paired with a Node or a daemon, such as BitcoinQT), a web application (such as Blockchain.info's MyWallet), or be managed by a third party (such as Coinbase).

Access to the private keys is an important aspect of the Wallet design. There are services that host encrypted Wallet files, but don't have access to the keys as the user is encrypting and decrypting the file on their local machine. Other services secure their own keys and manage user's funds akin to a bank.

2017-01-30

Corda and the Distributed Ledger Technology

Recently I became involved with SCC's committee on "Blockchain and electronic distributed ledger technologies". During one of the discussions, I've learned about a new term that seems to have become very popular in the banking industry - "Distributed Ledger Technology" (DLT). Apparently companies like Deloitte or even the UK government have picked up on this new thing and seem to be abuzz with it.

Instantly this reminded me of 2015 when big companies like NASDAQ and Overstock expressed their interest with "the Bitcoin technology", but they didn't want to be associated with "Bitcoin", therefore decided to rename this whole thing as "blockchain technology". Maybe this was just another way for companies to invent a new five dollar word and charge a hefty sum to consult on it?

After doing some research, I couldn't find much on what exactly DLTs were - there doesn't seem to be a concrete definition floating around yet. However, a few people pointed me to one example of an actual implementation of a DLT - Corda. Lucky enough, someone coincidentally decided to organize a meetup about Corda around the time, so I had some good opportunity to learn what it's about.

Corda


Corda is a Distributed Ledger Technology implementation by the R3 consortium. It is open source, comes with a Slack, a whitepaper and all that.

Corda has been created from the grounds-up for the use by banks and other financial institutions, prioritising their needs first. This dictated a few important design choices:

  • Private transactions - transactions in the system are only disclosed to the parties involved. They are not globally broadcast for everyone to verify, instead only circulating in very limited circles as small as two peers.
  • No blockchain - since there is no need to let everyone know about every transaction that took place, there is also no need for a blockchain, be it public or permissioned
  • Legal smart contracts - much like a Ricardian Contract, the smart contracts executed on the Corda network have explicit legal prose attached to them.
  • Optional notaries - if two parties don't trust one another, they can bring in optional notaries to verify various aspects of the transaction (no double-spending, uniqueness of transaction, etc.)

Knowing these features, we can try figuring out what existing cryptocurrency project it resembles most. Looking at this chart comparing various projects in the space (provided funnily enough by Tim Swanson a few years back before he joined R3):

Tim Swanson's "Current Cryptoprotocol Infrastructure" from his "Great Chain of Numbers"

It looks like Corda can fall in only one spot, which is the "Ledgerless Crypto Suite", alongside Open-Transactions. Indeed, the resemblance is quite strong.

The following explanation is based on the "Introduction to Corda" presentation and other materials I managed to come by.

Corda's base building block is a cryptographic transaction. It can be a simple payment, or a more complex smart contract. The transactions specify which inputs they are spending and what outputs they are generating (this works just like Bitcoin and is different from an "account-balance" approach of say, Ripple). Each transaction has a hash of a legal prose attached to it which governs how the transaction should operate. The transaction is then signed by all of the participating parties that agree to execute it - it could only be one entity when it is a simple "send money" transaction, or span multiple parties if it is a more complex swap or financial agreement.

The transaction can also be notarised or verified by third parties as needed. This could be as simple as a server doing a blind signature to verify the transaction is unique, or perhaps the whole transaction could be disclosed to some auditors as needed.

After a transaction is signed, that's about it - every party that knows about the transaction records it in their ledgers and the financial contract is thus binding. There might be some follow-up on the smart contract as it matures or other trigger points execute it, but with no blockchain, block generation or the like, there isn't much else to it.

As it stands, Corda seems to fit in as a common middleware for banks and financial institutions to standardise their interactions with one another, especially in the realm of financial contracts. This puts the project in a similar space to Open Transactions or Interledger, not too far from Ripple or Ethereum.

Corda criticism


Due to its focus on catering to the financial institutions, Corda might be seen as "more of the same", rather than trying to revolutionise the field like Bitcoin. Some people might dismiss it out of principle for not fighting to make the banks more transparent.

A system built on private transactions will be easier to manipulate than a proper blockchain. Unless all of the transactions need to be accounted for by some independent auditor, you loose the option to have "negative proofs". Since the amount of parties involved is so small, they can easily conspire to rewrite or delete the past transactions to suit their present needs. This could be mitigated by using a proof of existence and anchoring the various hashes of transactions into something like Factom.

However, if properly maintained, the system can enforce accountability. While the transactions may not be a part of a blockchain, they do form a transaction chain - every transaction spending the previous output. Having any single transaction signed by the various parties could be used against them - they might be compelled to provide the full, unbroken chain of transactions leading up to that transaction. While this might not uncover all of the transaction branches, there is at least some cryptographic trace of what happened.

Linking the legal prose to the smart contract is also asking for trouble. Even now people can have legal disagreements as to which interpretation should take precedent when you have a contract written in two human languages. Woe to anyone who wishes to mix legal prose with a smart contract. This would either require a new profession of some lawyer-programmer, some sort of legalese language interpreter / compiler, or the smart contract will be just a farce that could be overturned so easily it might not even need to exist.

Corda's presentation seems to indicate the legal prose takes precedent over the code. This might mean that there would need to either be some backdoor for third parties to overwrite or amend the contract, or the parties involved would have to work around the code to achieve settlement in the end. All in all, this can lead to a lot of mess in the code down the line. Some might prefer the approach of "code is law", but then we have the story of the DAO as a cautionary tale.

Moreover, the contracts dealing with international law and regulations would be even more complicated. This could lead to fewer transactions taking place between various jurisdictions to avoid the legal hassle.

Beyond that, Corda seems to rely on a few known key actors common to the Crypto 2.0 space. Lack of native currency means the system will need gateways to issue assets. Some design documents mention Smart Oracles, etc.

Distributed Ledger Technologies


Based on the example of Corda and Open Transactions, we can try drawing some conclusions of what the Distributed Ledger Technologies might be as a general term.

  • The technology seems to be focused more on transactions and less on grouping them into blocks.
  • With the absence of blocks, we necessarily have to do away with any form of distributed, native currency - there is no way for that currency to be objectively generated. The system instead uses IOUs for currencies and assets.
  • The system relies on a number of key nodes / entities to operate - auditors, validators, legal authorities, banks, etc. This means the system would be at best "decentralised"
  • Cryptography is still used to authorise various transactions and move the money around.

Conclusions



Distributed Ledger Technologies seem to sound more impressive than they are in reality. Some have proposed to use this term to refer to things like Corda as well as the existing Blockchain Technologies, but it seems to be mostly an unnecessary buzzword. The existing DLTs are not really distributed, but decentralised. The word "ledger" correlates more closely to a block of transactions than what we have in Open Transactions (where you can discard old transactions as they are not needed once they are confirmed spent). So perhaps a more accurate term would be "decentralised set of transactions"? DSoTs? DSoTTs if you want to include "technology" at the end as well...

2017-01-02

Ideas for Reddit moderation improvements

Awhile back the /r/Bitcoin community got upset over Coinbase CEO talking with Reddit CEO about /r/Bitcoin's moderation and the possibility of removing the moderators of the subreddit. It has been a few months and luckily not much has come of it. However, this got me thinking about how we could improve the moderation of the subreddit, or at least what different approaches could be taken.

None of the points mentioned are meant to be an attack on anyone - thy are merely ideas worth considering in probably many communities, not just ours.

This can be viewed as a continuation from the "On /r/Bitcoin moderation - three years in review" blog post.

Head moderator responsibilities


Everyone has different approaches to moderation. Personally, I find myself starting with a lot of enthusiasm early on and later petering out over time as more people join the team and are able to take on the responsibilities. Being the second moderator on /r/Bitcoin for a long awhile and facing the community backlash at our top moderator gave me an opportunity to think about how I would run things. While this might not be an ideal solution for everyone, here is the approach I might take - focus on being the moderator of moderators and an arbitrator between them, rather than dictating the direction of the subreddit.

My personal approach is that everyone makes mistakes - moderators are no different and I'm no different. The best approach to take is to fill the moderator positions with people that aim to support the community and see it grow. Most importantly, however, those people should be open to discussing and challenging views held by themselves and other moderators as needed. One person might make a mistake, but if five people agree on something, it is less likely to be a mistake. If someone disagrees, it is important that they express their reasoning and let their peers come to a conclusion whether something needs to change or not. Many of the /r/Bitcoin moderators, both past and present luckily are able and do voice their opinions even if it's not in line with the current rules.

Being the top moderator on Reddit gives one the power to control everything in the given community, but in my opinion that power should be used very rarely. Ideally, the top moderator of the subreddit would perhaps only step in if the other moderators are acting against the community and need to be removed. This could mitigate the use of moderation to push one's agenda - if the top moderator doesn't actively moderate, they can't change much to suit their agenda. Other moderators know that if they usurp the community, they will be removed. Thus some balance of power could be reached for the betterment of the community, provided the top moderator could be trusted.

Anonymous discussions


At times the moderators might need to discuss some matter anonymously. Perhaps it would be an issue of removing a certain mod or other controversial topic. Unfortunately, Reddit doesn't leave many options for anonymizing one's conversations while still being certain you're talking with the same group of people. However, here is a simple solution to this problem:

Every moderator would create a random account. They would message someone saying they are a mod, but not reveal their original identity. That person would gather the list of all accounts that messaged them and present the list to the moderation group. Everyone would then acknowledge that the account they created is indeed on that list (without disclosing which account it is). If everyone acknowledges their account being present and the numbers match, you have a list of anonymous account that can be used to discuss anything without worrying about negative repercussions to your other account.

Mod removals


Having the anonymous discussions, it becomes much easier to discuss the removal of fellow moderators in an objective manner. You might want to call someone out on some actions they have taken or their general behaviour and see how other mods feel about the situation without becoming "that guy".

One of the responsibilities for the head mod would be to make sure the proper mods are removed (in case say, they are the second most senior mod that nobody else can remove). But perhaps the biggest mark of greatness for the top mod would be recognising if the community and other mods would not want them to continue at their position and step down like a true Roman Dictator, having put the power in the hands of the next worthy person chosen by the community and the moderators.

Community oversight


Another topic I've heard mentioned a few times comes in the form of insight into moderation logs. While those could probably be disclosed fully, they rarely tell the whole story - a good deal of moderation happens over modmail, which sometimes needs to remain private. It might be good practice to perhaps appoint a few representatives of the community to oversee the moderation process without being full moderators themselves. They would have insight into modmail and moderation logs, but shouldn't be acting as a full moderator. This could reassure some people that the mods aren't conspiring against someone or some company in particular, and it would also provide a good pool of candidates to pick from in case the moderation pool needs to be expanded.

Talking with the community


Communication with the community is important. Whether it's announcing policy changes or just having a general talk once a month, it might be useful to reach out to the community and hear what they have to say. This could boost the community's confidence in the moderators, help address some issues early on and hopefully make the relationships between mods and redditors better than what it sometimes becomes.

Conclusions


Those are some of my thoughts on how moderation in Reddit as a whole could be improved, or at least how I would try to improve it given the chance.

2016-11-07

OneCoin round 2 - it's all about the "family" and merchants

The saga of OneCoin continues. We've talked about the issues they might be running into with using big numbers for their currency, how market cap or coin supply is essentially meaningless, and now let's analyse the actual OneLife Mastermind Bangkok Event.

What was the event about?


Looking at the three hour long video of the event, there is a lot to cover. All of it strikes an uncanny resemblance to a Multilevel Marketing event:


We have a lot of pomp, a lot of hype, bragging, talking about how everyone is forming a giant "family" and asking them to start buying and peddling the newest product - merchant applications. There is a lot of small pieces of information here and there on how they envision their system working, and a lot of it raises red flags.

The event certainly packed a lot of showmanship - live musical performances, important sounding speakers and so on. I've been to a few cryptocurrency conferences already, and they are completely different - you hear a lot about the technology, new developments, etc., and there is a lot less cult of personality.

Merchant program


One of the more important but overlooked parts of the event was the news about OneCoin's new merchant program. There are two new packages being sold - one for $1000 that comes with one whitelabel application, and a $5500 one that comes with seven applications. OneCoin expects its members to purchase those applications and sign up merchants, giving them those applications. Their goal is to reach one million merchants in the coming years. With the merchant adoption, the coin is supposed to gain liquidity and value.

Why should the merchants join? To gain access to OneCoin's "family" and the network, and they incur no cost for the first year. The coin should be "very stable" and merchants "should prefer it to PayPal, Visa, Mastercard".

So yes, the merchant program is as they say "free", and by free, they mean it costs $1000 to the person that signs up the merchant. So the marketing and on-boarding the merchants falls on the coin users that also get to pay for the privilege. But at least you will finally have some place to spend your OneCoins, right?

Well, not quite. The merchants will be able to specify how many OneCoins they will be accepting. They can choose to accept, say, 20% of the payment in OneCoin and 80% from the user's Credit Card (conveniently connected to the account already). This implies that OneCoin doesn't even do the most basic thing that every Bitcoin payment processor does - sell the coins for the merchant and pay them in fiat.

So let's compare that to say, BitPay, one of Bitcoin's oldest payment processors. It allows you to sign up for free, it's free to use for some small volume transactions, or it costs the merchant 1% otherwise. You can accept Bitcoin for 100% of the purchase and you get all of your money in whatever form you want - BTC, wire, etc. For OneCoin, you need to have someone else pay $1000 for the application, sign you up, then you specify how much OneCoins you will be accepting for every transaction, then you have to figure out how to cash those out (without a real exchange yet), and you might be charged something after a year of using it.

So yeah, it doesn't look good - more like a barely serviceable product that you want your current members to buy and convince people to use to make their coin accepted somewhere and thus gain value. It's a good MLM strategy, but terrible usability strategy.

Other things


We've already covered the coin doubling event, so there isn't much more to cover in that regard. It's silly, watching people get excited for a 100% increase in coin supply without an increase in coin's value. So instead, here is a list of various pieces of information that were stated thorough the event:

  • There have been 14 million accounts created, with 2.5M active distributors
  • The price of the coin was 50 eurocents, now it is 9 euros, and they aim to get to 25 euros
  • OneCoin is launching some social media website called OneSaito, which will feature Groupon-like discounts. So it's like 2010
  • "To make sure we continue to produce coins, we need tokens, and tokens come from product packages"
  • They want to achieve critical mass in a year's time
  • "We will eventually move to the next stage when what we're doing will become self-evident" - do they mean people will catch on to the MLM structure?
  • "We don't want to create idiots"
  • "Any one of you could've launched Pokemon Go"
  • Whoever maxes out their 35k Euro contribution on the day of the event will have the opportunity to max out another 35k Euro contribution the following day
  • "So guys in Sofia, if you don't switch it on, we'll come for you and kill you, yeah? Always good to motivate the office too..."
  • OneCoin will be going into the remittance business (so they're joining the Bitcoin hype from a few years ago that has already been explored by 19+ companies?)
  • OneCoin will be going public in Q2 2018
  • OneLife has created 350 millionaires in its history. There were 450 diamonds in the event
  • OneCoin is a special network, because it acts "like a family"

Conclusions


OneCoin is quite obviously a MLM pyramid scheme. Quite brilliant actually - instead of peddling products people have to start storing in their garages and try to sell to other people, they are selling a "crypto" currency and telling everyone to buy as much as they can to raise it's value. They have virtually no production costs, therefore every dollar spend is essentially profit. Instead of investing that money into development of some actual products, like exchanges, payment processors, etc., they just get people to buy into the scheme more and more, to promote the coin further to drive the sales.

The most symbolic part of the event came in around 2:35. The speakers talk about celebrating OneCoin's second birthday with a cake, "the largest cake ever" - OneCoinCake. 2x2 meters in diameter. Unfortunately, since there were 11500 people in the audience during the event, "not everyone will get to taste the cake". This is perhaps a good analogy to how OneCoin works - everyone pays for the cake, you make a large cake, and the elites will stuff themselves while everyone else will only get to admire the cake from afar...

Related links: