cl-pitch/public/index.html

376 lines
12 KiB
HTML

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="generator" content="pandoc">
<title>Konduit.channel</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/dist/reset.css">
<link rel="stylesheet" href="https://unpkg.com/reveal.js/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;}
/* The extra [class] is a hack that increases specificity enough to
override a similar rule in reveal.js */
ul.task-list[class]{list-style: none;}
ul.task-list li input[type="checkbox"] {
font-size: inherit;
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/dist/theme/black.css" id="theme">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:ital,wght@0,100..800;1,100..800&display=swap" rel="stylesheet">
<style>
body {
font-family: "JetBrains Mono", monospace;
}
.reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6
{
font-family: "JetBrains Mono", monospace;
}
@font-face{
font-family: "JetBrains Mono", monospace;
font-weight: 600;
}
.black h2 {
background-color: #020210;
}
.reveal ul {
list-style-type: "- ";
}
.reveal .slides p {
margin: 2rem 0;
}
.reveal .slides blockquote > p {
text-align:center;
}
</style>
</head>
<body>
<div class="reveal">
<div class="slides">
<section id="title-slide" data-background-image="./assets/logo.png" data-background-opacity="0.3" data-background-size="contain">
<h1 class="title">Konduit.channel</h1>
<p class="subtitle">(Actually why all* dapps should be L2s)</p>
</section>
<section id="outline" class="slide level2">
<h2>Outline</h2>
<ul>
<li>What is …</li>
<li>Architecture</li>
<li>HTLs</li>
</ul>
</section>
<section id="what-is" class="slide level2">
<h2>What is …</h2>
<h3 id="konduit">Konduit?</h3>
<blockquote>
<p>A Cardano to Bitcoin Lighting Pipe</p>
</blockquote>
<!--
The first question is then "what is Bitcoin Lightning"
-->
<h3 id="bitcoin-lightning">Bitcoin Lightning?</h3>
<p>… a payment protocol built on the bitcoin intended to enable fast
transactions among participating nodes and has been proposed as a
solution to the bitcoin scalability problem.</p>
<!--
A slightly trucated opening lines from the wikipedia page.
Whoever provided or endorsed this version clearly thinks this point is moot.
-->
<h3 id="the-problem">The problem?</h3>
<p><img data-src="./assets/does-it-scale.jpg" /></p>
<ul>
<li>Scalability</li>
<li>Finality</li>
</ul>
<!--
You cannot walk into a cafe, say, and purchase a coffee on the L1.
Ok its probably fine (we have no traffic, long rollbacks don't happen. wink emoji).
But it shouldn't make sense: We cannot have all the nodes handling everyone's morning coffee purchase.
It does not scale.
In truth, we are not really competing with web2 on finality.
Payment providers can retroactively deny payments (no source).
-->
</section>
<section id="lightning" class="slide level2">
<h2>Lightning</h2>
<!--
A lightning round on Lightning network
-->
<h3 id="overview">Overview</h3>
<ul>
<li>A network of two party channels</li>
<li>L1: Each channel is “underwritten” by locked funds</li>
<li>L2: exchange messages altering how and who can claim these
funds</li>
</ul>
<!--
Lightning is a network of two party channels.
Each channel corresponds to a utxo holding the funds that underwrite L2 messages.
For example you could have a channel with the coffee shop,
and for each morning, you hand them (ie the L2) an IOU that allows
Ok. How is this a network?
Do i need a channel with everyone I want to pay? Whats the point.
An asside: This is a super interesting setup.
Subscriptions are "handwave" a trillion dollar and growing.
In some sectors we barely buy to own anymore. There's a
Shoe horning in another idea:
The topology of our networks should reflect their use case.
The L1 makes it as easy for anyone to pay anyone:
a very flexible basis, but this is basically nobodies use case.
I'm far more likely to pay somone i've already paid, than someone at random.
-->
<h3 id="hops">Hops</h3>
<ul>
<li>2 channels: Alice &lt;-&gt; Bob; Bob &lt;-&gt; Charlie</li>
<li>Alice ~&gt; Charlie ?</li>
<li>Alice ~&gt; Bob ~&gt; Charlie.</li>
<li>Problem: Naive hops require trust</li>
</ul>
<!--
How to make a set of channels a network.
-->
<h3 id="htlcs">HTLCs</h3>
<ul>
<li>Hashed TimeLocked Contract (also, utxo and general mechanism).</li>
<li>A contract parameterized by (<code>timeout</code>,
<code>lock</code>, <code>payer</code>, <code>payee</code> ) with two
spend:</li>
<li>Two spend pathways:
<ul>
<li>Ok:
<ul>
<li>Before <code>timeout</code>,</li>
<li>Has <code>secret</code> (<code>hash(secret) == lock</code>)</li>
<li>Signed by <code>payee</code></li>
</ul></li>
<li>Ko:
<ul>
<li>After <code>timeout</code>,</li>
<li>Has <code>payee</code></li>
</ul></li>
</ul></li>
</ul>
<!--
This is a basic implementation of an HTLC.
In practice we want to reuse the same locked funds multiple times,
and for values, timeouts, and locks that are not apriori known.
But ultimately, its some version of this.
This bit is the essence of an atomic swap.
-->
<h3 id="routes">Routes</h3>
<ul>
<li>C ~&gt; A : Invoice including lock.</li>
<li>A ~&gt; B : HTLC with timeout <code>T</code> and lock</li>
<li>B ~&gt; C : HTLC with timeout <code>T - d</code> and lock</li>
<li>C ~&gt; B : Secret</li>
<li>B ~&gt; C : Commitment to pay (no htlc)</li>
<li>B ~&gt; A : Secret</li>
<li>A ~&gt; B : Commitment to pay (no htlc)</li>
</ul>
<!--
This is the message flow
This is a basic implementation of an HTLC.
In practice we want to reuse the same locked funds multiple times,
and for values, timeouts, and locks that are not apriori known.
But ultimately, its some version of this.
This bit is the essence of an atomic swap.
-->
</section>
</div>
</div>
<script src="https://unpkg.com/reveal.js/dist/reveal.js"></script>
<!-- reveal.js plugins -->
<script src="https://unpkg.com/reveal.js/plugin/notes/notes.js"></script>
<script src="https://unpkg.com/reveal.js/plugin/search/search.js"></script>
<script src="https://unpkg.com/reveal.js/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.svg', // e.g. "'https://s3.amazonaws.com/hakim-static/reveal-js/reveal-parallax-1.jpg'"
// reveal.js plugins
plugins: [
RevealNotes,
RevealSearch,
RevealZoom
]
});
</script>
</body>
</html>