Hotmoka and Mokamint are two software products with deep theoretical backgrounds. They are the implementation of theoretical results stemming from scientific research. The subsequent references are either technical tutorials or research papers that can be used to program or to understand the underpinnings of the technology.
This tutorial presents the way Hotmoka can be used for writing, deploying and interacting with smart contracts written in a deterministic subset of Java. It shows how to interact with Hotmoka nodes to send transactions and get their result. It presents such material in a step-by-step approach, as actual exercises that can be followed by the reader.
This article is the original paper that presents the theory behind the use of a subset of Java as a language for writing smart contracts. It discusses how Java objects are kept in the storage of the blockchain, deserialized in memory before a transaction runs and serialized back to storage at the end of the transaction.
This article describes how determinism can be enforced for a subset of Java. The issue is important, since non-deterministic programs would make it impossible to reach consensus in blockchain. It might seem surprising, but Java can be non-deterministic in many and expected ways.
This article presents an non-trivial smart contract in Java, for the implementation of tokens and NFT holders with snapshots. The latter is a powerful feature of a data structure, that allows one to freeze its current state as an immutable data structure. It is very handy for writing dApps, that often need to access a consistent snapshot of the state of the objects, along a sequence of transactions.
This article considers a difficult topic in the development of smart contracts that use generic types. namely, this powerful feature, not available in other programming languages for smart contracts, must be used with care if we want to preserve type safeness.
This article formalizes the theory underlying the proof of space algorithm of Mokamint, inspired by that of another blockchain, called Signum. It shows how the algorithm works and why it is free from some traditional attacks to the network. Moreover, it proposes improvements that have been implemented in Mokamint.