Abaks: commands
Previous log has let us with the following events: data AbaksEvent = Started {periodId :: PeriodId, name :: Text, from :: Day, to :: Day, initialBal… ...more
Previous log has let us with the following events: data AbaksEvent = Started {periodId :: PeriodId, name :: Text, from :: Day, to :: Day, initialBal… ...more
I tend to start with the events whenever I start an event source-based system. But first, let's recall the requirements: I should start a Period wit… ...more
A long time ago I "started" a side project called abaks, which is a project for personal bank reconciliation statements. I've been quite bus… ...more
I spend most of my day in a linux terminal (KDE's konsole), doing so, I interact directly with git. I usually starts working on a topic: $ git co -b f… ...more
With Polysemy 1.9.0.0 came the Scoped effect. It's defined as follows: data Scoped (param :: Type) (effect :: Effect) :: Effect where Run :: forall … ...more
With Polysemy 1.9.0.0 came the Opaque effect. It's defined as follows: newtype Opaque (e :: Effect) m a where Opaque :: forall e m a. e m a -> Op… ...more
Until now we only seen "low-level" effects (either classical Monad, or technical effects). On of my main motivation with effects systems is … ...more
When it comes to interpreters relying on other effects, you can either hide or expose them. For example, last year we introduced a Cache effect: data … ...more
At some point you may have strongly typed effects: data DocumentsEffects (d :: Type) (m :: Type -> Type) (a :: Type) where StoreDocument :: d -&g… ...more
As a last lecture, instead of writing regular Plutus code through Haskell, alternatives are presented. First, we have MeshJS, which aims to bootstrap … ...more
In the codebases I have worked on all have multiple global interpreters, most noticeably for production and tests. From time to time, you want to have… ...more
Today's lecture aims to be a wrap-up of previous lectures by implementing a stablecoin. It's supposed to be the indexed (i.e. synchronized) representa… ...more
In a previous log I mentioned that I some point I totally "give up" some of my architecture choices. Let me start by stating that I'm comfor… ...more
We came over Cardano's staking mechanism over and over. At some point, a reward transaction is emitted and, like Script and Minting, there are Validat… ...more
Things have evolved since the beginning of this series! Polysemy had two major releases: 1.8.0.0 and 1.9.0.0. Not a lot of things have evolved, but we… ...more
In my previous log I mentioned the hiring process I set up in my company. In order to hire someone I have to know few things: What's the applicant ba… ...more
While Plutus is the "main" entry-point for smart contracts on Cardano, the only requirement is to produce some Plutus Core, to be run on Car… ...more
As I'll soon change company, I think it's the right time to do a retrospective of these years as CTO, for the first time. (Note that, legally speaking… ...more
I was expecting this lecture for so long: testing. At the time of writing, testing utils are provided in Plutus.Model, as part of plutus-simple-model,… ...more
In our previous log, we ended up with a lot of interpreters: intrepretUserRegistration :: Member InternalUserEffect r => InterpreterFor UserRegistr… ...more
This weeks' lesson is focused on NFT (Non-fungible token), which are "tokens" (non-divisible, duplicable, or copyable). Cardano contains thr… ...more
In our previous log, we have seen that we had to problematics: Splitting effects by concerns Having one target implementation A way to mitigate that… ...more
Cardano smart contract's code is splitted in two parts: on-chain and off-chain On-chain code is executed during transaction/data blockchain incorporat… ...more
After a while, it's tempting to have large effects, just because it's easier, or because they target one implementation. For example, in the codebases… ...more
Ouroboros is the consensus protocol powering Cardano. It is the first secured (and proven to be) proof-of-stake (PoS) blockchain protocol. Unlike proo… ...more
When it come to designing effects, an efficient way to know where to start is to look for IO (especially in embed/embedFinal). Let's have a look at a … ...more
Following the Plutus Pioneers Program 1st & 2nd lectures, this one takes a step closer to real world use cases. We are able to tests validators, l… ...more
Polysemy comes with many functions and interpreters relying on -threaded. However, whenever an issue (such as an Error) happens: failing :: Members … ...more
For a long time I have been interested in blockchain ecosystem for multiple reasons: A wide range of applications A very innovative field Lots of adv… ...more
In previous logs we have seen how to build interpreters thanks to Strategy. data BindE (m :: Type -> Type) a where BindE :: m a -> (a -> m … ...more
Polysemy provides some interpreters changing the returned value: runWriter :: Monoid o => Sem (Writer o ': r) a -> Sem r (o, a) The easiest… ...more
Polysemy provides many ways to combine both effects and interpreters, let's start with a simple Db effects: data Db (m :: Type -> Type) a where E… ...more