a first draft. submittable
This commit is contained in:
parent
4438d1819a
commit
2ea3ceca20
|
@ -19,6 +19,14 @@
|
||||||
value = 8080;
|
value = 8080;
|
||||||
}];
|
}];
|
||||||
commands = [
|
commands = [
|
||||||
|
{
|
||||||
|
help = "deploy slides";
|
||||||
|
name = "deploy";
|
||||||
|
command = ''
|
||||||
|
ssh genesis "mkdir -p /var/www/public/sudoku-snark"
|
||||||
|
rsync -r --delete ./public/* genesis:/var/www/public/sudoku-snark/
|
||||||
|
'';
|
||||||
|
}
|
||||||
{
|
{
|
||||||
help = "serve slides";
|
help = "serve slides";
|
||||||
name = "serve";
|
name = "serve";
|
||||||
|
|
Binary file not shown.
|
@ -0,0 +1,28 @@
|
||||||
|
<svg width="10000" height="10000" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<radialGradient id="G1" cx="50%" cy="50%" r="50%" fx="50%" fy="50%">
|
||||||
|
<stop offset="0%" style="stop-color:rgb(200,60,0); stop-opacity:.8" />
|
||||||
|
<stop offset="100%" style="stop-color:rgb(100,20,10); stop-opacity:0" />
|
||||||
|
</radialGradient >
|
||||||
|
</defs>
|
||||||
|
|
||||||
|
<ellipse
|
||||||
|
cx="100"
|
||||||
|
cy="120"
|
||||||
|
rx="1500"
|
||||||
|
ry="1500"
|
||||||
|
fill="url(#G1)" />
|
||||||
|
<ellipse
|
||||||
|
cx="1000"
|
||||||
|
cy="1200"
|
||||||
|
rx="1500"
|
||||||
|
ry="1000"
|
||||||
|
fill="url(#G1)" />
|
||||||
|
<ellipse
|
||||||
|
cx="2200"
|
||||||
|
cy="1600"
|
||||||
|
rx="1000"
|
||||||
|
ry="1200"
|
||||||
|
fill="url(#G1)" />
|
||||||
|
</svg>
|
||||||
|
|
After Width: | Height: | Size: 635 B |
|
@ -34,12 +34,17 @@
|
||||||
}
|
}
|
||||||
@font-face{
|
@font-face{
|
||||||
font-family:jetbrains-mono;src:local("jetbrains-mono"),
|
font-family:jetbrains-mono;src:local("jetbrains-mono"),
|
||||||
url(/fonts/JetBrainsMono-Medium.woff2) format("woff2");
|
url("./fonts/JetBrainsMono-Medium.woff2") format("woff2");
|
||||||
}
|
}
|
||||||
.black h2 {
|
.black h2 {
|
||||||
background-color: #020210;
|
background-color: #020210;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.reveal ul {
|
||||||
|
list-style-type: "❯";
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
@ -53,27 +58,24 @@ href="https://kompact.io">Kompact.io</a></p>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section>
|
<section>
|
||||||
<section id="how-it-started" class="title-slide slide level1"
|
<section id="how-it-started" class="title-slide slide level1">
|
||||||
data-background-gradient="linear-gradient(147deg, #000000 0%, #2c3e50 74%)">
|
<h1>How it started</h1>
|
||||||
<h1
|
|
||||||
data-background-gradient="linear-gradient(147deg, #000000 0%, #2c3e50 74%)">How
|
|
||||||
it started</h1>
|
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
<section id="there-is-hackathon-on-cardano" class="slide level2">
|
<section id="there-is-a-hackathon-on-cardano" class="slide level2">
|
||||||
<h2>There is hackathon on cardano 🥳 …</h2>
|
<h2>There is a hackathon on cardano 🥳 …</h2>
|
||||||
</section>
|
</section>
|
||||||
<section id="but-wait-there-is-a-zk-track" class="slide level2">
|
<section id="but-wait-there-is-a-zk-track" class="slide level2">
|
||||||
<h2>But wait! 🧐 There is a ZK track</h2>
|
<h2>But wait! 🧐 There is a zk track</h2>
|
||||||
</section>
|
</section>
|
||||||
<section id="surely-no" class="slide level2">
|
<section id="surely-no" class="slide level2">
|
||||||
<h2>Surely No!?</h2>
|
<h2>Surely No!?</h2>
|
||||||
<ul>
|
<ul>
|
||||||
<li><p>Fundemtal primitives for any zk-alg are not available in
|
<li><p>Fundamental primitives for any zk-alg are not available in
|
||||||
plutus</p></li>
|
plutus</p></li>
|
||||||
<li><p>Midnight, the much hyped zk sidechain, is essentially in stealth
|
<li><p>Midnight, the much hyped zk sidechain, is essentially in stealth
|
||||||
mode</p></li>
|
mode</p></li>
|
||||||
<li><p>zk on cardano? not possible! 😵💫</p></li>
|
<li><p>zk on Cardano? not possible! 😵💫</p></li>
|
||||||
<li><p>Using some other chain for zk and bridging over … that’s
|
<li><p>Using some other chain for zk and bridging over … that’s
|
||||||
<em>bridging</em>: we want <em>zk</em></p></li>
|
<em>bridging</em>: we want <em>zk</em></p></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
@ -94,33 +96,33 @@ href="https://github.com/input-output-hk/plutus/pull/5231">PR#5231</a>
|
||||||
</ul>
|
</ul>
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<p>This PR adds new built-in types and functions to Plutus Core and
|
<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>
|
PlutusTx for pairings over BLS12-381, as specified in CIP-0381</p>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
</section>
|
</section>
|
||||||
<section id="what-does-this-mean" class="slide level2">
|
<section id="what-does-this-mean" class="slide level2">
|
||||||
<h2>What does this mean??</h2>
|
<h2>What does this mean??</h2>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="https://cips.cardano.org/cips/cip0381/">CIP-0381</a>:
|
<li><a href="https://cips.cardano.org/cips/cip0381/">CIP-0381</a>:
|
||||||
Plutus support for Pairings over <code>BLS12_381</code></li>
|
plutus support for pairings over <code>BLS12_381</code></li>
|
||||||
<li>In other words, plutus gets the builtins that make it possible to
|
<li>In other words plutus gets the built-ins that make it possible to
|
||||||
begin genuine zk on cardano</li>
|
begin genuine zk on Cardano</li>
|
||||||
</ul>
|
</ul>
|
||||||
</section>
|
</section>
|
||||||
<section id="so-yes-we-can-zk-on-cardano" class="slide level2">
|
<section id="so-yes-we-can-zk-on-cardano" class="slide level2">
|
||||||
<h2>So Yes! We can zk on cardano</h2>
|
<h2>So Yes! 🤯 <br/> We <em>can</em> zk on cardano</h2>
|
||||||
</section>
|
</section>
|
||||||
<section id="first-hurdle" class="slide level2">
|
<section id="first-hurdle" class="slide level2">
|
||||||
<h2>First hurdle</h2>
|
<h2>First hurdle</h2>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Only the primitives are provided; we need implement a zk-alg</li>
|
<li>Only the primitives are provided; we need to implement a zk-alg</li>
|
||||||
<li>Use it as the basis for a dapp</li>
|
<li>Use it as the basis for a dapp</li>
|
||||||
<li>And do both in a way that doesn’t break the (tx exunits) bank</li>
|
<li>And do both in a way that doesn’t break the (ex-units) bank</li>
|
||||||
</ul>
|
</ul>
|
||||||
</section>
|
</section>
|
||||||
<section id="and-then" class="slide level2">
|
<section id="and-then" class="slide level2">
|
||||||
<h2>And then?</h2>
|
<h2>🤔 And then?</h2>
|
||||||
<ul>
|
<ul>
|
||||||
<li><p>Having zk in the latest version of plutus is one thing: Running a
|
<li><p>Having zk in the latest version of plutus is one thing: running a
|
||||||
zk dapp on cardano is quite another!</p></li>
|
zk dapp on cardano is quite another!</p></li>
|
||||||
<li><p>There is no chance of running these new primitives on Cardano
|
<li><p>There is no chance of running these new primitives on Cardano
|
||||||
mainnet any time soon</p></li>
|
mainnet any time soon</p></li>
|
||||||
|
@ -130,22 +132,25 @@ mainnet any time soon</p></li>
|
||||||
data-background-image="./assets/hydra.png"
|
data-background-image="./assets/hydra.png"
|
||||||
data-background-opacity="0.3">
|
data-background-opacity="0.3">
|
||||||
<h2 data-background-image="./assets/hydra.png"
|
<h2 data-background-image="./assets/hydra.png"
|
||||||
data-background-opacity="0.3">Not on L1, but … hydra</h2>
|
data-background-opacity="0.3">Not on L1, <br/> but … hydra</h2>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Hydra can, in theory, run a modified version of plutus</li>
|
<li>Hydra is Cardano-native ‘isomorphic’ L2</li>
|
||||||
<li>Hydra is very much Cardano</li>
|
<li>Loosely - it can run plutus just like mainnet</li>
|
||||||
|
<li>But we could also run it with a modified version of plutus</li>
|
||||||
|
<li>Thus we could run hydra with the latest plutus and deploy our zk
|
||||||
|
dapp their</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
<p>No need to wait for any hardforks!</p>
|
||||||
</section>
|
</section>
|
||||||
<section id="so-wed-need-to" class="slide level2">
|
<section id="so-wed-need-to" class="slide level2">
|
||||||
<h2>… so we’d need to: 📋</h2>
|
<h2>… so we’d need to: 📋</h2>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Create a zk validator</li>
|
<li>Create a zk validator</li>
|
||||||
<li>Create the related functionality to build relevant txs</li>
|
<li>Create tx-building functionality</li>
|
||||||
<li>Bump the various cardano libraries necessary to get hydra to run the
|
<li>Bump all the Cardano libraries from plutus to hydra</li>
|
||||||
latest</li>
|
<li>Build + deploy</li>
|
||||||
<li>Deploy</li>
|
|
||||||
</ul>
|
</ul>
|
||||||
<p>(Do this all in less than three weeks, while keeping the day job
|
<p>(Do all this in less than three weeks, while keeping the day job
|
||||||
😅)</p>
|
😅)</p>
|
||||||
</section></section>
|
</section></section>
|
||||||
<section>
|
<section>
|
||||||
|
@ -154,70 +159,149 @@ latest</li>
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
<section id="aims" class="slide level2">
|
<section id="aims" class="slide level2">
|
||||||
<h2>Aims</h2>
|
<h2>🎯 Aims</h2>
|
||||||
<p>Create a non trivial zk dapp on Cardano, that provides as a
|
<ul>
|
||||||
demonstrable PoC.</p>
|
<li>Create a non trivial zk dapp on Cardano ie demonstrable PoC</li>
|
||||||
<p>The Dapp itself can be facile: its contribution is to derisk more
|
<li>Initial iteration of tooling/ stack</li>
|
||||||
ambitious dapps with stronger use cases.</p>
|
<li>Derisk more ambitious Cardano-based zk dapps</li>
|
||||||
|
</ul>
|
||||||
|
<p>And conversely, non-aims:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Larp a fantastical business based on unproven tech</li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
<section id="the-game-competitive-sudoku" class="slide level2">
|
||||||
|
<h2>The game: 🎲<br/> Competitive sudoku</h2>
|
||||||
|
<ul>
|
||||||
|
<li>Trusted entity inits competition</li>
|
||||||
|
<li>Contestants register</li>
|
||||||
|
<li>Game master sets puzzle + multiple prizes</li>
|
||||||
|
<li>Contestant claims a prize with proof of solution</li>
|
||||||
|
</ul>
|
||||||
|
<p>By the powers of zk, the claim does not disclose the solution</p>
|
||||||
|
</section>
|
||||||
|
<section id="the-snark-groth16" class="slide level2">
|
||||||
|
<h2>The Snark: Groth16</h2>
|
||||||
|
<p>Why <a href="https://eprint.iacr.org/2016/260.pdf">groth16</a>?</p>
|
||||||
|
<ul>
|
||||||
|
<li>Relatively mature</li>
|
||||||
|
<li>Relatively simple</li>
|
||||||
|
<li>Can be implemented with the new primitives in plutus</li>
|
||||||
|
<li>Has the smallest proof size</li>
|
||||||
|
</ul>
|
||||||
|
<p>All of these make it the right choice for a first zk snark alg</p>
|
||||||
|
</section>
|
||||||
|
<section id="components-tooling" class="slide level2">
|
||||||
|
<h2>Components ⚒️ tooling</h2>
|
||||||
|
<ul>
|
||||||
|
<li><a href="https://github.com/arkworks-rs">Arkworks</a> framework:
|
||||||
|
generate groth16 setup and proofs</li>
|
||||||
|
<li>Plutus-tx: handling plutus validators</li>
|
||||||
|
</ul>
|
||||||
</section></section>
|
</section></section>
|
||||||
<section id="section-1" class="title-slide slide level1">
|
<section>
|
||||||
<h1>…</h1>
|
<section id="how-its-going" class="title-slide slide level1">
|
||||||
|
<h1>How it’s going?</h1>
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
|
<section id="links" class="slide level2">
|
||||||
<section id="what-next" class="title-slide slide level1">
|
<h2>Links</h2>
|
||||||
<h1>What next?</h1>
|
<ul>
|
||||||
|
<li>🟩 rust-lib</li>
|
||||||
|
<li>🟩 haskell-lib</li>
|
||||||
|
<li>🟨 cardano-api</li>
|
||||||
|
<li>🟨 cardano-node</li>
|
||||||
|
<li>🟥 hydra</li>
|
||||||
|
</ul>
|
||||||
|
<p><span style="font-size:1rem"> ( 🟩 done — 🟨 more progress required —
|
||||||
|
🟥 much more to do ) </span></p>
|
||||||
|
</section>
|
||||||
|
<section id="what-didnt-get-done" class="slide level2">
|
||||||
|
<h2>What didn’t get done?</h2>
|
||||||
|
<ul>
|
||||||
|
<li>By far the most time was sunk dependency-wrangling Cardano libs,
|
||||||
|
trying to bump plutus version in a Cardano node</li>
|
||||||
|
<li>We managed to have a dev cluster running but key tx building
|
||||||
|
features are missing for conway era</li>
|
||||||
|
<li>No Cardano node ==> no hydra</li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
<section id="other-to-dos" class="slide level2">
|
||||||
|
<h2>Other to-dos 📋</h2>
|
||||||
|
<ul>
|
||||||
|
<li>Tau ceremony for setup</li>
|
||||||
|
<li>Proper implementation for poseidon hash</li>
|
||||||
|
<li>Select a fix for a replay attack <em>eg</em> additional public input
|
||||||
|
and using script context</li>
|
||||||
|
<li>Complete constraints in circuit</li>
|
||||||
|
<li>Sexy frontend <em>etc</em></li>
|
||||||
|
</ul>
|
||||||
|
</section></section>
|
||||||
|
<section>
|
||||||
|
<section id="beyond-sudoku-snark" class="title-slide slide level1">
|
||||||
|
<h1>Beyond sudoku snark</h1>
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
|
<section id="sudoku-snark-is-probably-not-the-killer-zk-app-what-is"
|
||||||
|
class="slide level2">
|
||||||
|
<h2>Sudoku snark is probably not the killer zk app <br/> What is?</h2>
|
||||||
|
</section>
|
||||||
|
<section id="privacy-on-public-ledgers" class="slide level2">
|
||||||
|
<h2>🕵️ Privacy on public ledgers</h2>
|
||||||
|
<ul>
|
||||||
|
<li>Privacy on blockchains like Cardano is a problem (see articles
|
||||||
|
<em>ad nauseum</em>)</li>
|
||||||
|
<li>zk can make it harder to track who’s transacting with whom</li>
|
||||||
|
<li>There are L1s dedicated to resolving this like <a
|
||||||
|
href="https://z.cash/">zcash</a> and <a
|
||||||
|
href="https://www.getmonero.org/">monero</a></li>
|
||||||
|
<li>There are dapps on existing chains like <a
|
||||||
|
href="https://www.railgun.org/">railgun</a> on Eth</li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
<section id="privacy-on-cardano" class="slide level2">
|
||||||
|
<h2>Privacy on cardano</h2>
|
||||||
|
<ul>
|
||||||
|
<li>Cardano needs a privacy solution</li>
|
||||||
|
<li>This can be achieved with a zk dapp</li>
|
||||||
|
<li>There are use cases for having this both on the L1 and on L2s</li>
|
||||||
|
</ul>
|
||||||
|
<p>Sudoku snark gives us a foundation on tooling, zk gadgets, and even a
|
||||||
|
choice of snark</p>
|
||||||
|
</section>
|
||||||
|
<section id="from-here-to-there" class="slide level2">
|
||||||
|
<h2>From here to there 🧗</h2>
|
||||||
|
<ul>
|
||||||
|
<li>🟩 Merkle tree gadgets</li>
|
||||||
|
<li>🟩 Distributed lists</li>
|
||||||
|
<li>🟨 Tau ceremony or plonk</li>
|
||||||
|
<li>🟨 Hydra with latest plutus</li>
|
||||||
|
<li>🟨 Hydra with incremental de/-commits</li>
|
||||||
|
<li>🟨 A system for tx fee sponsorship</li>
|
||||||
|
<li>🟥 Wrap up into an dapp</li>
|
||||||
|
</ul>
|
||||||
|
<p><span style="font-size:1rem"> ( 🟩 easy — 🟨 more work needed — 🟥
|
||||||
|
even more work … ) </span></p>
|
||||||
|
</section></section>
|
||||||
<section>
|
<section>
|
||||||
<section id="why-this-should-win" class="title-slide slide level1">
|
<section id="why-this-should-win" class="title-slide slide level1">
|
||||||
<h1>Why this should win?</h1>
|
<h1>Why this 🏆<br/> should win?</h1>
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
<section id="the-judging-criteria" class="slide level2">
|
<section id="section-1" class="slide level2">
|
||||||
<h2>The judging criteria</h2>
|
<h2></h2>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Innovation and Necessity to the Cardano Blockchain Ecosystem
|
<li>Sudoku snark is true to the spirit of this hackathon and track: a
|
||||||
(20%)</li>
|
genuine zk dapp running on Cardano</li>
|
||||||
</ul>
|
<li>We are at the absolute bleeding edge of what is possible</li>
|
||||||
<p>This evaluates how novel and essential your solution is within the
|
<li>This PoC shows fundamental components for zk dapps on Cardano are
|
||||||
Cardano ecosystem. It looks at whether your idea is unique and if it
|
already here</li>
|
||||||
solves a critical need.</p>
|
<li>We have a clear roadmap from here to a killer zk dapp</li>
|
||||||
<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>
|
</ul>
|
||||||
</section></section>
|
</section></section>
|
||||||
<section>
|
<section>
|
||||||
<section id="as-for-the-team" class="title-slide slide level1">
|
<section id="the-team" class="title-slide slide level1">
|
||||||
<h1>As for the team</h1>
|
<h1>The team</h1>
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
<section id="waalge" class="slide level2"
|
<section id="waalge" class="slide level2"
|
||||||
|
@ -226,7 +310,7 @@ data-background-image="./assets/dp.jpg" data-background-opacity="0.3">
|
||||||
data-background-opacity="0.3"><span class="citation"
|
data-background-opacity="0.3"><span class="citation"
|
||||||
data-cites="waalge">@waalge</span></h2>
|
data-cites="waalge">@waalge</span></h2>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Cheif of <a href="https://kompact.io">Kompact.io</a></li>
|
<li>Chief of <a href="https://kompact.io">Kompact.io</a></li>
|
||||||
<li>2 years building around cardano (eg guchi.io)</li>
|
<li>2 years building around cardano (eg guchi.io)</li>
|
||||||
<li>Previously full stack dev, ML/NLP researcher</li>
|
<li>Previously full stack dev, ML/NLP researcher</li>
|
||||||
<li>PhD in geometry</li>
|
<li>PhD in geometry</li>
|
||||||
|
@ -242,6 +326,10 @@ data-cites="waalge">@waalge</span></h2>
|
||||||
<path
|
<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" />
|
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>
|
</svg> </a></p>
|
||||||
|
</section>
|
||||||
|
<section id="thank-you" class="slide level2">
|
||||||
|
<h2>Thank you 🙏</h2>
|
||||||
|
<p>Any questions? Please get in touch</p>
|
||||||
</section></section>
|
</section></section>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -399,7 +487,7 @@ data-cites="waalge">@waalge</span></h2>
|
||||||
mobileViewDistance: 2,
|
mobileViewDistance: 2,
|
||||||
|
|
||||||
// Parallax background image
|
// Parallax background image
|
||||||
parallaxBackgroundImage: './assets/background.avif', // e.g. "'https://s3.amazonaws.com/hakim-static/reveal-js/reveal-parallax-1.jpg'"
|
parallaxBackgroundImage: './assets/background.svg', // e.g. "'https://s3.amazonaws.com/hakim-static/reveal-js/reveal-parallax-1.jpg'"
|
||||||
|
|
||||||
// reveal.js plugins
|
// reveal.js plugins
|
||||||
plugins: [
|
plugins: [
|
||||||
|
|
|
@ -5,10 +5,15 @@
|
||||||
}
|
}
|
||||||
@font-face{
|
@font-face{
|
||||||
font-family:jetbrains-mono;src:local("jetbrains-mono"),
|
font-family:jetbrains-mono;src:local("jetbrains-mono"),
|
||||||
url(/fonts/JetBrainsMono-Medium.woff2) format("woff2");
|
url("./fonts/JetBrainsMono-Medium.woff2") format("woff2");
|
||||||
}
|
}
|
||||||
.black h2 {
|
.black h2 {
|
||||||
background-color: #020210;
|
background-color: #020210;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.reveal ul {
|
||||||
|
list-style-type: "❯";
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|
172
src/index.md
172
src/index.md
|
@ -6,21 +6,22 @@ mainfont: jetbrains-mono
|
||||||
# data-background-image: ./assets/background.jpg
|
# data-background-image: ./assets/background.jpg
|
||||||
# data-background-gradient: "linear-gradient(147deg, #000000 0%, #2c3e50 74%)"
|
# data-background-gradient: "linear-gradient(147deg, #000000 0%, #2c3e50 74%)"
|
||||||
# data-background-gradient: "radial-gradient(#283b95,#17b2c3)"
|
# data-background-gradient: "radial-gradient(#283b95,#17b2c3)"
|
||||||
background-image: ./assets/background.avif
|
# background-image: ./assets/background.avif
|
||||||
|
background-image: ./assets/background.svg
|
||||||
background-opacity: "0.35"
|
background-opacity: "0.35"
|
||||||
---
|
---
|
||||||
|
|
||||||
# How it started
|
# How it started
|
||||||
|
|
||||||
## There is hackathon on cardano 🥳 ...
|
## There is a hackathon on cardano 🥳 ...
|
||||||
|
|
||||||
## But wait! 🧐 There is a ZK track
|
## But wait! 🧐 There is a zk track
|
||||||
|
|
||||||
## Surely No!?
|
## Surely No!?
|
||||||
|
|
||||||
- Fundemtal primitives for any zk-alg are not available in plutus
|
- Fundamental primitives for any zk-alg are not available in plutus
|
||||||
- Midnight, the much hyped zk sidechain, is essentially in stealth mode
|
- Midnight, the much hyped zk sidechain, is essentially in stealth mode
|
||||||
- zk on cardano? not possible! 😵💫
|
- zk on Cardano? not possible! 😵💫
|
||||||
|
|
||||||
- Using some other chain for zk and bridging over
|
- Using some other chain for zk and bridging over
|
||||||
... that's _bridging_: we want _zk_
|
... that's _bridging_: we want _zk_
|
||||||
|
@ -35,99 +36,164 @@ background-opacity: "0.35"
|
||||||
- Finally merged during this hackathon
|
- Finally merged during this hackathon
|
||||||
|
|
||||||
> This PR adds new built-in types and functions to Plutus Core and PlutusTx
|
> This PR adds new built-in types and functions to Plutus Core and PlutusTx
|
||||||
> for pairings over BLS12-381, as specified in CIP-0381.
|
> for pairings over BLS12-381, as specified in CIP-0381
|
||||||
|
|
||||||
## What does this mean??
|
## What does this mean??
|
||||||
|
|
||||||
- [CIP-0381][cip-0381]: Plutus support for Pairings over `BLS12_381`
|
- [CIP-0381][cip-0381]: plutus support for pairings over `BLS12_381`
|
||||||
- In other words, plutus gets the builtins
|
- In other words plutus gets the built-ins
|
||||||
that make it possible to begin genuine zk on cardano
|
that make it possible to begin genuine zk on Cardano
|
||||||
|
|
||||||
[cip-0381]: https://cips.cardano.org/cips/cip0381/
|
[cip-0381]: https://cips.cardano.org/cips/cip0381/
|
||||||
|
|
||||||
## So Yes! We can zk on cardano
|
## So Yes! 🤯 <br/> We _can_ zk on cardano
|
||||||
|
|
||||||
## First hurdle
|
## First hurdle
|
||||||
|
|
||||||
- Only the primitives are provided; we need implement a zk-alg
|
- Only the primitives are provided; we need to implement a zk-alg
|
||||||
- Use it as the basis for a dapp
|
- Use it as the basis for a dapp
|
||||||
- And do both in a way that doesn't break the (tx exunits) bank
|
- And do both in a way that doesn't break the (ex-units) bank
|
||||||
|
|
||||||
## And then?
|
## 🤔 And then?
|
||||||
|
|
||||||
- Having zk in the latest version of plutus is one thing:
|
- Having zk in the latest version of plutus is one thing:
|
||||||
Running a zk dapp on cardano is quite another!
|
running a zk dapp on cardano is quite another!
|
||||||
|
|
||||||
- There is no chance of running these new primitives on
|
- There is no chance of running these new primitives on
|
||||||
Cardano mainnet any time soon
|
Cardano mainnet any time soon
|
||||||
|
|
||||||
## Not on L1, but ... hydra {data-background-image="./assets/hydra.png" data-background-opacity="0.3"}
|
## Not on L1, <br/> 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 Cardano-native 'isomorphic' L2
|
||||||
- Hydra is very much Cardano
|
- Loosely - it can run plutus just like mainnet
|
||||||
|
- But we could also run it with a modified version of plutus
|
||||||
|
- Thus we could run hydra with the latest plutus and deploy our zk dapp their
|
||||||
|
|
||||||
|
No need to wait for any hardforks!
|
||||||
|
|
||||||
## ... so we'd need to: 📋
|
## ... so we'd need to: 📋
|
||||||
|
|
||||||
- Create a zk validator
|
- Create a zk validator
|
||||||
- Create the related functionality to build relevant txs
|
- Create tx-building functionality
|
||||||
- Bump the various cardano libraries necessary to get hydra to run
|
- Bump all the Cardano libraries from plutus to hydra
|
||||||
the latest
|
- Build + deploy
|
||||||
- Deploy
|
|
||||||
|
|
||||||
(Do this all in less than three weeks, while keeping the day job 😅)
|
(Do all this in less than three weeks, while keeping the day job 😅)
|
||||||
|
|
||||||
# Sudoku snark
|
# Sudoku snark
|
||||||
|
|
||||||
## Aims
|
## 🎯 Aims
|
||||||
|
|
||||||
- Create a non trivial zk dapp on Cardano, that provides as a demonstrable PoC
|
- Create a non trivial zk dapp on Cardano ie demonstrable PoC
|
||||||
|
- Initial iteration of tooling/ stack
|
||||||
|
- Derisk more ambitious Cardano-based zk dapps
|
||||||
|
|
||||||
- The Dapp itself can be facile: its contribution is to derisk more ambitious dapps with stronger use cases
|
And conversely, non-aims:
|
||||||
|
|
||||||
## The game
|
- Larp a fantastical business based on unproven tech
|
||||||
|
|
||||||
- Competitive sudoku.
|
## The game: 🎲<br/> 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
|
- Trusted entity inits competition
|
||||||
|
- Contestants register
|
||||||
|
- Game master sets puzzle + multiple prizes
|
||||||
|
- Contestant claims a prize with proof of solution
|
||||||
|
|
||||||
|
By the powers of zk, the claim does not disclose the solution
|
||||||
|
|
||||||
# What next?
|
## The Snark: Groth16
|
||||||
|
|
||||||
# Why this should win?
|
Why [groth16][groth16paper]?
|
||||||
|
|
||||||
## The judging criteria
|
- Relatively mature
|
||||||
|
- Relatively simple
|
||||||
|
- Can be implemented with the new primitives in plutus
|
||||||
|
- Has the smallest proof size
|
||||||
|
|
||||||
- Innovation and Necessity to the Cardano Blockchain Ecosystem (20%)
|
All of these make it the right choice for a first zk snark alg
|
||||||
|
|
||||||
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.
|
[groth16paper]: https://eprint.iacr.org/2016/260.pdf
|
||||||
|
|
||||||
- Maturity of the Tech and Product (40%)
|
## Components ⚒️ tooling
|
||||||
|
|
||||||
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.
|
- [Arkworks][arkworks-gh] framework: generate groth16 setup and proofs
|
||||||
|
- Plutus-tx: handling plutus validators
|
||||||
|
|
||||||
- Go-to-Market Strategy, User Acquisition Strategy and Community Growth Strategy (20%)
|
[arkworks-gh]: https://github.com/arkworks-rs
|
||||||
|
|
||||||
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.
|
# How it's going?
|
||||||
|
|
||||||
- Team and Experience (20%)
|
## Links
|
||||||
|
|
||||||
## ..
|
- 🟩 rust-lib
|
||||||
|
- 🟩 haskell-lib
|
||||||
|
- 🟨 cardano-api
|
||||||
|
- 🟨 cardano-node
|
||||||
|
- 🟥 hydra
|
||||||
|
|
||||||
- Given that zk is
|
<span style="font-size:1rem"> ( 🟩 done --- 🟨 more progress required --- 🟥 much more to do ) </span>
|
||||||
- highly technical
|
|
||||||
- incredibly nacent in blockchain
|
|
||||||
- barely exists on cardano
|
|
||||||
- expecting a maturish product with a "go2market" strategy seemed ... ambitious
|
|
||||||
|
|
||||||
# As for the team
|
## What didn't get done?
|
||||||
|
|
||||||
|
- By far the most time was sunk dependency-wrangling Cardano libs,
|
||||||
|
trying to bump plutus version in a Cardano node
|
||||||
|
- We managed to have a dev cluster running
|
||||||
|
but key tx building features are missing for conway era
|
||||||
|
- No Cardano node ==> no hydra
|
||||||
|
|
||||||
|
## Other to-dos 📋
|
||||||
|
|
||||||
|
- Tau ceremony for setup
|
||||||
|
- Proper implementation for poseidon hash
|
||||||
|
- Select a fix for a replay attack _eg_ additional public input and using script context
|
||||||
|
- Complete constraints in circuit
|
||||||
|
- Sexy frontend _etc_
|
||||||
|
|
||||||
|
# Beyond sudoku snark
|
||||||
|
|
||||||
|
## Sudoku snark is probably not the killer zk app <br/> What is?
|
||||||
|
|
||||||
|
## 🕵️ Privacy on public ledgers
|
||||||
|
|
||||||
|
- Privacy on blockchains like Cardano is a problem (see articles _ad nauseum_)
|
||||||
|
- zk can make it harder to track who's transacting with whom
|
||||||
|
- There are L1s dedicated to resolving this like [zcash](https://z.cash/) and [monero](https://www.getmonero.org/)
|
||||||
|
- There are dapps on existing chains like [railgun](https://www.railgun.org/) on Eth
|
||||||
|
|
||||||
|
## Privacy on cardano
|
||||||
|
|
||||||
|
- Cardano needs a privacy solution
|
||||||
|
- This can be achieved with a zk dapp
|
||||||
|
- There are use cases for having this both on the L1 and on L2s
|
||||||
|
|
||||||
|
Sudoku snark gives us a foundation on tooling, zk gadgets, and even a choice of snark
|
||||||
|
|
||||||
|
## From here to there 🧗
|
||||||
|
|
||||||
|
- 🟩 Merkle tree gadgets
|
||||||
|
- 🟩 Distributed lists
|
||||||
|
- 🟨 Tau ceremony or plonk
|
||||||
|
- 🟨 Hydra with latest plutus
|
||||||
|
- 🟨 Hydra with incremental de/-commits
|
||||||
|
- 🟨 A system for tx fee sponsorship
|
||||||
|
- 🟥 Wrap up into an dapp
|
||||||
|
|
||||||
|
<span style="font-size:1rem"> ( 🟩 easy --- 🟨 more work needed --- 🟥 even more work ... ) </span>
|
||||||
|
|
||||||
|
# Why this 🏆<br/> should win?
|
||||||
|
|
||||||
|
##
|
||||||
|
|
||||||
|
- Sudoku snark is true to the spirit of this hackathon and track: a genuine zk dapp running on Cardano
|
||||||
|
- We are at the absolute bleeding edge of what is possible
|
||||||
|
- This PoC shows fundamental components for zk dapps on Cardano are already here
|
||||||
|
- We have a clear roadmap from here to a killer zk dapp
|
||||||
|
|
||||||
|
# The team
|
||||||
|
|
||||||
## @waalge {data-background-image="./assets/dp.jpg" data-background-opacity="0.3"}
|
## @waalge {data-background-image="./assets/dp.jpg" data-background-opacity="0.3"}
|
||||||
|
|
||||||
- Cheif of [Kompact.io](https://kompact.io)
|
- Chief of [Kompact.io](https://kompact.io)
|
||||||
- 2 years building around cardano (eg guchi.io)
|
- 2 years building around cardano (eg guchi.io)
|
||||||
- Previously full stack dev, ML/NLP researcher
|
- Previously full stack dev, ML/NLP researcher
|
||||||
- PhD in geometry
|
- PhD in geometry
|
||||||
|
@ -147,3 +213,9 @@ This looks at your plan to introduce your product to the market, how you plan to
|
||||||
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" />
|
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>
|
</svg>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
## Thank you 🙏
|
||||||
|
|
||||||
|
|
||||||
|
Any questions? Please get in touch
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue