This commit is contained in:
waalge 2023-06-24 23:50:39 +00:00
parent 8321b95157
commit 4438d1819a
28 changed files with 722 additions and 6 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
.direnv/

1
README.md Normal file
View File

@ -0,0 +1 @@
# Sudoku snark : intro

114
flake.lock Normal file
View File

@ -0,0 +1,114 @@
{
"nodes": {
"devshell": {
"inputs": {
"nixpkgs": "nixpkgs",
"systems": "systems"
},
"locked": {
"lastModified": 1687173957,
"narHash": "sha256-GOds2bAQcZ94fb9/Nl/aM+r+0wGSi4EKYuZYR8Dw4R8=",
"owner": "numtide",
"repo": "devshell",
"rev": "2cf83bb31720fcc29a999aee28d6da101173e66a",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "devshell",
"type": "github"
}
},
"flake-parts": {
"inputs": {
"nixpkgs-lib": "nixpkgs-lib"
},
"locked": {
"lastModified": 1685662779,
"narHash": "sha256-cKDDciXGpMEjP1n6HlzKinN0H+oLmNpgeCTzYnsA2po=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "71fb97f0d875fd4de4994dfb849f2c75e17eb6c3",
"type": "github"
},
"original": {
"id": "flake-parts",
"type": "indirect"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1677383253,
"narHash": "sha256-UfpzWfSxkfXHnb4boXZNaKsAcUrZT9Hw+tao1oZxd08=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "9952d6bc395f5841262b006fbace8dd7e143b634",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-lib": {
"locked": {
"dir": "lib",
"lastModified": 1685564631,
"narHash": "sha256-8ywr3AkblY4++3lIVxmrWZFzac7+f32ZEhH/A8pNscI=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "4f53efe34b3a8877ac923b9350c874e3dcd5dc0a",
"type": "github"
},
"original": {
"dir": "lib",
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1687502512,
"narHash": "sha256-dBL/01TayOSZYxtY4cMXuNCBk8UMLoqRZA+94xiFpJA=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "3ae20aa58a6c0d1ca95c9b11f59a2d12eebc511f",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"devshell": "devshell",
"flake-parts": "flake-parts",
"nixpkgs": "nixpkgs_2"
}
},
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
}
},
"root": "root",
"version": 7
}

View File

@ -18,12 +18,28 @@
name = "HTTP_PORT"; name = "HTTP_PORT";
value = 8080; value = 8080;
}]; }];
commands = [{ commands = [
help = "print hello"; {
name = "hello"; help = "serve slides";
command = "echo hello"; name = "serve";
}]; command = ''
packages = with pkgs; [ pandoc nixfmt ]; caddy file-server --listen :7777 --root ./public
'';
}
{
help = "build slides";
name = "build";
command = ''
pandoc -t revealjs \
--from markdown+yaml_metadata_block+link_attributes \
-H src/header.html \
-o public/index.html \
-s \
src/index.md
'';
}
];
packages = with pkgs; [ pandoc nixfmt caddy ];
}; };
}; };
flake = { flake = {

Binary file not shown.

BIN
public/assets/dp.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

BIN
public/assets/hydra.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 366 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

413
public/index.html Normal file
View File

@ -0,0 +1,413 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="generator" content="pandoc">
<title>Sudoku snark</title>
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui">
<link rel="stylesheet" href="https://unpkg.com/reveal.js@^4//dist/reset.css">
<link rel="stylesheet" href="https://unpkg.com/reveal.js@^4//dist/reveal.css">
<style>
.reveal .sourceCode { /* see #7635 */
overflow: visible;
}
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
ul.task-list{list-style: none;}
ul.task-list li input[type="checkbox"] {
width: 0.8em;
margin: 0 0.8em 0.2em -1.6em;
vertical-align: middle;
}
.display.math{display: block; text-align: center; margin: 0.5rem auto;}
</style>
<link rel="stylesheet" href="https://unpkg.com/reveal.js@^4//dist/theme/black.css" id="theme">
<style>
.reveal, .reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6
{
font-family:"jetbrains-mono", "Times New Roman", Times;
}
@font-face{
font-family:jetbrains-mono;src:local("jetbrains-mono"),
url(/fonts/JetBrainsMono-Medium.woff2) format("woff2");
}
.black h2 {
background-color: #020210;
}
</style>
</head>
<body>
<div class="reveal">
<div class="slides">
<section id="title-slide">
<h1 class="title">Sudoku snark</h1>
<p class="subtitle">a story by <a
href="https://kompact.io">Kompact.io</a></p>
</section>
<section>
<section id="how-it-started" class="title-slide slide level1"
data-background-gradient="linear-gradient(147deg, #000000 0%, #2c3e50 74%)">
<h1
data-background-gradient="linear-gradient(147deg, #000000 0%, #2c3e50 74%)">How
it started</h1>
</section>
<section id="there-is-hackathon-on-cardano" class="slide level2">
<h2>There is hackathon on cardano 🥳 …</h2>
</section>
<section id="but-wait-there-is-a-zk-track" class="slide level2">
<h2>But wait! 🧐 There is a ZK track</h2>
</section>
<section id="surely-no" class="slide level2">
<h2>Surely No!?</h2>
<ul>
<li><p>Fundemtal primitives for any zk-alg are not available in
plutus</p></li>
<li><p>Midnight, the much hyped zk sidechain, is essentially in stealth
mode</p></li>
<li><p>zk on cardano? not possible! 😵‍💫</p></li>
<li><p>Using some other chain for zk and bridging over … thats
<em>bridging</em>: we want <em>zk</em></p></li>
</ul>
</section>
<section id="oh-hello-pr5231pr-5231" class="slide level2"
data-background-image="./assets/zk-pr-screenshot.png"
data-background-opacity="0.3">
<h2 data-background-image="./assets/zk-pr-screenshot.png"
data-background-opacity="0.3">… oh, hello <a
href="https://github.com/input-output-hk/plutus/pull/5231">PR#5231</a>
👀</h2>
</section>
<section id="section" class="slide level2">
<h2></h2>
<ul>
<li>A beast of a PR: 6 months, 230 commits, 319 files changed</li>
<li>Finally merged during this hackathon</li>
</ul>
<blockquote>
<p>This PR adds new built-in types and functions to Plutus Core and
PlutusTx for pairings over BLS12-381, as specified in CIP-0381.</p>
</blockquote>
</section>
<section id="what-does-this-mean" class="slide level2">
<h2>What does this mean??</h2>
<ul>
<li><a href="https://cips.cardano.org/cips/cip0381/">CIP-0381</a>:
Plutus support for Pairings over <code>BLS12_381</code></li>
<li>In other words, plutus gets the builtins that make it possible to
begin genuine zk on cardano</li>
</ul>
</section>
<section id="so-yes-we-can-zk-on-cardano" class="slide level2">
<h2>So Yes! We can zk on cardano</h2>
</section>
<section id="first-hurdle" class="slide level2">
<h2>First hurdle</h2>
<ul>
<li>Only the primitives are provided; we need implement a zk-alg</li>
<li>Use it as the basis for a dapp</li>
<li>And do both in a way that doesnt break the (tx exunits) bank</li>
</ul>
</section>
<section id="and-then" class="slide level2">
<h2>And then?</h2>
<ul>
<li><p>Having zk in the latest version of plutus is one thing: Running a
zk dapp on cardano is quite another!</p></li>
<li><p>There is no chance of running these new primitives on Cardano
mainnet any time soon</p></li>
</ul>
</section>
<section id="not-on-l1-but-hydra" class="slide level2"
data-background-image="./assets/hydra.png"
data-background-opacity="0.3">
<h2 data-background-image="./assets/hydra.png"
data-background-opacity="0.3">Not on L1, but … hydra</h2>
<ul>
<li>Hydra can, in theory, run a modified version of plutus</li>
<li>Hydra is very much Cardano</li>
</ul>
</section>
<section id="so-wed-need-to" class="slide level2">
<h2>… so wed need to: 📋</h2>
<ul>
<li>Create a zk validator</li>
<li>Create the related functionality to build relevant txs</li>
<li>Bump the various cardano libraries necessary to get hydra to run the
latest</li>
<li>Deploy</li>
</ul>
<p>(Do this all in less than three weeks, while keeping the day job
😅)</p>
</section></section>
<section>
<section id="sudoku-snark" class="title-slide slide level1">
<h1>Sudoku snark</h1>
</section>
<section id="aims" class="slide level2">
<h2>Aims</h2>
<p>Create a non trivial zk dapp on Cardano, that provides as a
demonstrable PoC.</p>
<p>The Dapp itself can be facile: its contribution is to derisk more
ambitious dapps with stronger use cases.</p>
</section></section>
<section id="section-1" class="title-slide slide level1">
<h1></h1>
</section>
<section id="what-next" class="title-slide slide level1">
<h1>What next?</h1>
</section>
<section>
<section id="why-this-should-win" class="title-slide slide level1">
<h1>Why this should win?</h1>
</section>
<section id="the-judging-criteria" class="slide level2">
<h2>The judging criteria</h2>
<ul>
<li>Innovation and Necessity to the Cardano Blockchain Ecosystem
(20%)</li>
</ul>
<p>This evaluates how novel and essential your solution is within the
Cardano ecosystem. It looks at whether your idea is unique and if it
solves a critical need.</p>
<ul>
<li>Maturity of the Tech and Product (40%)</li>
</ul>
<p>This assesses the technical robustness and readiness of your
solution. It considers the technology used, the degree of completion,
and the readiness for deployment of your product.</p>
<ul>
<li>Go-to-Market Strategy, User Acquisition Strategy and Community
Growth Strategy (20%)</li>
</ul>
<p>This looks at your plan to introduce your product to the market, how
you plan to acquire users, and strategies you have for growing your
community. It evaluates the viability and potential effectiveness of
these strategies.</p>
<ul>
<li>Team and Experience (20%)</li>
</ul>
</section>
<section id="section-2" class="slide level2">
<h2>..</h2>
<ul>
<li>Given that zk is
<ul>
<li>highly technical</li>
<li>incredibly nacent in blockchain</li>
<li>barely exists on cardano</li>
</ul></li>
<li>expecting a maturish product with a “go2market” strategy seemed …
ambitious</li>
</ul>
</section></section>
<section>
<section id="as-for-the-team" class="title-slide slide level1">
<h1>As for the team</h1>
</section>
<section id="waalge" class="slide level2"
data-background-image="./assets/dp.jpg" data-background-opacity="0.3">
<h2 data-background-image="./assets/dp.jpg"
data-background-opacity="0.3"><span class="citation"
data-cites="waalge">@waalge</span></h2>
<ul>
<li>Cheif of <a href="https://kompact.io">Kompact.io</a></li>
<li>2 years building around cardano (eg guchi.io)</li>
<li>Previously full stack dev, ML/NLP researcher</li>
<li>PhD in geometry</li>
</ul>
<p><a href="https://www.linkedin.com/in/dominic-algernon-wallis-123b42187/">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" height="80" preserveAspectRatio="xMidYMid meet" fill="white">
<!--! Font Awesome Pro 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. -->
<path
d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z" />
</svg> </a><a href="https://twitter.com/waalge">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" height="80" preserveAspectRatio="xMidYMid meet" fill="white">
<!--! Font Awesome Pro 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. -->
<path
d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z" />
</svg> </a></p>
</section></section>
</div>
</div>
<script src="https://unpkg.com/reveal.js@^4//dist/reveal.js"></script>
<!-- reveal.js plugins -->
<script src="https://unpkg.com/reveal.js@^4//plugin/notes/notes.js"></script>
<script src="https://unpkg.com/reveal.js@^4//plugin/search/search.js"></script>
<script src="https://unpkg.com/reveal.js@^4//plugin/zoom/zoom.js"></script>
<script>
// Full list of configuration options available at:
// https://revealjs.com/config/
Reveal.initialize({
// Display controls in the bottom right corner
controls: true,
// Help the user learn the controls by providing hints, for example by
// bouncing the down arrow when they first encounter a vertical slide
controlsTutorial: true,
// Determines where controls appear, "edges" or "bottom-right"
controlsLayout: 'bottom-right',
// Visibility rule for backwards navigation arrows; "faded", "hidden"
// or "visible"
controlsBackArrows: 'faded',
// Display a presentation progress bar
progress: true,
// Display the page number of the current slide
slideNumber: false,
// 'all', 'print', or 'speaker'
showSlideNumber: 'all',
// Add the current slide number to the URL hash so that reloading the
// page/copying the URL will return you to the same slide
hash: true,
// Start with 1 for the hash rather than 0
hashOneBasedIndex: false,
// Flags if we should monitor the hash and change slides accordingly
respondToHashChanges: true,
// Push each slide change to the browser history
history: false,
// Enable keyboard shortcuts for navigation
keyboard: true,
// Enable the slide overview mode
overview: true,
// Disables the default reveal.js slide layout (scaling and centering)
// so that you can use custom CSS layout
disableLayout: false,
// Vertical centering of slides
center: true,
// Enables touch navigation on devices with touch input
touch: true,
// Loop the presentation
loop: false,
// Change the presentation direction to be RTL
rtl: false,
// see https://revealjs.com/vertical-slides/#navigation-mode
navigationMode: 'default',
// Randomizes the order of slides each time the presentation loads
shuffle: false,
// Turns fragments on and off globally
fragments: true,
// Flags whether to include the current fragment in the URL,
// so that reloading brings you to the same fragment position
fragmentInURL: true,
// Flags if the presentation is running in an embedded mode,
// i.e. contained within a limited portion of the screen
embedded: false,
// Flags if we should show a help overlay when the questionmark
// key is pressed
help: true,
// Flags if it should be possible to pause the presentation (blackout)
pause: true,
// Flags if speaker notes should be visible to all viewers
showNotes: false,
// Global override for autoplaying embedded media (null/true/false)
autoPlayMedia: null,
// Global override for preloading lazy-loaded iframes (null/true/false)
preloadIframes: null,
// Number of milliseconds between automatically proceeding to the
// next slide, disabled when set to 0, this value can be overwritten
// by using a data-autoslide attribute on your slides
autoSlide: 0,
// Stop auto-sliding after user input
autoSlideStoppable: true,
// Use this method for navigation when auto-sliding
autoSlideMethod: null,
// Specify the average time in seconds that you think you will spend
// presenting each slide. This is used to show a pacing timer in the
// speaker view
defaultTiming: null,
// Enable slide navigation via mouse wheel
mouseWheel: false,
// The display mode that will be used to show slides
display: 'block',
// Hide cursor if inactive
hideInactiveCursor: true,
// Time before the cursor is hidden (in ms)
hideCursorTime: 5000,
// Opens links in an iframe preview overlay
previewLinks: false,
// Transition style (none/fade/slide/convex/concave/zoom)
transition: 'slide',
// Transition speed (default/fast/slow)
transitionSpeed: 'default',
// Transition style for full page slide backgrounds
// (none/fade/slide/convex/concave/zoom)
backgroundTransition: 'fade',
// Number of slides away from the current that are visible
viewDistance: 3,
// Number of slides away from the current that are visible on mobile
// devices. It is advisable to set this to a lower number than
// viewDistance in order to save resources.
mobileViewDistance: 2,
// Parallax background image
parallaxBackgroundImage: './assets/background.avif', // e.g. "'https://s3.amazonaws.com/hakim-static/reveal-js/reveal-parallax-1.jpg'"
// reveal.js plugins
plugins: [
RevealNotes,
RevealSearch,
RevealZoom
]
});
</script>
</body>
</html>

14
src/header.html Normal file
View File

@ -0,0 +1,14 @@
<style>
.reveal, .reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6
{
font-family:"jetbrains-mono", "Times New Roman", Times;
}
@font-face{
font-family:jetbrains-mono;src:local("jetbrains-mono"),
url(/fonts/JetBrainsMono-Medium.woff2) format("woff2");
}
.black h2 {
background-color: #020210;
}
</style>

149
src/index.md Normal file
View File

@ -0,0 +1,149 @@
---
title: Sudoku snark
subtitle: a story by [Kompact.io](https://kompact.io)
mainfont: jetbrains-mono
# title-slide-attributes:
# data-background-image: ./assets/background.jpg
# data-background-gradient: "linear-gradient(147deg, #000000 0%, #2c3e50 74%)"
# data-background-gradient: "radial-gradient(#283b95,#17b2c3)"
background-image: ./assets/background.avif
background-opacity: "0.35"
---
# How it started
## There is hackathon on cardano 🥳 ...
## But wait! 🧐 There is a ZK track
## Surely No!?
- Fundemtal primitives for any zk-alg are not available in plutus
- Midnight, the much hyped zk sidechain, is essentially in stealth mode
- zk on cardano? not possible! 😵‍💫
- Using some other chain for zk and bridging over
... that's _bridging_: we want _zk_
## ... oh, hello [PR#5231][pr-5231] 👀 {data-background-image="./assets/zk-pr-screenshot.png" data-background-opacity="0.3"}
[pr-5231]: https://github.com/input-output-hk/plutus/pull/5231
##
- A beast of a PR: 6 months, 230 commits, 319 files changed
- Finally merged during this hackathon
> This PR adds new built-in types and functions to Plutus Core and PlutusTx
> for pairings over BLS12-381, as specified in CIP-0381.
## What does this mean??
- [CIP-0381][cip-0381]: Plutus support for Pairings over `BLS12_381`
- In other words, plutus gets the builtins
that make it possible to begin genuine zk on cardano
[cip-0381]: https://cips.cardano.org/cips/cip0381/
## So Yes! We can zk on cardano
## First hurdle
- Only the primitives are provided; we need implement a zk-alg
- Use it as the basis for a dapp
- And do both in a way that doesn't break the (tx exunits) bank
## And then?
- Having zk in the latest version of plutus is one thing:
Running a zk dapp on cardano is quite another!
- There is no chance of running these new primitives on
Cardano mainnet any time soon
## Not on L1, but ... hydra {data-background-image="./assets/hydra.png" data-background-opacity="0.3"}
- Hydra can, in theory, run a modified version of plutus
- Hydra is very much Cardano
## ... so we'd need to: 📋
- Create a zk validator
- Create the related functionality to build relevant txs
- Bump the various cardano libraries necessary to get hydra to run
the latest
- Deploy
(Do this all in less than three weeks, while keeping the day job 😅)
# Sudoku snark
## Aims
- Create a non trivial zk dapp on Cardano, that provides as a demonstrable PoC
- The Dapp itself can be facile: its contribution is to derisk more ambitious dapps with stronger use cases
## The game
- Competitive sudoku.
- Contestants register their desire to take part
- Game master initializes a puzzle with first, and second prizes
- A contestant can claim a prize by proving they know the answer
- by the powers of zk, the claim does not disclose the solution
xxxxxxxxxxxx
# What next?
# Why this should win?
## The judging criteria
- Innovation and Necessity to the Cardano Blockchain Ecosystem (20%)
This evaluates how novel and essential your solution is within the Cardano ecosystem. It looks at whether your idea is unique and if it solves a critical need.
- Maturity of the Tech and Product (40%)
This assesses the technical robustness and readiness of your solution. It considers the technology used, the degree of completion, and the readiness for deployment of your product.
- Go-to-Market Strategy, User Acquisition Strategy and Community Growth Strategy (20%)
This looks at your plan to introduce your product to the market, how you plan to acquire users, and strategies you have for growing your community. It evaluates the viability and potential effectiveness of these strategies.
- Team and Experience (20%)
## ..
- Given that zk is
- highly technical
- incredibly nacent in blockchain
- barely exists on cardano
- expecting a maturish product with a "go2market" strategy seemed ... ambitious
# As for the team
## @waalge {data-background-image="./assets/dp.jpg" data-background-opacity="0.3"}
- Cheif of [Kompact.io](https://kompact.io)
- 2 years building around cardano (eg guchi.io)
- Previously full stack dev, ML/NLP researcher
- PhD in geometry
<a href="https://www.linkedin.com/in/dominic-algernon-wallis-123b42187/">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" height="80" preserveAspectRatio="xMidYMid meet" fill="white">
<!--! Font Awesome Pro 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. -->
<path
d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z" />
</svg>
</a>
---
<a href="https://twitter.com/waalge">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" height="80" preserveAspectRatio="xMidYMid meet" fill="white">
<!--! Font Awesome Pro 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. -->
<path
d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z" />
</svg>
</a>

8
src/style.css Normal file
View File

@ -0,0 +1,8 @@
@font-face{
font-family: 'JetBrainsMono';
src: url('https://cdn.jsdelivr.net/gh/JetBrains/JetBrainsMono/web/woff2/JetBrainsMono-Regular.woff2') format('woff2'),
url('https://cdn.jsdelivr.net/gh/JetBrains/JetBrainsMono/web/woff/JetBrainsMono-Regular.woff') format('woff'),
url('https://cdn.jsdelivr.net/gh/JetBrains/JetBrainsMono/ttf/JetBrainsMono-Regular.ttf') format('truetype');
font-weight: 400;
font-style: normal;
}