Knowledge Base

Decentralized Exchange

Wikipedia Entry

Decentralized exchange

A decentralized exchange (DEX) is a cryptocurrency exchange which operates in a decentralized way, i.e., without a central authority. Decentralized exchanges allow peer-to-peer trading of cryptocurrencies.[1]

Ledger login on Switcheo Exchange

Because users do not need to transfer their assets to the exchange, decentralized exchanges reduce the risk of theft from hacking of exchanges.[2][3] Decentralized exchanges can also prevent price manipulation or faked trading volume through wash trading, and are more anonymous than exchanges which implement know your customer requirements.

There are some signs that decentralized exchanges have been suffering from low trading volumes and market liquidity.[1] The 0x project, a protocol for building decentralized exchanges with interchangeable liquidity attempts to solve this issue.[4]


Due to a lack of KYC process, and no way to revert a transaction, users are at a loss if they are ever hacked for their passwords or private keys.[5]

Degrees of Decentralization

A decentralized exchange can still have centralized components, whereby some control of the exchange is still in the hands of a central authority. A notable example being IDEX blocking New York State users from placing orders on the platform.[6]

In July 2018, decentralized exchange Bancor was reportedly hacked and suffered a loss of $13.5M USD in assets before freezing funds.[7] In a Tweet, Charlie Lee, the creator of Litecoin spoke out and claimed an exchange cannot be decentralized if it can lose or freeze customer funds.[8]

Operators of decentralized exchanges can face legal consequences from government regulators. One example being the founder of EtherDelta, who in November 2018 settled charges with the U.S. Securities and Exchange Commission over operating an unregistered securities exchange.[9]


  1. ^ a b Russolillo, Steven; Jeong, Eun-Young (2018-07-16). "Cryptocurrency Exchanges Are Getting Hacked Because It's Easy". Wall Street Journal. ISSN 0099-9660. Retrieved 2018-09-11.
  2. ^ Sandle, Tim (2018-09-09). "Big investment in cryptocurrency startup". Digital Journal. Retrieved 2018-09-11.
  3. ^ Castellanos, Sara (2018-03-06). "Alexis Ohanian's VC Firm Invests in Crypto Trading Platform". Wall Street Journal. ISSN 0099-9660. Retrieved 2018-09-11.
  4. ^ "0x lets any app be the Craigslist of cryptocurrency". TechCrunch. Retrieved 2018-11-24.
  5. ^ "Bloomberg - Record Crypto Heist Raises the Appeal of a New Type of Exchange". Retrieved 2018-11-17.
  6. ^ @Aurora_dao (23 Oct 2018). "#IDEX will begin blocking new orders from users with New York State IP addresses on Thursday, October 25th (6pm UTC). Cancels and withdrawals will remain active" (Tweet) – via Twitter.
  7. ^ Osborne, Charlie. "Another hack rocks cryptocurrency trading: Bancor loses $13.5 million". ZDNet. Retrieved 2018-12-13.
  8. ^ "The crypto world's latest hack sees Bancor lose $23.5M". TechCrunch. Retrieved 2018-12-13.
  9. ^ "SEC, EtherDelta founder settle charges over operating unregistered exchange". Reuters. Retrieved 2018-06-05.

Deterministic Algorithm

Deterministic algorithm

In computer science, a deterministic algorithm is an algorithm which, given a particular input, will always produce the same output, with the underlying machine always passing through the same sequence of states. Deterministic algorithms are by far the most studied and familiar kind of algorithm, as well as one of the most practical, since they can be run on real machines efficiently.

Formally, a deterministic algorithm computes a mathematical function; a function has a unique value for any input in its domain, and the algorithm is a process that produces this particular value as output.

Formal definition

Deterministic algorithms can be defined in terms of a state machine: a state describes what a machine is doing at a particular instant in time. State machines pass in a discrete manner from one state to another. Just after we enter the input, the machine is in its initial state or start state. If the machine is deterministic, this means that from this point onwards, its current state determines what its next state will be; its course through the set of states is predetermined. Note that a machine can be deterministic and still never stop or finish, and therefore fail to deliver a result.

Examples of particular abstract machines which are deterministic include the deterministic Turing machine and deterministic finite automaton.

What makes algorithms non-deterministic?

