Understanding Amoveo Prediction Markets

Tallak Tveide
7 min readAug 24, 2018

--

Amoveo is a brand new blockchain project created by Zack Hess. It is designed for prediction markets and financial derivatives. In this blog post, I am going to describe how a simple binary prediction market works in Amoveo.

A binary prediction market is a market where users can bet on a question that may resolve to either “true” or “false”, or possibly also a “bad question”. We’ll ignore the last option for now. The question will only be answerable some time in the future. An example of an open market right now is (as per August 2018):

The price of Bitcoin (BTC) exceed $7500 (USD) according to coinmarketcap at midnight UTC on January 1st, 2019

The prediction aspect of this is, that once people start betting, you will see what these people think the odds are of this happening. By looking at unmatched bets in the order book (more on this later) you will know if this is probable to become true or not. You can read more about “The Wisdom of the Crowd” at Wikipedia.

The cool thing about such markets, is that if circumstances change while the market is open, new orders will be placed to match the circumstances in real time. For example, assume the price of bitcoin suddenly surges. People start placing bets that the above question will be true, while unmatched bets stating that this will be false are met by people wanting to get “free money” by betting with good odds.

So the state of the market will give an indication of what people think about stuff. This tells a participant in the market a price or the odds for placing bets while the market is running at any time. There is a catch though. Participants in the market need to know that all matched orders will be resolved with correct facts some time in the future. This is what the oracle is for.

The oracle is like a market, but it happens after the facts have been fixed. For the question above, it can only be answered after January 1st, 2019. The oracle is like a market, except at this point it does not make sense to place bets for a known falsehood. If you do this, you are sure that someone will match your bet in the oracle and collect free money. The oracle is different from the prediction market though, because a person of wealth could buy the truth by spending more than people telling the truth, and potentially making money as a side effect. If someone tries to do this, Nakamoto concensus (forking Amoveo) is used as a plan B, as Amoveo blockchain can only have value if the oracles are reporting the truth. A fork of Amoveo containing an untrue oracle will not have value for miners. How the oracle bets are placed is an example of design for being “cryptoeconomically secure”, and this is a guiding principle for Amoveo. Breaking the rules is possible, but you will lose money in the long run. All oracle transactions are done on chain. The oracle must be created before the markets can reference it, and then resolves after the market has closed.

We don’t expect people to make money or have much direct interest in oracles. They are not so interesting by themselves. Think of them as a mechanism to find the truth after it is evident, and that they are secured somehow.

To take part in an Amoveo market, you start out by making a “Turing Complete State Channel” on the server that is hosting the market. This state channel is not on the blockchain and is shared only by you and the market maker (running on the server). Both parties put money in the state channel, making it “cryptoeconomically secure”. The only way for the server to reclaim it’s deposit is to go through with any smart contracts residing in the state channel. Neither party can steal the other parties’ money, protected by smart contracts running in the channel. If any parties diconnect from the channel, it’s contents may be submitted to the blockchain for arbiting.

Once the mVEO (the Amoveo unit of currency) has been put in the state channel, you may start placing bets in a market. The Amoveo light wallet will show a picture looking something like this:

First some basics about markets; orders match at Amoveo blockchain blocks. This market will expire at block 30100. Every block is 10 minutes on average, so you need to bring out your calculator to know what this means in terms of days and hours. All transactions are stored in the state channel, nothing in the blockchain.

The oracle will resolve probably much later. The market and oracle are two separate things, and the market depends on the oracle. The oracle name may be used to interact with it separately.

The market has sales orders and buy orders for placing bets. Whenever these overlap (agreeing on a price), these are matched and taken off the chart. This process happens in batches. For this particular market, the batch period is 40 blocks. As the last batch resolved at block 29510, the next batch will resolve on block 29550.

The batches are a way to prevent front running. Another way of putting this is that a bot would not have much of an advantage over humans in this market because of being able to react to changes faster.

Bets on “true” are shown in yellow and bets in gray are for “false”.

The Y axis is cumulative mVEO volume, while the X axis is the price. The chart resembles a spread plot as you may have seen when trading currencies on an exchange. But it is different.

The volume on the Y axis is the cumulative volume of open bet orders, after they have been matched. It does not show the value of the orders themselves, but rather the price of the order plus any order that may match it in the future. In the chart, there are “false” bets at value 1040 mVEO at price 20, and another 800+ mVEO at price 40.

You might feel like going into a lot of detail understanding the unmatched orders to place exact opposite orders to match them. But, remember the bids are batched, so another user may get there before you. So in Amoveo, it is maybe better to place a bet at the price you think is correct, then wait for the next batch to resolve, rather than matching open orders.

The price on the X axis requires some deep thought to understand fully. We are placing bets representing how likely you thing a certain outcome of the market is. The price represents your odds.

People have many ways of expressing odds. I personally favor decimal odds that work like this; given a decimal odds of 1.50, if you bet 1 mVEO and win, you will get 1.50 mVEO back. The profit of such a bet is 0.5 mVEO. A bet with odds 4.00 will return you 4 mVEO, 3 mVEO being the profit.

Fortunately going from Amoveo price to decimal odds is simple (for the yellow “true” bets at least):

odds = 100 / price

As you can see on the chart, the odds if someone were to place a bet for “true” at price 20, the odds are a staggering 5.00. This is because the “true” outcome is probably unlikely for this market.

To calculate the price and odds for a “false” bet, understand that the price of “true” and “false” bets must add up to 100. So if a participant wanted to bet “false” and match the open yellow order, that person would have to bet at price (100–25) = 75, or an odds of 1.5. The volume of the yellow order is ~700 mVEO, so the value of that “false” bet would have to be 700*75/100=525 mVEO. The person placing the yellow bet only paid 175 mVEO but at a lower price. The two bets, when matched, add up to 700. Both users will receive 700 mVEO worth of shares in either “true” or “false” outcomes.

How orders are matched in Amoveo binary markets. The person betting at lower odds pays a larger share of the total amount matched. The matched orders represent 700 mVEO worth of shares in true and false.

So far so good. Now we just have to wait for out bets to resolve in the oracle right?

After a while, an outside event happens that makes the above question more likely to resolve to ‘true’ when it was previously priced as likely ‘false’. People start matching the standing orders en masse, and placing new open orders. After a while the yellow part of the chart is the bigger one, and the price meets at, say, 70.

You don’t have to wait for the oracle to resolve to collect your winnings. If you had 700 mVEO worth of “true” shares, you can buy 700 mVEO worth of ‘false’ shares at a price 700*30/100=210 mVEO. Such a buy order will cancel out your previous shares, and the profit of 490 mVEO is transferred to your state channel. To summarize you bought “true” shares for 140 mVEO and sold them for 490 mVEO, gaining 350 mVEO in the process.

Exiting a market before the oracle resolves

Thats it for now folks. Hope this was both understandable and interesting, and a taster for what the Amoveo blockchain has to offer. You can find more markets at veoscan.io and amoveobook.com

--

--