A Brief History of Synereo
4 stars based on
I am going to assume the reader is a software developer who's interested in programmable blockchains. If you feel confused by smart contracts etc, go read Programmable Blockchains in Context by Vinay Gupta, who explains them far better than I monadic design patterns for the blockchain I would like to propose that blockchains are a network concurrency primitive, like the two-phase commit or distributed hash-tables. That modern Turing-Complete chains, like Ethereum, are simply Erlang or Smalltalk-style virtual machines, and that their blockchain nature is orthogonal to their VM nature.
This makes blockchain's future simply a part although a vital one of the widening adoption of decentralized computing. Networked computer games are not entirely dissimilar the usual international derivatives and securities trading examples used to promote blockchain: In formal terms, StarCraft is a function over all possible moves and game states which maps to the resulting game state.
Monadic design patterns for the blockchain we only want to play a single-player game, it isn't important that this procedure is a pure-function. It is fine if the game states returned from an identical starting point are slightly different each time, maybe because different random numbers were used monadic design patterns for the blockchain some small difference in CPU architecture.
Provided the result is reasonable I can still enjoy the game. Generally game developers choose the second. The moves are fewer bytes than the game state. Less data, less bandwidth, less lag, more frames-per-second, happy gamers. Happy gamers pay premium prices for enjoyable games from quality game monadic design patterns for the blockchain who then bid a premium for the best network developers. Computer games run as specialised virtual machines managing the interaction of their "pieces" [bullets, players, Zerg The challenges in this for game developers are beautifully laid out by Spencer Nielsen.
We might imagine a particularly well-governed online game where each XBox hashes and signs the calculated game state, creating a cryptographically secure log held in common between the participant XBoxes. Obviously no-one would build this, but he point I want to make is that the key to efficient distributed data structures is determinism. The defining factors in a distributed data structure are determinism and feedback.
If the output of a transition is not an input of the next, then there is no persistence of data. If the transitions cannot be computed independently of any particular environment, then we cannot distribute the structure in any meaningful way.
I would suggest that on this basis, we can only build usable generic networking primitives within a functional programming paradigm. Hidden state allows unmanaged indeterminism which prevents us from slotting in new network logic in practice. With this restriction, we can start to think of The Blockchain cue heavenly choirs - or hash-chains used since the 90s - as box carts on a railway.
We write our logic, decide some of the structures need to be globally shared between all our clients and then we can pick the appropriate distributed network "rails" to load them onto. This is also a widely used description of monads. Within the functional programming community there is a strong tradition of cross-compiling into different environments.
Two good examples from F are MBrace [seamlessly execute expensive calculations on cloud servers] and Brahma. In both cases, we are taking well-defined logic, transcribing it to a different set of low-level instructions and pushing it into a different execution context. We are free to switch the "computing substrate" for performance or governance reasons without worrying about re-writing. Obviously there are limits, many operations are very slow on graphics cards, hauling gigabytes of data to and from a cloud environment is awkward, etc.
But the most widely deployed functional language is not F. And Erlang is fascinating. Developed in Sweden at Ericsson in the 90s, Erlang was designed to run telephone switch fabrics. Magdalena, why half of Kista without phones? Oh that's just young Krister fumbling his pointer arithmetic again. How long take to fix now that Olov is parental leaving this year? You get monadic design patterns for the blockchain idea. Decades of real-life industrial use in critical systems has given Erlang a rich set of networking and concurrency primitives.
All of them built from the basic Erlang entity of a process. The Erlang process model is an implementation of the Actor -model of distributed computing. As Erlang is a functional language, every process is simply a recursive function over the process state and its message queue. This is functionally equivalent to the Ethereum blockchain's concept of a smart contract. It's all just actors. Ethereum should really call them something else.
I would suggest that where a compilation to Ethereum-like VM instructions exists, any actor system can be simply be transpiled into "the blockchain". By simply, I mean subject to various arbitrary restrictions but hopefully ones that can be type-checked.
Which is interesting, since this implies that we can lift concepts for hot-swappable code, fault-tolerant supervisors, etc directly from Erlang's world into "the blockchain". Or for that matter, that we could take an actor and choose to 'blockchain it' or run it on a central server with a DocChain time-stamping service to prove integrity, or let multiple nodes vote monadic design patterns for the blockchain the next state, or assign a master node in cluster then use a hash-chain to integrity check it and then, etc etc.
And this is the way I think we will need to go as an industry. Even if a full functional development is too great a leap, I can't see blockchains taking off without at least the same degree of language-level interop as say, Google's Protocol Buffers. It would require an Android developer to be able to define an interface, generate the Java client stubs and then fill in the, for ex. Solidity [Ethereum's main higher-level language], code required to implement the distributed networking functionality.
Now, by formal programming norms, Erlang's actor model is actually not that formal or strict. When academics came to include UIs in their pure research languages they came to a paradigm called Functional Reactive Programming. Functional reactive programming [FRP] is for our purposes the actor model with a type system, but without unbounded addresses. In the FR-model, message senders and consumers are attached by strictly typed channels.
Separating data-flows from the "agent" logic simplifies code reuse and it allows us to use compile-time checks to prevent a wider range of errors. All the complexity required to deal with any agent interacting with any other agent is lost.
For more functional programming, try Purely Functional Retrogames. I monadic design patterns for the blockchain unsure how a fully FRP blockchain would work, and I suspect that having unbounded parties spawning Turing-complete entities into a single address-space would not be feasible under strong-typing. But an FR-model could be used to develop the inside of a blockchain application. Those "smart monadic design patterns for the blockchain that were within a single application boundary could be developed in a typed fashion and then compiled to untyped blockchain or other distributed data-structure instructions.
We could even put the try definitions into some sort of repository. An approached user for other difficult to manage languages. Skip to main content. Contracts are Chat Logs. Tokens as Commodities, Not Money. Why so many P2P lending platforms? Monadic design patterns for the blockchain my degree project: Private Blockchains Considered Harmful. Cleanroom Techniques for Office Geeks. Translate Your Java Project to 51 Languages. I did eventually settle in.
Hummus and African Mobile Money. Around the London Finance World in 4 Days. Work w throws 1: Thomas's blog Log in to post comments. Original design by Simple Themes.