A variety of factors can cause an algorithm to behave in a way which is not deterministic, or non-deterministic:

  • If it uses external state other than the input, such as user input, a global variable, a hardware timer value, a random value, or stored disk data.
  • If it operates in a way that is timing-sensitive, for example if it has multiple processors writing to the same data at the same time. In this case, the precise order in which each processor writes its data will affect the result.
  • If a hardware error causes its state to change in an unexpected way.

Although real programs are rarely purely deterministic, it is easier for humans as well as other programs to reason about programs that are. For this reason, most programming languages and especially functional programming languages make an effort to prevent the above events from happening except under controlled conditions.

The prevalence of multi-core processors has resulted in a surge of interest in determinism in parallel programming and challenges of non-determinism have been well documented.[1][2] A number of tools to help deal with the challenges have been proposed[3][4][5][6] to deal with deadlocks and race conditions.

Disadvantages of Determinism

It is advantageous, in some cases, for a program to exhibit nondeterministic behavior. The behavior of a card shuffling program used in a game of blackjack, for example, should not be predictable by players — even if the source code of the program is visible. The use of a pseudorandom number generator is often not sufficient to ensure that players are unable to predict the outcome of a shuffle. A clever gambler might guess precisely the numbers the generator will choose and so determine the entire contents of the deck ahead of time, allowing him to cheat; for example, the Software Security Group at Reliable Software Technologies was able to do this for an implementation of Texas Hold 'em Poker that is distributed by ASF Software, Inc, allowing them to consistently predict the outcome of hands ahead of time.[7] These problems can be avoided, in part, through the use of a cryptographically secure pseudo-random number generator, but it is still necessary for an unpredictable random seed to be used to initialize the generator. For this purpose a source of nondeterminism is required, such as that provided by a hardware random number generator.

Note that a negative answer to the P=NP problem would not imply that programs with nondeterministic output are theoretically more powerful than those with deterministic output. The complexity class NP (complexity) can be defined without any reference to nondeterminism using the verifier-based definition.

Determinism categories in languages


This logic-functional programming language establish different determinism categories for predicate modes as explained in the ref.[8][9]


Haskell provides several mechanisms:

non-determinism or notion of Fail
  • the Maybe and Either types include the notion of success in the result.
  • the fail method of the class Monad, may be used to signal fail as exception.
  • the Maybe monad and MaybeT monad transformer provide for failed computations (stop the computation sequence and return Nothing)[10]
determinism/non-det with multiple solutions
you may retrieve all possible outcomes of a multiple result computation, by wrapping its result type in a MonadPlus monad. (its method mzero makes an outcome fail and mplus collects the successful results).[11]

ML family and derived languages

As seen in Standard ML, OCaml and Scala

  • The option type includes the notion of success.


  • The null reference value may represent an unsuccessful (out-of-domain) result.


  1. ^ Edward A. Lee. "The Problem with Threads" (PDF). Retrieved 2009-05-29.
  2. ^ Bocchino Jr., Robert L.; Adve, Vikram S.; Adve, Sarita V.; Snir, Marc (2009). Parallel Programming Must Be Deterministic by Default. USENIX Workshop on Hot Topics in Parallelism.
  3. ^ "Intel Parallel Inspector Thread Checker". Retrieved 2009-05-29.
  4. ^ Yuan Lin. "Data Race and Deadlock Detection with Sun Studio Thread Analyzer" (PDF). Retrieved 2009-05-29.
  5. ^ Intel. "Intel Parallel Inspector". Retrieved 2009-05-29.
  6. ^ David Worthington. "Intel addresses development life cycle with Parallel Studio". Archived from the original on 2009-05-28. Retrieved 2009-05-26.
  7. ^ Gary McGraw and John Viega. Make your software behave: Playing the numbers: How to cheat in online gambling.
  8. ^ "Determinism categories in the Mercury programming language". Archived from the original on 2012-07-03. Retrieved 2013-02-23.
  9. ^ "Mercury predicate modes". Archived from the original on 2012-07-03. Retrieved 2013-02-25.
  10. ^ Representing failure using the Maybe monad
  11. ^ The class MonadPlus


Discovery is a key value store currently run by Skycoin, that messaging clients as well as servers use to advertise themselves to other clients. It allows clients to connect to messenger servers. These in turn act as relays between clients so they can exchange data (messages) over TCP/IP and allows a stable way of communication between nodes. (Enables routing)