Blockchain and AI consultancy working across industries, including fintech and blockchain. 🙏 Support us in Project Catalyst 🔗 https://xitter.cf/t.co/MjWDX8Q7bZ

UK
Joined June 2021
CTL v10.0.0 is out, with full Van Rossem support (protocol version 11). The balancer follows the relaxed reference-input rule, and new queries cover governance proposals and DReps. @IntersectMBO #Cardano github.com/Plutonomicon/card…
1
5
208
A Plutarch type can live on-chain three ways. Builtin is fastest but fits only primitives and their newtypes. Sum-of-products comes second and can't go in a datum. Data is the one you can exchange. mlabs.city/blog/do-you-even-… #Cardano
1
162
A Plutarch Term s a is a computation that yields an a or an error, the way an IO a holds no a inside it. Koz Ross starts there to explain the type class nearly all of Plutarch rests on. mlabs.city/blog/from-term-to… #Cardano
165
A three-valued logic packed into an Int8 can still be pattern matched like an ordinary data type, exhaustiveness checks included. Pattern synonyms do it with no Template Haskell, and they work on types you didn't write, like Word8. mlabs.city/blog/patterns-and… #Haskell
2
199
One command boots a VM running a Cardano preview node, with Ogmios answering on localhost port 1337. cardano.nix ships cardano-node, Ogmios, Kupo and db-sync as NixOS modules, each tested in VMs against the real networks. mlabs.city/blog/introducing-… #Cardano
2
200
Map two 20-element arrays on Cardano, then zip them. Through builtin lists that cost 88.1M CPU units. With Plutarch's pull arrays it cost 44.1M, and half the memory. The longer the pipeline, the more intermediate lists it skips. mlabs.city/blog/performance-… #Cardano
1
272
A Cardano script compared a big constant with itself. Inlined twice, it cost 578,965 CPU units. Bound to a variable, 668,284. In UPLC every variable needs a lambda and an apply around it, and you pay for both. mlabs.city/blog/how-executio… #Cardano
3
321
Finding one byte in 2 MiB of Haskell data: 880 μs naive, 123 μs with SWAR, 16.8 μs through C's memchr. Then we used memchr to find every match. It came out about 50% slower than the naive loop. mlabs.city/blog/fast-finding… #Haskell
1
223
Checking a buffer is ASCII in Haskell, one byte at a time, ran at about 2.2 GiB/s worst case. Masking the high bit of 8 bytes per word got 13.75 GiB/s. Theory said eight times faster. We measured about six. mlabs.city/blog/checking-asc… #Haskell
3
239
One Cardano transaction can spend several script outputs at once. If each validator only checks that it got paid, a single payment can satisfy all of them. That's multiple satisfaction, and our audit write-up walks through one. mlabs.city/blog/from-bugs-to… #Cardano
4
346
A failing QuickCheck property is only as useful as its counter-example. Without a shrinker, a random failure can be too big to read. With one, QuickCheck cuts it down to a small input that still fails. mlabs.city/blog/mastering-qu… #Haskell
234
Tell a coding agent to make a failing test pass and it has two ways to do it. Change the code, or change the test. Both turn it green. Keep the tests somewhere the agent can't edit, and only the first way is left, or clarify your intentions.
1
1
278
An agent that writes the code and the tests puts the same misunderstanding in both. So the tests pass. The bug is in them too. The checks worth trusting come from outside the agent, like a type that rules the bad state out or a QuickCheck property a person wrote.
1
216
MLabs is on Bluesky: mlabs-consulting.bsky.social Engineering work goes up there as we do it. Who else is worth following over there?
217