merge blog, merge essay, new /get, new /learn

This commit is contained in:
Jeremy Kauffman 2016-04-28 12:35:36 -04:00
parent 361e974d2a
commit db03e5e636
46 changed files with 961 additions and 591 deletions

View file

@ -20,4 +20,15 @@ class Actions
Actions::returnError($error);
}
}
protected static function isForRobot()
{
$bots = [
'bot', 'spider', 'crawler', 'siteexplorer', 'yahoo', 'slurp', 'dataaccessd', 'facebook', 'twitter', 'coccoc',
'calendar', 'curl', 'wget', 'panopta', 'blogtrottr', 'zapier', 'newrelic', 'luasocket',
'okhttp', 'python'
];
return preg_match('/(' . join('|', $bots) . ')/i', $_SERVER['HTTP_USER_AGENT']);
}
}

View file

@ -64,6 +64,8 @@ class Controller
return static::redirect('https://s3.amazonaws.com/files.lbry.io/osx/lbry.0.2.2.dmg', 307);
case '/lbry-linux-latest.deb':
return static::redirect('https://s3.amazonaws.com/files.lbry.io/linux/lbry_0.2.2_amd64.deb', 307);
case '/art':
return static::redirect('/what');
default:
$blogPattern = '#^/news(/|$)#';
if (preg_match($blogPattern, $uri))

View file

@ -3,7 +3,7 @@
class BlogActions extends Actions
{
const URL_STEM = '/news';
public static function executeIndex()
{
$posts = Blog::getPosts();
@ -28,12 +28,13 @@ class BlogActions extends Actions
'post' => $post
]];
}
public static function prepareAuthor(array $vars)
public static function prepareAuthorPartial(array $vars)
{
$post = $vars['post'];
return [
'authorName' => $post->getAuthorName(),
'photoImgSrc' => $post->getAuthorPhoto(),
'authorBioHtml' => $post->getAuthorBioHtml()
];
}

View file

@ -7,20 +7,20 @@
*/
class DownloadActions extends Actions
{
const OS_LINUX = 'linux',
OS_WINDOWS = 'windows',
const OS_ANDROID = 'android',
OS_IOS = 'ios',
OS_LINUX = 'linux',
OS_OSX = 'osx',
OS_ANDROID = 'android',
OS_IOS = 'ios';
OS_WINDOWS = 'windows';
public static function getOses()
{
return [
static::OS_WINDOWS => ['/windows', 'Windows', 'icon-windows', '_windows'],
static::OS_OSX => ['/osx', 'OS X', 'icon-apple', '_osx'],
static::OS_LINUX => ['/linux', 'Linux', 'icon-linux', '_linux'],
static::OS_ANDROID => ['/android', 'Android', 'icon-android', '_android'],
static::OS_OSX => ['/osx', 'OS X', 'icon-apple', '_osx'],
static::OS_WINDOWS => ['/windows', 'Windows', 'icon-windows', '_windows'],
static::OS_IOS => ['/ios', 'iOS', 'icon-ios', '_ios']
static::OS_IOS => ['/ios', 'iOS', 'icon-mobile', '_ios']
];
}
@ -28,10 +28,11 @@ class DownloadActions extends Actions
{
$osChoices = static::getOses();
$os = static::guessOs();
if (isset($osChoices[$os]))
if ($os && isset($osChoices[$os]))
{
list($uri, $osTitle, $osIcon, $partial) = $osChoices[$os];
return ['download/get2', [
return ['download/get', [
'os' => $os,
'osTitle' => $osTitle,
'osIcon' => $osIcon,
@ -40,11 +41,12 @@ class DownloadActions extends Actions
false
]];
}
return ['download/get', [
return ['download/get-no-os', [
'isSubscribed' => in_array(Mailchimp::LIST_GENERAL_ID, Session::get(Session::KEY_MAILCHIMP_LIST_IDS, []))
]];
}
public static function prepareListPartial(array $vars)
{
return $vars + ['osChoices' => isset($vars['excludeOs']) ?
@ -53,9 +55,9 @@ class DownloadActions extends Actions
];
}
//implement me!
protected static function guessOs()
{
//if exact OS is requested, use that
$uri = strtok($_SERVER['REQUEST_URI'], '?');
foreach(static::getOses() as $os => $osChoice)
{
@ -64,9 +66,27 @@ class DownloadActions extends Actions
return $os;
}
}
// $oses = ['linux', 'windows', 'osx', 'ios', 'android'];
$oses = ['linux', 'windows', 'osx'];
return $oses[rand(0, count($oses) - 1)];
if (static::isForRobot())
{
return null;
}
//otherwise guess from UA
$ua = $_SERVER['HTTP_USER_AGENT'];
if (stripos($ua, 'OS X') !== false)
{
return strpos($ua, 'iPhone') !== false || stripos($ua, 'iPad') !== false ? static::OS_IOS : static::OS_OSX;
}
if (stripos($ua, 'Linux') !== false || strpos($ua, 'X11') !== false)
{
return strpos($ua, 'Android') !== false ? static::OS_ANDROID : static::OS_LINUX;
}
if (stripos($ua, 'Windows') !== false)
{
return static::OS_WINDOWS;
}
return null;
}
// protected static function validateDownloadAccess()

View file

@ -81,6 +81,24 @@ class Post
}
}
public function getAuthorPhoto()
{
switch(strtolower($this->author))
{
case 'jeremy':
return 'jeremy-644x450.jpg';
case 'mike':
return 'mike-644x450.jpg';
case 'jimmy':
return 'jimmy-644x450.jpg';
case 'jack':
return 'jack-robison-644x450.jpg';
case 'lbry':
default:
return 'spooner-644x450.jpg';
}
}
public function getAuthorBioHtml()
{
switch(strtolower($this->author))

View file

@ -1,7 +1,9 @@
<section class="post-author-spotlight cover cover-dark cover-dark-grad">
<div class="content content-dark">
<div class="row-fluid">
<div class="span3">(photo)</div>
<div class="span3">
<img src="/img/<?php echo $photoImgSrc ?>" alt="<?php echo __('Photo of %name%', ['%name%' => $authorName]) ?>"/>
</div>
<div class="span9">
<div class="meta">Author</div>
<h3><?php echo $authorName ?></h3>

View file

@ -9,11 +9,14 @@
</div>
</div>
</div>
<section class="content spacer2">
<section class="content content-readable spacer2">
<?php foreach($posts as $post): ?>
<div class="spacer1">
<h3><a href="<?php echo $post->getRelativeUrl() ?>" class="link-primary"><?php echo $post->getTitle() ?></a></h3>
<div class="meta" title="<?php echo $post->getDate()->format('F jS, Y') ?>"><?php echo $post->getDate()->format('M j, Y') ?></div>
<div class="meta clearfix" title="<?php echo $post->getDate()->format('F jS, Y') ?>">
<span class="align-left"><?php echo $post->getDate()->format('M j, Y') ?></span>
<span class="align-right"><?php echo $post->getAuthorName() ?></span>
</div>
</div>
<?php endforeach ?>
</section>>

View file

@ -1,47 +1,49 @@
<?php Response::setMetaDescription($post->getTitle()) ?>
<?php echo View::render('nav/header') ?>
<main>
<section class="content spacer2">
<h1><?php echo htmlentities($post->getTitle()) ?></h1>
<div class="meta spacer1" title="<?php echo $post->getDate()->format('F jS, Y') ?>">
<div class="clearfix">
<div class="pull-left spacer1"><?php echo $post->getAuthorName() ?></div>
<div class="pull-right spacer1"><?php echo $post->getDate()->format('M j') ?></div>
<div class="post-content">
<section class="content spacer2">
<h1><?php echo htmlentities($post->getTitle()) ?></h1>
<div class="meta spacer1" title="<?php echo $post->getDate()->format('F jS, Y') ?>">
<div class="clearfix">
<div class="pull-left spacer1"><?php echo $post->getAuthorName() ?></div>
<div class="pull-right spacer1"><?php echo $post->getDate()->format('M j') ?></div>
</div>
</div>
</div>
<div class="post-content">
<?php echo $post->getContentHtml() ?>
</div>
</section>
<div class="post-content">
<?php echo $post->getContentHtml() ?>
</div>
</section>
<nav class="content prev-next row-fluid">
<div class="prev span6">
<?php if ($prevPost = $post->getPrevPost()): ?>
<div class="prev-next-label">
<a href="<?php echo $prevPost->getRelativeUrl() ?>" class="link-primary"> Previous</a>
</div>
<div class="meta">
<a href="<?php echo $prevPost->getRelativeUrl() ?>">
<?php echo htmlentities($prevPost->getTitle()) ?>
</a>
</div>
<?php endif ?>
</div>
<div class="next span6">
<?php if ($nextPost = $post->getNextPost()): ?>
<div class="prev-next-label">
<a href="<?php echo $nextPost->getRelativeUrl() ?>" class="link-primary">Next </a>
</div>
<div class="meta">
<a class="prev-next-title" href="<?php echo $nextPost->getRelativeUrl() ?>">
<?php echo htmlentities($nextPost->getTitle()) ?>
</a>
</div>
<?php endif ?>
</div>
</nav>
<nav class="content prev-next row-fluid">
<div class="prev span6">
<?php if ($prevPost = $post->getPrevPost()): ?>
<div class="prev-next-label">
<a href="<?php echo $prevPost->getRelativeUrl() ?>" class="link-primary"> Previous</a>
</div>
<div class="meta">
<a href="<?php echo $prevPost->getRelativeUrl() ?>">
<?php echo htmlentities($prevPost->getTitle()) ?>
</a>
</div>
<?php endif ?>
</div>
<div class="next span6">
<?php if ($nextPost = $post->getNextPost()): ?>
<div class="prev-next-label">
<a href="<?php echo $nextPost->getRelativeUrl() ?>" class="link-primary">Next </a>
</div>
<div class="meta">
<a class="prev-next-title" href="<?php echo $nextPost->getRelativeUrl() ?>">
<?php echo htmlentities($nextPost->getTitle()) ?>
</a>
</div>
<?php endif ?>
</div>
</nav>
</div>
<?php echo View::render('blog/author', [
<?php echo View::render('blog/_author', [
'post' => $post
]) ?>

View file

@ -1,4 +1,5 @@
<div class="spacer1">
<div class="notice notice-info spacer1">
<em>This is a pre-release, beta version of LBRY.</em>
Something something something.
It may crash, work unreliably, or inadvertently put a curse on your family for generations (a common programming error).
Use at your own risk.
</div>

View file

@ -1,3 +0,0 @@
<div class="cover cover-light content content-light">
<h2>Developers</h2>
</div>

View file

@ -0,0 +1,8 @@
<?php $reward = CreditApi::getCurrentTestCreditReward() ?>
<p>
Earn <?php echo i18n::formatCredits($reward) ?>* for completing the survey below after install.
</p>
<div class="meta spacer1">
*What is this worth? Who knows! But it is the largest reward we will <strong>ever</strong> offer to early adopters.
</div>

View file

@ -5,6 +5,7 @@
<p>
<a class="btn-primary" download href="//lbry.io/lbry-linux-latest.deb">Download .deb</a>
</p>
<div class="meta">Ubuntu, Debian, or any distro with <code>apt</code> or <code>dpkg</code>.</div>
</div>
<div class="span6">
<h3><strike>Masochists</strike> Professionals</h3>

View file

@ -1,11 +1,22 @@
<div class="cover cover-dark cover-dark-grad content content-dark">
<h3>Other Systems</h3>
<?php $title = isset($title) ? $title : __('Other Systems') ?>
<div class="cover cover-light-alt cover-light-alt-grad content content-light">
<h3><?php echo $title ?></h3>
<?php $buckets = array_fill(0, 3, []) ?>
<?php $columns = 2 ?>
<?php $index = 0 ?>
<?php foreach($osChoices as $osChoice): ?>
<?php ob_start() ?>
<?php list($url, $title, $icon) = $osChoice ?>
<h4>
<a href="<?php echo $url ?>" class="link-primary">
<span class="<?php echo $icon ?>"></span> <?php echo $title ?>
<span class="<?php echo $icon ?> icon-fw"></span><?php echo $title ?>
</a>
</h4>
<?php $buckets[floor($index++ / $columns)][] = ob_get_clean() ?>
<?php endforeach ?>
<?php foreach(array_filter($buckets) as $bucketRow): ?>
<div class="row-fluid-always">
<div class="span6"><?php echo implode('</div><div class="span6">', $bucketRow) ?></div>
</div>
<?php endforeach ?>
</div>

View file

@ -1,20 +1,15 @@
<?php $reward = CreditApi::getCurrentTestCreditReward() ?>
<div class="cover cover-light-alt cover-light-alt-grad content content-light">
<h1>Test and Earn</h1>
<?php echo View::render('download/feedback-prompt') ?>
<h3>Test Your Install</h3>
<ol>
<li>Double click the app (LBRY will open in your browser)</li>
<li>Search and stream <code>wonderfullife</code></li>
<li>Continue to play as you desire</li>
</ol>
<h3>Feedback</h3>
<p>
In addition to <?php echo i18n::formatCredits($reward) ?>, your feedback will be personally read by the developers and help signal
interest in LBRY to investors.
</p>
<a href="/feedback" class="btn-alt">Provide Your Feedback</a>
</div>
<h3>Test and Earn</h3>
<?php echo View::render('download/_feedbackPrompt') ?>
<ol>
<li>Open LBRY.</li>
<li>Search and stream <code>wonderfullife</code>. Continue to play as you desire.</li>
<li><a href="/feedback" class="btn btn-alt">Provide Your Feedback</a></li>
</ol>
<p>
In addition to <?php echo i18n::formatCredits($reward) ?>, your feedback will be personally read by the developers and help signal
interest in LBRY to investors.
</p>
<?php /*
<?php $reward = CreditApi::getCurrentTestCreditReward() ?>
<div class="cover cover-dark cover-dark-grad content content-dark">

View file

@ -0,0 +1,15 @@
<div class="<?php echo $cssClasses ?>">
<h3>Build With Us</h3>
<div class="row-fluid">
<div class="span6">
<h4>Humans</h4>
<p>Let's create a freer, more creative world.</p>
<?php echo View::render('social/_list') ?>
</div>
<div class="span6">
<h4>Wanna Be Robots</h4>
<p>Make with us. All LBRY code is open source.</p>
<?php echo View::render('social/_listDev') ?>
</div>
</div>
</div>

View file

@ -1 +1,14 @@
not avail
<br/>
<p>LBRY is coming out on your favorite platform soon. Join our list to know when.</p>
<div class="spacer2">
<?php echo View::render('mail/joinList', [
'submitLabel' => 'Go',
'returnUrl' => '/get',
'meta' => true,
'listId' => Mailchimp::LIST_GENERAL_ID,
'mergeFields' => ['CLI' => 'No'],
]) ?>
</div>
<p>Can't wait? View the source and compile instructions on
<a href="https://github.com/lbryio/lbry" class="link-primary">GitHub</a>.
</p>

View file

@ -0,0 +1,3 @@
<div class="video">
<iframe width="560" height="315" src="https://www.youtube.com/embed/BNtivEJKHxI" frameborder="0" allowfullscreen></iframe>
</div>

View file

@ -1,9 +0,0 @@
<?php $reward = CreditApi::getCurrentTestCreditReward() ?>
<p>
Regardless of whether you got LBRY to run or not, your feedback is immensely valuable.
Everyone who made <em>any</em> effort to install and complete the survey below will receive <?php echo i18n::formatCredits($reward) ?>*.
</p>
<div class="meta spacer1">
*What is this worth? Who knows! But it will be the largest reward we will <strong>ever</strong> offer to early adopters.
</div>

View file

@ -0,0 +1,17 @@
<?php Response::setMetaDescription('Download or install the latest version of LBRY.') ?>
<?php Response::setMetaTitle(__('Get LBRY')) ?>
<?php echo View::render('nav/header', ['isDark' => false]) ?>
<main class="column-fluid">
<div class="span6">
<?php echo View::render('download/_list', [
'title' => __('Select an OS')
]) ?>
</div>
<div class="span6">
<?php $socialCssClasses = 'cover cover-dark cover-dark-grad content content-dark' ?>
<?php echo View::render('download/_social', [
'cssClasses' => $socialCssClasses
]) ?>
</div>
</main>
<?php echo View::render('nav/footer') ?>

View file

@ -1,60 +1,31 @@
<?php Response::setMetaDescription('Download or install the latest version of LBRY.') ?>
<?php Response::setMetaTitle(__('Get LBRY')) ?>
<?php Response::setMetaDescription(__('Download/install the latest version of LBRY for %os%.', ['%os%' => $osTitle])) ?>
<?php NavActions::setNavUri('/get') ?>
<?php echo View::render('nav/header', ['isDark' => false]) ?>
<main class="column-fluid">
<div class="span6">
<div class="cover cover-dark cover-dark-grad">
<div class="content content-dark">
<div class="meta meta-large">
<span class="icon-linux"></span> <span class="icon-apple"></span>
</div>
<h1><?php echo __('I use OS X or Linux and am prepared to have my world rocked.') ?></h1>
<p class="pflow">Earn early adopter rewards for downloading our Alpha client.</p>
<div class="spacer1">
<?php echo View::render('mail/joinList', [
'submitLabel' => 'Go',
'listId' => Mailchimp::LIST_GENERAL_ID,
'mergeFields' => ['CLI' => 'Yes'],
'fbEvent' => 'Alpha',
'returnUrl' => '/get?email=1',
'btnClass' => 'btn-alt'
]) ?>
</div>
<?php if (!$isSubscribed): ?>
<div class="meta">
Already signed up or really hate sharing your email? <a href="/get?email=1" class="link-primary">Click here.</a>
</div>
<?php else: ?>
<div class="content-inset">
<ul class="no-style">
<li>
<a href="/linux" class="link-primary"><span class="icon-linux"></span> Linux</a>
</li>
<li>
<a href="/osx" class="link-primary"><span class="icon-apple"></span> OS X</a>
</li>
</ul>
</div>
<?php endif ?>
</div>
<div class="span7">
<div class="cover cover-light content">
<h1>LBRY for <?php echo $osTitle ?> <span class="<?php echo $osIcon ?>"></span></h1>
<?php if ($downloadHtml): ?>
<?php $socialCssClasses = 'cover cover-light content content-light' ?>
<?php echo View::render('download/_betaNotice') ?>
<?php echo $downloadHtml ?>
<?php echo View::render('download/_reward') ?>
<?php else: ?>
<?php $socialCssClasses = 'cover cover-dark cover-dark-grad content content-dark' ?>
<?php echo View::render('download/_unavailable') ?>
<?php endif ?>
</div>
</div>
<div class="span6">
<div class="cover cover-light">
<div class="content">
<div class="meta meta-large">
<span class="icon-mobile"></span> <span class="icon-windows"></span> <span class="icon-android"></span>
</div>
<h1><?php echo __('I want LBRY for mobile or Windows and would like my world-rocking at the earliest possible convenience.') ?></h1>
<p class="pflow">LBRY is coming out on your favorite platform soon. Join our list to know when.</p>
<?php echo View::render('mail/joinList', [
'submitLabel' => 'Go',
'returnUrl' => '/get',
'listId' => Mailchimp::LIST_GENERAL_ID,
'mergeFields' => ['CLI' => 'No'],
]) ?>
</div>
</div>
<div class="span5">
<?php echo View::render('download/_list', [
'excludeOs' => $os
]) ?>
<?php $socialCssClasses = 'cover cover-dark cover-dark-grad content content-dark' ?>
<?php echo View::render('download/_social', [
'cssClasses' => $socialCssClasses
]) ?>
</div>
</main>
<?php echo View::render('nav/footer') ?>

View file

@ -1,28 +0,0 @@
<?php Response::setMetaDescription(__('Download/install the latest version of LBRY for %os%.', ['%os%' => $osTitle])) ?>
<?php NavActions::setNavUri('/get') ?>
<?php echo View::render('nav/header', ['isDark' => false]) ?>
<main class="column-fluid">
<div class="span6">
<div class="cover cover-light content">
<h1>LBRY for <?php echo $osTitle ?> <span class="<?php echo $osIcon ?>"></span></h1>
<?php if ($downloadHtml): ?>
<?php echo View::render('download/_betaNotice') ?>
<?php echo $downloadHtml ?>
<?php else: ?>
<?php echo View::render('download/_unavailable') ?>
<?php endif ?>
</div>
<?php if ($downloadHtml): ?>
<?php echo View::render('download/_reward') ?>
<?php endif ?>
</div>
<div class="span6">
<?php echo View::render('download/_list', [
'excludeOs' => $os
]) ?>
<?php echo View::render('download/_developers') ?>
</div>
</main>
<?php echo View::render('nav/footer') ?>

View file

@ -1,9 +1,10 @@
<?php if (!defined('HEADER_RENDERED')): ?>
<?php define('HEADER_RENDERED', 1) ?>
<?php extract([
'isDark' => false
'isDark' => false,
'isAbsolute' => false
], EXTR_SKIP) ?>
<div class="header <?php echo $isDark ? 'header-dark' : 'header-light' ?>">
<div class="header <?php echo $isAbsolute ? 'header-absolute' : '' ?> <?php echo $isDark ? 'header-dark' : 'header-light' ?>">
<div class="header-content">
<a href="/" class="primary-logo">
<img src="<?php echo $isDark ? View::imagePath('header-logo-light.png') : View::imagePath('header-logo-dark2.png') ?>" alt="LBRY" />

View file

@ -15,22 +15,15 @@
</tr>*/ ?>
<tr>
<td>
<a href="/get" class="btn-alt btn-full-width"><?php echo __('Test') ?></a>
<a href="/get" class="btn-alt btn-full-width"><?php echo __('Try LBRY') ?></a>
</td>
<td>
<?php echo __('Test LBRY and earn credits.') ?>
</td>
</tr>
<tr>
<td>
<a href="/join-list" class="btn-alt btn-full-width"><?php echo __('Subscribe') ?></a>
</td>
<td>
<?php echo __('Know when LBRY launches.') ?>
<?php echo __('Experience digital abundance.') ?>
</td>
</tr>
</table>
<ul>
<li><a href="/join-list" class="link-primary"><?php echo __('Subscribe to our email list') ?></a>.</li>
<li>Join us on <a href="//twitter.com/lbryio" class="link-primary"><span class="btn-label">Twitter</span><span class="icon icon-twitter"></span></a>,
<a href="//facebook.com/lbryio" class="link-primary"><span class="btn-label">Facebook</span><span class="icon icon-facebook"></span></a>,
or <a href="//reddit.com/r/lbry" class="link-primary"><span class="btn-label">Reddit</span><span class="icon icon-reddit"></span></a>.</li>
@ -40,14 +33,14 @@
<h3><?php echo __('I Want To Know More') ?></h3>
<ul>
<?php if ($_SERVER['REQUEST_URI'] != '/what'): ?>
<li>Learn about <a href="/what" class="link-primary">exactly what LBRY is</a>.</li>
<?php endif ?>
<?php if ($_SERVER['REQUEST_URI'] != '/why'): ?>
<li>Read about <a href="/why" class="link-primary">why we've created LBRY</a>.</li>
<li>Read "<a href="/what" class="link-primary">Art in the Internet Age</a>", an introductory essay.</li>
<?php endif ?>
<?php if ($_SERVER['REQUEST_URI'] != '/team'): ?>
<li>Find out about <a href="/team" class="link-primary">the team behind LBRY</a>.</li>
<?php endif ?>
<?php if ($_SERVER['REQUEST_URI'] != '/news'): ?>
<li>Check out the latest <a href="/news" class="link-primary">news</a>.</li>
<?php endif ?>
</ul>
</div>
</div>

View file

@ -1,235 +0,0 @@
<main>
<div class="cover cover-dark cover-center cover-full" style="background-image:url(/img/altamira-bison.jpg)">
<h1 class="cover-title">Art in the Internet Age</h1>
<div class="cover-subtitle">
by <em>Jeremy Kauffman</em>, <em>Michael Zargham</em>, and <em>Jack Robison</em>
</div>
</div>
<div class="content content-readable">
<section>
<h2>Introduction</h2>
<p>In 34,000 B.C., there were cave paintings. And thats it. When you came home from a sweltering August day of foraging along the Vézère river, the only form of non-live art or entertainment available was something like the above buffalo.</p>
<p>Today, we live in a world of near infinite choices. This is true not just for art but for all kinds of things (like potato chips). Since the era of cave art, humanity has incessantly and progressively trended towards interconnected, more efficient, and increasingly transparent markets. This undercurrent of connectedness and openness has affected everything human beings produce.</p>
<p>Nerds like us like to speculate about the end-game of this trend with others on the internet. What will society be like when we have a "Star Trek"-like capacity to instantly and freely replicate anything that exists? The term for this society is <em>post-scarcity</em><sup><a href="#note-post-scarcity">1</a></sup>.</p>
<p>Generally, post-scarcity is regarded as fantastical; something that will never happen in our lifetimes. Except for one area: digital goods.</p>
<p>Art in the internet age is infinitely reproducible and easily shared. This is a sea change from any prior time in history. Previously, vinyl records captured audio in physical grooves; tapes captured data on magnetic strips; compact disks held digital files read by lasers—in each of these cases physical, medium-specific hardware is required to both produce and recover the bits of data that made up the digital content. </p>
<p>Today art is just data, a string of 1s and 0s, a <em>number</em>, and we no longer need any specialized hardware to decode and enjoy digital content. We use the same technological methods to access a personal photograph a single time as we do to watch a blockbuster on Netflix.</p>
<p>This is a big step forward from the past. As production costs fall to zero, choices go up. Digital distributors provide virtually every song, film, photo or book for purchase and download to any internet enabled device. Technology has decreased the cost of production, too -- it has never been easier for aspirant artists to achieve a following through self-publishing.</p>
<p>The digitization of art has added a lot of value to both content creators and consumers, reducing costs and increasing choice. This transition is still in its infancy. With LBRY, were going to make it a little more mature.</p>
<footer id="note-post-scarcity"><sup>1</sup> Note that post-scarcity does not eliminate the need to create <em>new</em> goods, it just eliminates or reduces the costs of <em>duplicating</em> goods to nothing. As long as people desire goods that did not previously exist, there will always be a market demand for creation, even in a post-scarcity world.</footer>
</section>
<section>
<h2>A Peoples Marketplace</h2>
<p>LBRY is the first digital marketplace to be controlled by the markets participants rather than a corporation or other 3rd-party. It is the most open, fair, and efficient marketplace for digital goods ever created, with an incentive design encouraging it to become the most complete.</p>
<p>At the highest level, LBRY does something extraordinarily simple. LBRY creates an association between a unique name and a piece of digital content, such as a movie, book, or game. This is similar to the domain name system that you are most likely using to access this very post.</p>
<div class="text-center meta spacer1">
<img src="/img/lbry-ui.png"/>
<div class="content-inset">
A user searches and prepares to stream and the film <em>Its a Wonderful Life</em>, located at <a href="lbry://wonderfullife">lbry://wonderfullife</a>, via a completely decentralized network. Try it out for yourself at <a href="http://lbry.io/get">lbry.io/get</a>.
</div>
</div>
<p>However, LBRY does this not through a proprietary service or network, but as a <em>protocol</em>, or a method of doing things, much like HTTP, DNS and other specifications that make up the internet itself. Just as many different domains owned by many different companies all speak a shared language, so too can any person or company speak LBRY. No special access or permission is needed.</p>
<p>LBRY differs from the status quo in three big ways:</p>
<ol>
<li><strong>Coupled payment and access</strong>. If desired, the person who publishes to <a href="lbry://wonderfullife">lbry://wonderfullife</a> can charge a fee to users that view the content. </li>
<li><strong>Decentralized and distributed</strong>. Content published to LBRY is not specific to one computer or network. No one party, including us, can unilaterally remove or block content on the LBRY network.
(If it worries you that LBRY could facilitate unsavory content, this is discussed in its own section.)</li>
<li><strong>Domain names are controlled via ongoing auction</strong>. This facilitates names being controlled by the publishers that value them most. These transactions take place via an electronic currency called LBRY credits, or <em>LBC</em>. This is covered in more detail, below.</li>
</ol>
<p>While creating a protocol that we ourselves cannot control sounds chaotic, it is actually about establishing trust. Every other publishing system requires trusting an intermediary that can unilaterally change the rules on you. What happens when you build your business on YouTube or Amazon and they change fees? Or Apple drops your content because the Premier of China thought your comedy went to far?</p>
<p>Only LBRY consists of a known, promised set of rules that no one can unilaterally change. LBRY provides this by doing something unique: leaving the <em>users</em> in control rather than demanding that control for itself.</p>
</section>
<section>
<h2>A Sample Use</h2>
<p>Lets look at a sample use of LBRY, Ernest releasing a film on LBRY that is later purchased and viewed by Hilary. </p>
<ol>
<li>Ernest wants to release his comedy-horror film, <em>Ernie Goes To Guantanamo Bay</em>.</li>
<li>The content is encrypted and sliced into many pieces. These pieces are stored by hosts.</li>
<li>Ernest reserves <a href="lbry://erniebythebay">lbry://erniebythebay</a>, a name pointing to his content.</li>
<li>When Ernest reserves the location, he also submits metadata, such as a description and thumbnail.</li>
<li>Hillary, a user, browses the LBRY network and decides she wants to watch the film.</li>
<li>Hillary issues a payment to Ernest for the decryption key, allowing her to watch the film.</li>
<li>Hillarys LBRY client collects the pieces from the hosts and reassembles them, using the key to decrypt the pieces (if necessary). This is transparent to Hillary, the film streams within a few seconds after purchase.</li>
</ol>
<p>This is a lot like an interaction that can happen on many different sites on the web, except that this one happens via a network that is completely decentralized. The data and technology that makes the entire interaction possible is not reliant on nor controlled by any single entity (as it would be via YouTube, Amazon, etc.).</p>
<h2>The LBRY Network</h2>
<p>To understand precisely what LBRY is and why it matters, one must understand both LBRY as a protocol and the services the protocol enables. HTTP is the protocol that makes web browsing possible, but it would be of little interest without the service of a web browser!</p>
<p>To understand LBRY, think of LBRY in terms of two layers: <em>protocol</em> and <em>service.</em> The protocol provides a fundamental, underlying technological capability. The service layer utilizes the protocol to do something that a human being would actually find useful.</p>
<p>For a user using LBRY at the service level, the magic of what the LBRY protocol does will be largely transparent, much as a typical internet user sees nothing of how HTTP works. Via a LBRY application, a user will be able to open a familiar interface to quickly and easily discover and purchase a piece of digital content published by anyone in the world.</p>
<p>However, such an application would not be possible without the LBRY the underlying layer, the LBRY protocol.</p>
<h3>Layer 1: Protocol</h3>
<p>While the protocol is one comprehensive set of rules, it is easier to understand as two parts.</p>
<h4>Part A: The LBRY Blockchain</h4>
<p>A <em>blockchain</em>, or <em>distributed ledger</em> is the key innovation behind the Bitcoin network. Blockchains solved the very complicated technological problem of having a bunch of distributed, disparate entities all agree on a rivalrous state of affairs (like how much money they owe each other).</p>
<p>Like Bitcoin, the LBRY blockchain maintain balances -- in this case, balances of <em>LBC</em>, LBRYs unit of credit. More importantly, the LBRY blockchain also provides a decentralized lookup and metadata storage system. The LBRY blockchain supports a specific set of commands that allows anyone to bid (in LBC) to control a LBRY <em>name</em>, which is a lot like a domain name. Whoever controls a name gets to describe what it contains, what it costs to access, who to pay, and where to find it. These names are sold in a continuous running auction. We will talk more about this system a little later on.</p>
<p>If youre a programmer, you might recognize the LBRY blockchain as a <em>key-value store</em>. Each key, or name, corresponds to a value, or a metadata entry. Whichever party or parties bid the most LBC gets to control the metadata returned by a key lookup.</p>
<p>Here is a sample key-value entry in the LBRY blockchain. Here, wonderfullife is the key, and the rest of the description is the value.</p>
<div class="code-bash">
<code><pre style="white-space: pre-wrap;">
<span class="code-bash-kw1">wonderfullife</span> : {
<span class="code-bash-kw2">title</span>: "Its a Wonderful Life",
<span class="code-bash-kw2">description</span>: "An angel helps a compassionate but despairingly frustrated businessman by showing what life would have been like if he never existed.",
<span class="code-bash-kw2">thumbnail</span>: "http://i.imgur.com/MW45x88.jpg",
<span class="code-bash-kw2">license</span>: "public domain",
<span class="code-bash-kw2">price</span>: 0, <span class="code-bash-comment">//free!</span>
<span class="code-bash-kw2">publisher</span>: "A Fan Of George Bailey", <span class="code-bash-comment">//simplification</span>
<span class="code-bash-kw2">sources</span>: { <span class="code-bash-comment">//extensible, variable list</span>
<span class="code-bash-kw2">lbry_hash</span> : &lt;unique id&gt;,
<span class="code-bash-kw2">url</span> : &lt;url&gt;
}
}</pre></code>
</div>
<div class="meta text-center content-inset"><p>A slightly simplified sample entry of metadata in the LBRY blockchain. Whichever party or parties bid the most in an ongoing auction control what a name returns.</p></div>
<p>Other than the usage of the LBRY blockchain to store names and metadata, there are only minor differences between the blockchains of LBRY and Bitcoin, and the changes are generally consensus improvements. Weve buffed the hashing algorithm, smoothed the block reward function, increased the block size, increased the total number of credits, and prepared for offchain settlement.</p>
<p>The LBRY blockchain simply maintains LBC balances and a content namespace/catalogue. The next part, LBRYnet, specifies what to do with this data. To compare to the existing web, the blockchain is like the domain system (it maintains a listing of what is available), while the next piece makes it possible to actually fetch and pay for content.</p>
<footer> If youre a Bitcoiner wondering why we dont use the Bitcoin blockchain, you can read a detailed answer to that question <a href="https://blog.lbry.io/why-doesnt-lbry-just-use-bitcoin/">here</a>.</footer>
<h4>Part B: The Data Network (LBRYNet)</h4>
<p>LBRYNet is the layer that makes the LBRY blockchain useful beyond a simple payment system. It says what to do with the information available in the LBRY blockchain, how to issue payments, how to look up a content identifier, and so on. </p>
<p>To use the LBRY network, a users computer needs the capacity to speak LBRY. That layer is LBRYNet. Just as your computer has a library that enables it to understand HTTP, DNS, and other languages and protocols, LBRYNet is the piece of software that allows your computer to understand how to interact with the LBRY network.</p>
<p>To understand what role LBRYNet plays, lets drill a little more into a sample user interaction. Once a user has affirmed access and purchase, such as in step 5 of our Sample Use above, the following happens:</p>
<ol>
<li>LBRYNet issues a lookup for the name associated with the content. If the client does not have a local copy of the blockchain, this lookup is broadcast to miners or to a service provider. This lookup acquires the metadata associated with the name.</li>
<li>LBRYNet issues any required payments, as instructed by metadata entries.
<ol>
<li>If the content is set to free, nothing happens here.</li>
<li>If the content is set to have a price in LBC, the client must issue a payment in LBC to the specified address. If the content is published encrypted, LBRYNet will not allow access until this payment has been issued.</li>
<li>If the content is set to have another payment method, the seller must run or use a service that provides a private server enforcing payment and provisioning accessing keys.</li>
</ol>
</li>
<li>Simultaneous to #2, LBRYNet uses the metadata to download the content itself.
<ol>
<li>The metadata allows chunks to be discovered and assembled in a BitTorrent-like fashion. However, unlike BitTorrent, chunks do not individually identify themselves as part of a greater whole. Chunks are just arbitrary pieces of data.</li>
<li>If LBRYNet cannot find nodes offering chunks for free, it will offer payments for chunks to other hosts with those chunks.</li>
<li>This payment is not done via proof-of-bandwidth, or third-party escrow. Instead, LBRYNet uses reputation, trust, and small initial payments to ensure reliable hosts. </li>
<li>If content is not published directly to LBRY, the metadata can instruct other access methods, such as a Netflix URL. This allows us to catalogue content not yet available on LBRY as well as offer legacy and extensibility purposes.</li>
</ol>
</li>
</ol>
<h3>Layer 2: Services</h3>
<p>Services are what actually make the LBRY protocol <em>useful. </em>While the LBRY protocol determines what is possible, it is the services that actually do things.</p>
<p>While the protocol is determined, open, and fixed, the service layer is much more flexible. It is far easier to redesign a website than it is to revise the HTTP protocol itself. The same is true here.</p>
<p>Additionally, just as in the early days of the internet the later direction of web would have been unfathomable, so too may the best uses of LBRYs namespace or technology be undiscovered. However, here are some clear uses.</p>
<h4>Applications and Devices</h4>
<p>A LBRY application is how a user would actually have meaningful interactions with the LBRY network. A LBRY client packages the power of the LBRY protocol into a simple application that allows the user to simply search for content, pay for it when necessary, download and enjoy.</p>
<p>Additionally, a LBRY client can allow users to passively participate in the network, allowing them to automatically earn rewards in exchange for contributing bandwidth, disk space, or processing power to the overall network.</p>
<p>Applications beyond a traditional computer based browser are possible as well. A LBRY television dongle, a LBRY radio, and any number of existing content access mechanisms can be implemented via an analogous LBRY device.</p>
<h4>Content Discovery</h4>
<p>Although the namespace provided by the LBRY protocol is helpful towards discovery, much as the web would be much less useful without search engines or aggregators, LBRY needs its own discovery mechanisms.</p>
<p>Search features can be constructed from the catalogue of metadata provided in the blockchain as well as the content transaction history available in the blockchain or observed on the network. All of this data, along with user history, allows for the creation of content recommendation engines and advanced search features.</p>
<p>Discovery on LBRY can also take the form of featured content. Clients can utilize featured content to provide additional visibility for new content that consumers might not otherwise be looking for.</p>
<h4>Content Distribution</h4>
<p>Digital content distributors with server-client models are subject to the whims of internet service providers and hostile foreign governments. Traffic from the host servers can be throttled or halted altogether if the owners of cables and routers so choose. However, in case of the LBRY protocol content comes from anywhere and everywhere, and is therefore not so easily stifled. </p>
<p>Additionally, the market mechanisms of LBRY create a strong incentive for efficient distribution, which will save the costs of producers and ISPs alike. These properties, along with LBRYs infringement disincentivizing properties, make LBRY an appealing technology for large existing data or content distributors.</p>
<h4>Transaction Settlement</h4>
<p>While payments can be issued directly on the LBRY blockchain, the LBRY protocol encourages a volume of transactions that will not scale without usage of offchain settlement.</p>
<p>Essentially, rather than issue a transaction to the core blockchain, transactions are issued to a 3rd-party provider. These providers have a substantial number of coins which are used to maintain balances internally and settle a smaller number of transactions to the core chain. In exchange, these providers earn a small fee, less than the fee required to issue the transaction directly to the blockchain.</p>
<h2>LBRY Credits</h2>
<p>LBRY Credits, or <em>LBC</em>, are the unit of account for LBRY. Eventually 1,000,000,000 LBC will exist, according to a defined schedule over 20 years. The schedule decays exponentially, with around 100,000,000 in the first year.</p>
<p>Additionally, some credits are awarded on a fixed basis. The total break down looks like this:</p>
<ul>
<li>10% are used to peg LBC to Bitcoin, likely via a sidechain. This will allow LBRY to leverage the security of the Bitcoin blockchain, and incentive adoption from Bitcoin users.</li>
<li>10% for organizations, charities, and other strategic partners. Organizations the EFF, ACLU, and others that have fought for digital rights and the security and freedom of the internet.</li>
<li>10% for adoption programs. Well be giving out lots of bonus credits, especially in the early days of LBRY, in order to encourage participation. We will also look to award credits broadly, ensuring the marketplace is egalitarian.</li>
<li>10% for us. For operational costs as well as profit.</li>
<li>60% earned by LBRY users, via mining the LBRY cryptocurrency.</li>
</ul>
</section>
<section>
<h2>More on Naming</h2>
<p>LBRY names are one of the most unique aspects of LBRY and one that we believe will play a big role in helping it succeed.</p>
<p>Control of a LBRY name is awarded via a <em>continuous running auction </em>in LBC. Bids are entered into a <em>trustless escrow</em>, marking the credits as unspendable, but leaving them intact. When a user looks up a name, the name resolves to the largest bid made by a party or parties. The ability for any number of people to have a say in where a name resolves is part of what makes LBRY a system controlled by its users. As the credits are distributed primarily among users and producers, it is community itself that has ultimate controls over the catalogue of what is available.</p>
<p>Additionally, bids can also be retracted at any time, even if youre the current winning bidder. To prevent a name from rapidly switching between multiple resolutions, the parties that have existing control of a name have a reasonable period of time to respond to counter bids before a names resolution switches.</p>
<p>Its possible this system sounds like chaos to you, but were betting on a Nobel-prize winning result that predicts the opposite. Economist Ronald Coase theorized that in a system with low transaction cost and clear rules, property will be held by those who value it the most. Since LBRY names are the equivalent to content storefronts, we believe that LBRY names will hold the most value to rightsholders who produce content associated with a given name.</p>
<p>As names in demand on LBRY will be more expensive, the names themselves will also serve as a signal of reputation, legitimacy, and quality. If a user searches LBRY for <em>Spider Man</em> and sees one at lbry://spiderman and one at lbry://spiderman_russhaxor, there will be little doubt that the latter is less legitimate. </p>
<footer><p>It is also worth noting that in the event that LBRY received notice that either name contained an illegitimate copy of <em>Spider Man</em>, LBRY would dutifully and quickly put that content id on a blacklist, blocking discovery or purchase via any legal services. LBRY and users of LBRY are still subject to the DMCA and other relevant laws of their respective countries.</p></footer>
<h2>Combatting The Ugly</h2>
<p>As neither naïfs nor knaves, we acknowledge that LBRY can be used for bad ends. Technology is frequently this way. Encryption protects our privacy -- as well as that of terrorists. Cars allow us to travel marvelous distances -- and kill millions per year.</p>
<p>The downside to LBRY is that it can be used to exchange illegal content. However, several factors of LBRY make illicit usage less likely than it may seem at first consideration. On the whole, as with the car and encryption, the benefits of LBRY clearly outway nefarious uses.</p>
<p>To evaluate a technologys effect, we must consider where it moves us from the current state of affairs, not judge against a Platonic ideal or past eta. In assessing LBRY, we must compare it to a world in which BitTorrent already exists and is quite popular, not the 1950s. LBRY is an improvement over BitTorrent in combatting unsavory content in at least five ways:</p>
<ol><li><strong>More records. </strong>LBRY contains a public ledger of transactions recording name purchases and content publishings. As many purchases make it onto the ledger as well, this means infringing actions are frequently recorded <em>forever, </em>or are at a minimum widely observable.</li>
<li><strong>Unilateral removal.</strong> The LBRY naming system allows for quick, unilateral acquisition of infringing URIs. Once a BitTorrent magnet hash is in the wild, there is no mechanism to update or alter its resolution whatsoever. If a LBRY name is pointing to infringing content, it can be seized according to clear rules. </li>
<li><strong>Blacklists</strong>. LBRY will publish and maintain a blacklist of infringing names. All clients we release and all legal clients will have to follow our blacklist, or one like it, or face substantial penalties. Especially because…</li>
<li><strong>Stiffer penalties. </strong>Penalties for profiting off of infringement are far stronger and involve can involve jail time, while infringement without profit only results in statutory damages. This serves as a far stronger deterrent for all infringing uses than BitTorrent provides.</li>
<li><strong>Expensive or impossible. </strong>Offchain settlement will be a requirement for efficient purchases at any significant network size. Settlement providers, ourselves included, will be able to block purchases for infringing content. At significant traffic volume, if infringing content cant be outright removed or blocked, transaction fees will make it prohibitively expensive.</li>
</ol>
<p>And of course, lets not forget that LBRY users are still subject to the DMCA and other laws governing intellectual property. Users who publishing infringing content are still subject to penalties for doing so in exactly the same way they would be via BitTorrent. LBRY only adds to the suite of options available. This makes LBRY a strict improvement over BitTorrent with regards to illegal usages, which provides none of the mechanisms listed.</p>
</section>
<section>
<h2>Our Values</h2>
<p>We want to be the first digital content marketplace to:</p>
<ol>
<li><strong>Treat users like adults</strong> LBRY doesnt play nanny. It encourages individual people to express their own preferences, rather than force our own onto them. We enable consumers to make their own choices about where and who they want to purchase digital content from.</li>
<li><strong>Operate openly, inclusively, and transparently</strong> Anyone can publish or interact with the LBRY network. No one needs permission from us or anyone else. LBRY encourages all parties to participate in the network, rather than the creation of walled gardens. LBRY is a completely open specification and all code is open source.</li>
<li><strong>Prove decentralization doesnt mean infringement</strong> Existing decentralized publishing protocols offer no way for rightsholders to combat or capture profits from illegally shared content. LBRYs service layer, blacklisting mechanisms, and naming system all improve the status quo.</li>
<li><strong>Acknowledge modern digital realities and ethical norms</strong> Prohibition has failed at every turn and in every iteration. Regulating human behavior only works when it aligns with moral norms that are shared by the majority of the population.
If it is impossible to keep drugs out of prisons, it will never be possible to enforce copyright via analogous tactics on the infinitely less-controlled internet. Instead, focus on enticement. While legal compliance is paramount, concentrate as much as possible on making a system that relies more on giving people no excuse to do the wrong thing.</li>
<li><strong>Collect no rent</strong>. Whatever an artist or creator charges for their work should go to them. Distributing bits is exceedingly simple. Theres no need to give 45% to YouTube or 30% to Apple. Collecting no rent isnt just a promise, its hard coded. The nature of LBRY means this could never be done -- by us or anyone else.</li>
</ol>
</section>
<section>
<h2>TL;DR</h2>
<p>Digital art is one of the first goods to evolve beyond scarcity. This evolution is changing the way content is discovered, publicized, paid for and delivered. Heretofore, the lack of transparency and monetization mechanisms in peer-to-peer sharing networks has largely enabled piracy. By equipping a peer-to-peer protocol with a digital currency and transparent decentralized ledger, the LBRY protocol opens the door to a new era of digital content distribution making peer-to-peer content distribution suitable for major publishing housing, self-publishers and everyone in between.</p>
<p>If LBRY succeeds, we will enter a world that is even more creative, connected, and conservatory. We will waste less and we make more. We will create a world where a teenager in Kenya and a reality star in Los Angeles use the same tool to search the same network and have access to the same results -- a world where information, knowledge, and imagination know no borders. </p>
<p>Build our dream with us. Download LBRY at <a href="https://lbry.io/get">lbry.io/get</a>.</p>
</section>
</div>
</main>
<?php echo View::render('nav/footer') ?>

View file

@ -0,0 +1,65 @@
<?php Response::setMetaDescription('Documentation on LBRY, a decentralized content distribution network.') ?>
<?php echo View::render('nav/header', ['isDark' => false]) ?>
<main>
<div class="content">
<h1>Docs</h1>
<h3>Layer 1: Protocol</h3>
<p>While the protocol is one comprehensive set of rules, it is easier to understand as two parts.</p>
<h4>Part A: The LBRY Blockchain</h4>
<p>A <em>blockchain</em>, or <em>distributed ledger</em> is the key innovation behind the Bitcoin network. Blockchains solved the very complicated technological problem of having a bunch of distributed, disparate entities all agree on a rivalrous state of affairs (like how much money they owe each other).</p>
<p>Like Bitcoin, the LBRY blockchain maintain balances -- in this case, balances of <em>LBC</em>, LBRYs unit of credit. More importantly, the LBRY blockchain also provides a decentralized lookup and metadata storage system. The LBRY blockchain supports a specific set of commands that allows anyone to bid (in LBC) to control a LBRY <em>name</em>, which is a lot like a domain name. Whoever controls a name gets to describe what it contains, what it costs to access, who to pay, and where to find it. These names are sold in a continuous running auction. We will talk more about this system a little later on.</p>
<p>If youre a programmer, you might recognize the LBRY blockchain as a <em>key-value store</em>. Each key, or name, corresponds to a value, or a metadata entry. Whichever party or parties bid the most LBC gets to control the metadata returned by a key lookup.</p>
<p>Here is a sample key-value entry in the LBRY blockchain. Here, wonderfullife is the key, and the rest of the description is the value.</p>
<div class="code-bash">
<code><pre style="white-space: pre-wrap;">
<span class="code-bash-kw1">wonderfullife</span> : {
<span class="code-bash-kw2">title</span>: "Its a Wonderful Life",
<span class="code-bash-kw2">description</span>: "An angel helps a compassionate but despairingly frustrated businessman by showing what life would have been like if he never existed.",
<span class="code-bash-kw2">thumbnail</span>: "http://i.imgur.com/MW45x88.jpg",
<span class="code-bash-kw2">license</span>: "public domain",
<span class="code-bash-kw2">price</span>: 0, <span class="code-bash-comment">//free!</span>
<span class="code-bash-kw2">publisher</span>: "A Fan Of George Bailey", <span class="code-bash-comment">//simplification</span>
<span class="code-bash-kw2">sources</span>: { <span class="code-bash-comment">//extensible, variable list</span>
<span class="code-bash-kw2">lbry_hash</span> : &lt;unique id&gt;,
<span class="code-bash-kw2">url</span> : &lt;url&gt;
}
}</pre></code>
</div>
<div class="meta text-center content-inset"><p>A slightly simplified sample entry of metadata in the LBRY blockchain. Whichever party or parties bid the most in an ongoing auction control what a name returns.</p></div>
<p>Other than the usage of the LBRY blockchain to store names and metadata, there are only minor differences between the blockchains of LBRY and Bitcoin, and the changes are generally consensus improvements. Weve buffed the hashing algorithm, smoothed the block reward function, increased the block size, increased the total number of credits, and prepared for offchain settlement.</p>
<p>The LBRY blockchain simply maintains LBC balances and a content namespace/catalogue. The next part, LBRYnet, specifies what to do with this data. To compare to the existing web, the blockchain is like the domain system (it maintains a listing of what is available), while the next piece makes it possible to actually fetch and pay for content.</p>
<footer> If youre a Bitcoiner wondering why we dont use the Bitcoin blockchain, you can read a detailed answer to that question <a href="https://blog.lbry.io/why-doesnt-lbry-just-use-bitcoin/">here</a>.</footer>
<h4>Part B: The Data Network (LBRYNet)</h4>
<p>LBRYNet is the layer that makes the LBRY blockchain useful beyond a simple payment system. It says what to do with the information available in the LBRY blockchain, how to issue payments, how to look up a content identifier, and so on. </p>
<p>To use the LBRY network, a users computer needs the capacity to speak LBRY. That layer is LBRYNet. Just as your computer has a library that enables it to understand HTTP, DNS, and other languages and protocols, LBRYNet is the piece of software that allows your computer to understand how to interact with the LBRY network.</p>
<p>To understand what role LBRYNet plays, lets drill a little more into a sample user interaction. Once a user has affirmed access and purchase, such as in step 5 of our Sample Use above, the following happens:</p>
<ol>
<li>LBRYNet issues a lookup for the name associated with the content. If the client does not have a local copy of the blockchain, this lookup is broadcast to miners or to a service provider. This lookup acquires the metadata associated with the name.</li>
<li>LBRYNet issues any required payments, as instructed by metadata entries.
<ol>
<li>If the content is set to free, nothing happens here.</li>
<li>If the content is set to have a price in LBC, the client must issue a payment in LBC to the specified address. If the content is published encrypted, LBRYNet will not allow access until this payment has been issued.</li>
<li>If the content is set to have another payment method, the seller must run or use a service that provides a private server enforcing payment and provisioning accessing keys.</li>
</ol>
</li>
<li>Simultaneous to #2, LBRYNet uses the metadata to download the content itself.
<ol>
<li>The metadata allows chunks to be discovered and assembled in a BitTorrent-like fashion. However, unlike BitTorrent, chunks do not individually identify themselves as part of a greater whole. Chunks are just arbitrary pieces of data.</li>
<li>If LBRYNet cannot find nodes offering chunks for free, it will offer payments for chunks to other hosts with those chunks.</li>
<li>This payment is not done via proof-of-bandwidth, or third-party escrow. Instead, LBRYNet uses reputation, trust, and small initial payments to ensure reliable hosts. </li>
<li>If content is not published directly to LBRY, the metadata can instruct other access methods, such as a Netflix URL. This allows us to catalogue content not yet available on LBRY as well as offer legacy and extensibility purposes.</li>
</ol>
</li>
</ol>
</div>
</main>
<?php echo View::render('nav/footer') ?>

View file

@ -7,12 +7,13 @@
<div class="row-fluid" style="height: 100%">
<div class="span9">
<h1><?php echo __('Feedback') ?></h1>
<?php echo View::render('download/feedback-prompt') ?>
<?php echo View::render('download/_feedbackPrompt') ?>
<iframe id="feedback-form-iframe" src="https://docs.google.com/forms/d/1zqa5jBYQMmrZO1utoF2Ok9ka-gXzXLDZKXNNoprufC8/viewform?embedded=true"
width="760" height="1720" frameborder="0" marginheight="0" marginwidth="0">Loading...</iframe>
</div>
<div class="span3">
<?php echo View::render('social/sidebar') ?>
<h3><?php echo __('Also On') ?></h3>
<?php echo View::render('social/_list') ?>
</div>
</div>
</div>

View file

@ -2,64 +2,70 @@
<?php Response::setMetaTitle(__('LBRY - Watch, Share, Earn')) ?>
<?php Response::setMetaDescription(__('Meet LBRY, a content sharing and publishing platform that is decentralized and owned by it\'s users.')) ?>
<?php echo View::render('nav/header', ['isDark' => true]) ?>
<main class="column-fluid">
<div class="span12">
<main class="column-fluid column-fluid-constrained">
<div class="span7">
<div class="cover cover-dark">
<div class="content content-wide content-dark">
<div class="text-center">
<h1 class="cover-title">Stream, Share, Earn.</h1>
<h1 class="cover-title cover-title-tile">Stream, Share, Earn.</h1>
</div>
<?php $labels = [
__('making history'),
__('empowering artists'),
__('spreading knowledge'),
__('sharing sustainably'),
__('protecting speech'),
__('building tomorrow'),
__('eliminating middlemen'),
__('furthering education'),
] ?>
<?php shuffle($labels) ?>
<div class="sale-call ">
<span class="sale-call-verb"><?php echo __('Join') ?></span>
<span class="sale-call-total-people"><?php echo number_format($totalPeople) ?></span>
<span class="sale-call-prep">others in</span>
<?php echo View::render('download/_videoIntro') ?>
</div>
</div>
</div>
<div class="span5">
<div class="cover-center content content-dark">
<?php $labels = [
__('making history'),
__('empowering artists'),
__('spreading knowledge'),
__('sharing sustainably'),
__('protecting speech'),
__('building tomorrow'),
__('eliminating middlemen'),
__('furthering education'),
] ?>
<?php shuffle($labels) ?>
<div class="sale-call ">
<span class="sale-call-verb"><?php echo __('Join') ?></span>
<span class="sale-call-total-people"><?php echo number_format($totalPeople) ?></span>
<span class="sale-call-prep">others in</span>
<span class="sale-ctas label-cycle" data-cycle-interval="5000">
<span class="sale-cta"><?php echo implode('</span><span class="sale-cta">', $labels) ?></span>
</span>
</div>
<div class="control-group spacer2 text-center">
<div class="control-item">
<a href="/get" class="btn-primary">Get LBRY</a>
</div>
<div class="control-group spacer2 text-center">
<div class="control-item">
<a href="/get" class="btn-primary">Get LBRY</a>
</div>
<div class="control-item">
<a href="/learn" class="btn-alt">Learn More</a>
<div class="control-item">
<a href="/learn" class="btn-alt">Learn More</a>
</div>
</div>
</div>
</div>
<div class="span12">
<div class="cover cover-dark content content-dark">
<div class="row-fluid">
<div class="span4">
<h3><?php echo __('Get Updates') ?></h3>
<?php echo View::render('mail/joinList', [
'submitLabel' => 'Go',
'listId' => Mailchimp::LIST_GENERAL_ID,
'mergeFields' => ['CLI' => 'No'],
'meta' => true,
'returnUrl' => '/',
'btnClass' => 'btn-alt'
]) ?>
</div>
<div class="span4 text-center">
<div class="fb-page" data-href="https://www.facebook.com/lbryio" data-height="300" data-small-header="false" data-width="300"
data-adapt-container-width="true" data-hide-cover="false" data-show-facepile="true" data-show-posts="true">
<div class="fb-xfbml-parse-ignore"><blockquote cite="https://www.facebook.com/lbryio"><a href="https://www.facebook.com/lbryio">LBRY</a></blockquote></div>
</div>
</div>
<div class="video" style="margin-bottom: 80px">
<iframe width="560" height="315" src="https://www.youtube.com/embed/BNtivEJKHxI" frameborder="0" allowfullscreen></iframe>
</div>
<div class="row-fluid content-constrained">
<div class="span4">
<h3><?php echo __('Get Updates') ?></h3>
<?php echo View::render('mail/joinList', [
'submitLabel' => 'Go',
'listId' => Mailchimp::LIST_GENERAL_ID,
'mergeFields' => ['CLI' => 'No'],
'meta' => true,
'returnUrl' => '/',
'btnClass' => 'btn-alt'
]) ?>
</div>
<div class="span4 text-center">
<div class="fb-page" data-href="https://www.facebook.com/lbryio" data-height="300" data-small-header="false" data-width="300"
data-adapt-container-width="true" data-hide-cover="false" data-show-facepile="true" data-show-posts="true">
<div class="fb-xfbml-parse-ignore"><blockquote cite="https://www.facebook.com/lbryio"><a href="https://www.facebook.com/lbryio">LBRY</a></blockquote></div>
</div>
</div>
<div class="span4 text-center">
<a width="300" class="twitter-timeline" href="https://twitter.com/LBRYio" data-widget-id="671104143034073088">Tweets by @LBRYio</a>
</div>
<div class="span4 text-center">
<a width="300" class="twitter-timeline" href="https://twitter.com/LBRYio" data-widget-id="671104143034073088">Tweets by @LBRYio</a>
</div>
</div>
</div>

View file

@ -17,7 +17,8 @@
]) ?>
</div>
<div class="span3">
<?php echo View::render('social/sidebar') ?>
<h3><?php echo __('Also On') ?></h3>
<?php echo View::render('social/_list') ?>
</div>
</div>
</div>

View file

@ -0,0 +1,70 @@
<?php Response::setMetaDescription('Download or install the latest version of LBRY.') ?>
<?php Response::setMetaTitle(__('Learn About LBRY')) ?>
<?php echo View::render('nav/header', ['isDark' => false]) ?>
<main class="column-fluid">
<div class="span4">
<div class="cover cover-column cover-light-alt cover-light-alt-grad">
<div class="content content-light">
<h1><?php echo __('What?') ?></h1>
<div class="spacer1">
<div class="spacer1">
<a href="/img/lbry-ui.png">
<img src="/img/lbry-ui.png" alt="Screenshot of a LBRY browser"/>
</a>
</div>
<p><em>Puts on jargon hat.</em></p>
<p>
LBRY is a decentralized, censorship-resistant, open-source, peer-to-peer information marketplace and discovery protocol.
</p>
<p><em>Removes jargon hat.</em></p>
<p>
LBRY is a new way for people to publish and share content with each other.
</p>
<p>
Our goal is to provide a single box that allows anyone anywhere to find and purchase digital content from anyone else.
</p>
</div>
<a href="/what" class="btn-primary"><?php echo __('More About LBRY') ?></a>
</div>
</div>
</div>
<div class="span4">
<div class="cover cover-column cover-dark cover-dark-grad ">
<div class="content content-dark">
<h1><?php echo __('Why?') ?></h1>
<div class="spacer1">
<p><?php echo __('Current systems benefit huge corporations that add little but extract a lot.') ?></p>
<p>
<?php echo __('We don\'t like it when middlemen, greedy rent-seekers, and kleptocrats win.') ?></p>
</p>
<p><?php echo __('We think a better world is one in which artists and consumers are directly connected.') ?></p>
</div>
<div class="spacer1">
<a href="/why" class="btn-alt"><?php echo __('Why Make LBRY') ?></a>
</div>
<div>
<img src="/img/smbc-comic.png" />
</div>
<div class="meta text-center">
Credit <a href="//www.smbc-comics.com/" class="link-primary">SMBC</a>.
</div>
</div>
</div>
</div>
<div class="span4">
<div class="cover cover-column cover-light">
<div class="content">
<h1><?php echo __('Who?') ?></h1>
<div class="spacer1">
<p><?php echo __('LBRY promises an awful lot.') ?> <?php echo __('Can you trust us to deliver?') ?></p>
<p><?php echo __('Learn more about the relentless rebels changing the internet.') ?></p>
</div>
<div class="spacer1">
<a href="/team" class="btn-alt"><?php echo __('About The Team') ?></a>
</div>
<img src="/img/cover-team.jpg" alt="<?php echo __('LBRY Founders') ?>" />
</div>
</div>
</div>
</main>
<?php echo View::render('nav/footer') ?>

View file

@ -1,6 +1,45 @@
<?php Response::setMetaDescription('Download or install the latest version of LBRY.') ?>
<?php Response::setMetaDescription(__('Learn more about LBRY, the technology that puts you back in control of the internet.')) ?>
<?php Response::setMetaTitle(__('Learn About LBRY')) ?>
<?php echo View::render('nav/header', ['isDark' => false]) ?>
<main class="column-fluid ">
<div class="span6">
<div class="cover cover-light content">
<h1 style="max-width: 660px; margin-left: auto; margin-right: auto">LBRY in 60 Seconds</h1>
<?php echo View::render('download/_videoIntro') ?>
</div>
</div>
<div class="span6">
<div class="cover cover-dark cover-center content content-dark" style="background-image:url(/img/altamira-bison.jpg)">
<h2 class="cover-title cover-title-tile">Art in the Internet Age</h2>
<p class="cover-subtitle text-center">Learn how LBRY will forever improve how<br/>we create and share with one another.</p>
<a href="/what" class="btn-alt"><?php echo __('Read the Essay') ?></a>
</div>
</div>
<div class="span6">
<div class="cover cover-dark cover-dark-grad">
<div class="content content-dark content-tile">
<h3><?php echo __('Who Makes LBRY?') ?></h3>
<p><?php echo __('Learn more about the relentless rebels changing the internet.') ?></p>
<div class="spacer1">
<a href="/team" class="btn-alt"><?php echo __('About The Team') ?></a>
</div>
<h4>Talk With Us</h4>
<?php echo View::render('social/_list') ?>
</div>
</div>
</div>
<div class="span6">
<div class="cover cover-light-alt cover-light-alt-grad">
<div class=" content content-light content-tile">
<h3>Nerd With Us</h3>
<p>LBRY is a completely open source protocol that provides a decentralized digital marketplace.</p>
<?php echo View::render('social/_listDev') ?>
</div>
</div>
</div>
</main>
<?php /*
<main class="column-fluid">
<div class="span4">
<div class="cover cover-column cover-light-alt cover-light-alt-grad">
@ -54,17 +93,10 @@
<div class="span4">
<div class="cover cover-column cover-light">
<div class="content">
<h1><?php echo __('Who?') ?></h1>
<div class="spacer1">
<p><?php echo __('LBRY promises an awful lot.') ?> <?php echo __('Can you trust us to deliver?') ?></p>
<p><?php echo __('Learn more about the relentless rebels changing the internet.') ?></p>
</div>
<div class="spacer1">
<a href="/team" class="btn-alt"><?php echo __('About The Team') ?></a>
</div>
<img src="/img/cover-team.jpg" alt="<?php echo __('LBRY Founders') ?>" />
</div>
</div>
</div>
</main>
</main> */ ?>
<?php echo View::render('nav/footer') ?>

View file

@ -0,0 +1,10 @@
<?php Response::setMetaDescription('Chat with LBRY on Slack.') ?>
<?php echo View::render('nav/header', ['isDark' => false]) ?>
<main>
<div class="content">
<h1>Chat With Us</h1>
<p>Oops. You caught us. We haven't automated Slack invites yet. Please <a class="link-primary" href="mailto:josh@lbry.io?subject=Slack Me Up">email Josh</a>.</p>
<p>He answers email approximately as fast as a robot.</p>
</div>
</main>
<?php echo View::render('nav/footer') ?>

View file

@ -5,6 +5,7 @@
<main>
<div class="content photo-grid spacer2">
<h1>The Team</h1>
<p>LBRY is made possible by more people than we could ever list here. The founding team is listed below.</p>
<div class="row-fluid">
<div class="span6 spacer2">
<div class="photo-container">

View file

@ -0,0 +1,99 @@
<?php Response::setMetaDescription('Access information and content in ways you never dreamed possible. Earn credits for your unused bandwidth and diskspace.') ?>
<?php NavActions::setNavUri('/learn') ?>
<?php echo View::render('nav/header', ['isDark' => false]) ?>
<main>
<div class="hero hero-pattern spacer2">
<div class="hero-content text-center">
<h2 class="hero-title">A revolution in accessing and publishing information.</h2>
<div class="row-fluid hero-tile-row">
<div class="span4 hero-tile">
<div class="spacer1">
<span class="icon-money icon-mega"></span>
</div>
<h4>
<strong>Hosts</strong> earn credits for providing bandwidth and disk space.
</h4>
</div>
<div class="span4 hero-tile">
<div class="spacer1">
<span class="icon-mega icon-gears"></span>
</div>
<h4>
<strong>Miners</strong> earn credits for securing balances and metadata.
</h4>
</div>
<div class="span4 hero-tile">
<div class="spacer1">
<span class="icon-chain-broken icon-mega"></span>
</div>
<h4>
<strong>Patrons</strong> spend credits to access content without gatekeepers.
</h4>
</div>
</div>
</div>
</div>
<div class="content">
<h1>What is LBRY?</h1>
<div class="spacer2">
<p>LBRY allows anyone to publish content to a location like this:</p>
<p class="text-center"><code>lbry://wonderfullife</code></p>
<p>Others can access this resource, either for free or for credits. Let's look at an example:</p>
<ol>
<li>Ernest wants to release his comedy-horror film, "Ernie Goes To Guantanamo Bay".</li>
<li>The content is encrypted and sliced into many pieces. These pieces are stored by <strong>hosts</strong>.</li>
<li>Ernest reserves <code>lbry://erniebythebay</code>, a shortname pointing to his content.</li>
<li>When Ernest reserves the location, he also submits metadata, such as a description and thumbnail. This information is stored by <strong>miners</strong> in the LBRY blockchain.</li>
<li>Hilary, a <strong>patron</strong>, browses the LBRY network and wants to watch the movie.
Her LBRY client collects the pieces from the <strong>hosts</strong> and reassembles them.</li>
<li>Hilary pays Ernest for the decryption key, allowing her to watch the film.</li>
</ol>
</div>
</div>
<div class="hero hero-pattern">
<div class="hero-content">
<h2 class="text-center hero-title">If BitTorrent + BitCoin Had a Baby</h2>
<div class="row-fluid hero-tile-row">
<div class="span4 hero-tile">
<span class="icon-mega icon-cloud"></span>
<h3>Decentralized Metadata</h3>
<p>Information about content is embedded in a blockchain, eliminating centralized failure points. Metadata and data are completely decoupled so that <strong>hosts</strong> never see metadata and <strong>miners</strong> never see data.</p>
</div>
<div class="span4 hero-tile">
<span class="icon-mega icon-shopping-cart"></span>
<h3>Marketized Data-Transfer</h3>
<p><strong>Patrons</strong> request content for free or offer credits for faster speeds or access. <strong>Hosts</strong> share or sell surplus bandwidth and disk space.</p>
</div>
<div class="span4 hero-tile">
<span class="icon-mega icon-link"></span>
<h3>Memorable URIs</h3>
<p>
<strong>Publishers</strong> can choose friendly resource indicators like <code>lbry://wonderfullife</code> instead of ugly BitTorrent magnet URIs.
URIs are <em>reserved</em> rather than owned, creating strong incentive for rights holders to use LBRY.
</p>
</div>
</div>
<div class="row-fluid hero-tile-row">
<div class="span4 hero-tile">
<span class="icon-mega icon-usd" style="font-size: 180px"></span>
<h3>Payments to Publishers</h3>
<p><strong>Publishers</strong> may embed an address to receive payment for data. Publishers can also create assurance contracts<sup><a href="//en.wikipedia.org/wiki/Assurance_contract">?</a></sup> for new content.</p>
</div>
<div class="span4 hero-tile">
<span class="icon-mega icon-lock"></span>
<h3>Improved Privacy</h3>
<p>LBRY uses novel techniques to protect publishers, providers, and consumers.
<strong>Hosts</strong> only have small portions of an encrypted file with no information of the contents.
</p>
</div>
<div class="span4 hero-tile">
<span class="icon-mega icon-code"></span>
<h3>Designed for Developers</h3>
<p>LBRY is designed to allow others to create applications powered by its distributed, robust data store.</p>
</div>
</div>
</div>
</div>
<?php echo View::render('nav/learnFooter') ?>
</main>
<?php echo View::render('nav/footer') ?>

View file

@ -1,99 +1,330 @@
<?php Response::setMetaDescription('Access information and content in ways you never dreamed possible. Earn credits for your unused bandwidth and diskspace.') ?>
<?php NavActions::setNavUri('/learn') ?>
<?php echo View::render('nav/header', ['isDark' => false]) ?>
<?php echo View::render('nav/header', ['isDark' => true, 'isAbsolute' => true]) ?>
<main>
<div class="hero hero-pattern spacer2">
<div class="hero-content text-center">
<h2 class="hero-title">A revolution in accessing and publishing information.</h2>
<div class="row-fluid hero-tile-row">
<div class="span4 hero-tile">
<div class="spacer1">
<span class="icon-money icon-mega"></span>
</div>
<h4>
<strong>Hosts</strong> earn credits for providing bandwidth and disk space.
</h4>
</div>
<div class="span4 hero-tile">
<div class="spacer1">
<span class="icon-mega icon-gears"></span>
</div>
<h4>
<strong>Miners</strong> earn credits for securing balances and metadata.
</h4>
</div>
<div class="span4 hero-tile">
<div class="spacer1">
<span class="icon-chain-broken icon-mega"></span>
</div>
<h4>
<strong>Patrons</strong> spend credits to access content without gatekeepers.
</h4>
</div>
</div>
<div class="cover cover-dark cover-center cover-full" style="background-image:url(/img/altamira-bison.jpg)">
<h1 class="cover-title" id="art">Art in the Internet Age</h1>
<div class="cover-subtitle">
An introduction to LBRY.
</div>
</div>
<div class="content">
<h1>What is LBRY?</h1>
<div class="spacer2">
<p>LBRY allows anyone to publish content to a location like this:</p>
<p class="text-center"><code>lbry://wonderfullife</code></p>
<p>Others can access this resource, either for free or for credits. Let's look at an example:</p>
<div class="content content-readable">
<section>
<h2 id="introduction">Introduction</h2>
<p>In 34,000 B.C., there were cave paintings. And thats it. When you came home from a sweltering August day of foraging along the Vézère river, the only form of non-live art or entertainment available was something like the above buffalo.</p>
<p>Today, we live in a world of near infinite choices. This is true not just for art but for all kinds of things (like potato chips). Since the era of cave art, humanity has incessantly and progressively trended towards interconnected, more efficient, and increasingly transparent markets. This undercurrent of connectedness and openness has affected everything human beings produce.</p>
<p>Nerds like us like to speculate about the end-game of this trend with others on the internet. What will society be like when we have a "Star Trek"-like capacity to instantly and freely replicate anything that exists? The term for this society is <em>post-scarcity</em><sup><a href="#note-post-scarcity" class="link-primary" >1</a></sup>.</p>
<p>Generally, post-scarcity is regarded as fantastical; something that will never happen in our lifetimes. Except for one area: digital goods.</p>
<p>Art in the internet age is infinitely reproducible and easily shared. This is a sea change from any prior time in history. Previously, vinyl records captured audio in physical grooves; tapes captured data on magnetic strips; compact disks held digital files read by lasers—in each of these cases physical, medium-specific hardware is required to both produce and recover the bits of data that made up the digital content. </p>
<p>Today art is just data, a string of 1s and 0s, a <em>number</em>, and we no longer need any specialized hardware to decode and enjoy digital content. We use the same technological methods to access a personal photograph a single time as we do to watch a blockbuster on Netflix.</p>
<p>This is a big step forward from the past. As production costs fall to zero, choices go up. Digital distributors provide virtually every song, film, photo or book for purchase and download to any internet enabled device. Technology has decreased the cost of production, too -- it has never been easier for aspirant artists to achieve a following through self-publishing.</p>
<p>The digitization of art has added a lot of value to both content creators and consumers, reducing costs and increasing choice. This transition is still in its infancy. With LBRY, were going to make it a little more mature.</p>
<footer id="note-post-scarcity"><sup>1</sup> Note that post-scarcity does not eliminate the need to create <em>new</em> goods, it just eliminates or reduces the costs of <em>duplicating</em> goods to nothing. As long as people desire goods that did not previously exist, there will always be a market demand for creation, even in a post-scarcity world.</footer>
</section>
<section>
<h2 id="peoples-marketplace">A Peoples Marketplace</h2>
<p>LBRY is the first digital marketplace to be controlled by the markets participants rather than a corporation or other 3rd-party. It is the most open, fair, and efficient marketplace for digital goods ever created, with an incentive design encouraging it to become the most complete.</p>
<p>At the highest level, LBRY does something extraordinarily simple. LBRY creates an association between a unique name and a piece of digital content, such as a movie, book, or game. This is similar to the domain name system that you are most likely using to access this very post.</p>
<div class="text-center meta spacer1">
<img src="/img/lbry-ui.png"/>
<div class="content-inset">
A user searches and prepares to stream and the film <em>Its a Wonderful Life</em>, located at <a href="lbry://wonderfullife">lbry://wonderfullife</a>, via a completely decentralized network. Try it out for yourself at <a href="http://lbry.io/get">lbry.io/get</a>.
</div>
</div>
<p>However, LBRY does this not through a proprietary service or network, but as a <em>protocol</em>, or a method of doing things, much like HTTP, DNS and other specifications that make up the internet itself. Just as many different domains owned by many different companies all speak a shared language, so too can any person or company speak LBRY. No special access or permission is needed.</p>
<p>LBRY differs from the status quo in three big ways:</p>
<ol>
<li>Ernest wants to release his comedy-horror film, "Ernie Goes To Guantanamo Bay".</li>
<li>The content is encrypted and sliced into many pieces. These pieces are stored by <strong>hosts</strong>.</li>
<li>Ernest reserves <code>lbry://erniebythebay</code>, a shortname pointing to his content.</li>
<li>When Ernest reserves the location, he also submits metadata, such as a description and thumbnail. This information is stored by <strong>miners</strong> in the LBRY blockchain.</li>
<li>Hilary, a <strong>patron</strong>, browses the LBRY network and wants to watch the movie.
Her LBRY client collects the pieces from the <strong>hosts</strong> and reassembles them.</li>
<li>Hilary pays Ernest for the decryption key, allowing her to watch the film.</li>
<li><strong>Coupled payment and access</strong>. If desired, the person who publishes to <a href="lbry://wonderfullife">lbry://wonderfullife</a> can charge a fee to users that view the content. </li>
<li><strong>Decentralized and distributed</strong>. Content published to LBRY is not specific to one computer or network. No one party, including us, can unilaterally remove or block content on the LBRY network.<sup><a class="link-primary" href="#note-decentralized">2</a></sup></li>
<li><strong>Domain names are controlled via ongoing auction</strong>. This facilitates names being controlled by the publishers that value them most. These transactions take place via an electronic currency called LBRY credits, or <em>LBC</em>. This is covered in more detail, below.</li>
</ol>
</div>
</div>
<div class="hero hero-pattern">
<div class="hero-content">
<h2 class="text-center hero-title">If BitTorrent + BitCoin Had a Baby</h2>
<div class="row-fluid hero-tile-row">
<div class="span4 hero-tile">
<span class="icon-mega icon-cloud"></span>
<h3>Decentralized Metadata</h3>
<p>Information about content is embedded in a blockchain, eliminating centralized failure points. Metadata and data are completely decoupled so that <strong>hosts</strong> never see metadata and <strong>miners</strong> never see data.</p>
</div>
<div class="span4 hero-tile">
<span class="icon-mega icon-shopping-cart"></span>
<h3>Marketized Data-Transfer</h3>
<p><strong>Patrons</strong> request content for free or offer credits for faster speeds or access. <strong>Hosts</strong> share or sell surplus bandwidth and disk space.</p>
</div>
<div class="span4 hero-tile">
<span class="icon-mega icon-link"></span>
<h3>Memorable URIs</h3>
<p>
<strong>Publishers</strong> can choose friendly resource indicators like <code>lbry://wonderfullife</code> instead of ugly BitTorrent magnet URIs.
URIs are <em>reserved</em> rather than owned, creating strong incentive for rights holders to use LBRY.
</p>
</div>
<p>While creating a protocol that we ourselves cannot control sounds chaotic, it is actually about establishing trust. Every other publishing system requires trusting an intermediary that can unilaterally change the rules on you. What happens when you build your business on YouTube or Amazon and they change fees? Or Apple drops your content because the Premier of China thought your comedy went to far?</p>
<p>Only LBRY consists of a known, promised set of rules that no one can unilaterally change. LBRY provides this by doing something unique: leaving the <em>users</em> in control rather than demanding that control for itself.</p>
<footer id="note-decentralized"><sup>2</sup>If it worries you that LBRY's decentralized nature facilitates infringing or unsavory content, this is addressed in <a class="link-primary" Cohref="#combatting-the-ugly">Combatting the Ugly</a>.</footer>
</section>
<section>
<h2 id="sample-use">A Sample Use</h2>
<p>Lets look at a sample use of LBRY, Ernest releasing a film on LBRY that is later purchased and viewed by Hillary. </p>
<ol>
<li>Ernest wants to release his comedy-horror film, <em>Ernie Runs For President</em>.</li>
<li>The content is encrypted and sliced into many pieces. These pieces are stored by hosts.</li>
<li>Ernest reserves <a href="lbry://erniebythebay">lbry://ernieruns</a>, a name pointing to his content.</li>
<li>When Ernest reserves the location, he also submits metadata, such as a description and thumbnail.</li>
<li>Hillary, a user, opens her browser, searches the LBRY network, and decides she wants to watch the film.</li>
<li>Hillary issues a payment to Ernest for the decryption key, allowing her to watch the film.</li>
<li>Hillarys LBRY client collects the pieces from the hosts and reassembles them, using the key to decrypt the pieces (if necessary). This is transparent to Hillary, the film streams within a few seconds after purchase.</li>
</ol>
<p>From a user's perspective, interaction is extremely similar to those that happen on hundreds of different sites, similar to YouTube, Amazon and Netflix.
The key different is that this one happens via a network that is completely decentralized.
The data and technology that makes the entire interaction possible is not reliant on nor controlled by any single entity.</p>
</section>
<section>
<h2>The LBRY Network</h2>
<p>To understand precisely what LBRY is and why it matters, one must understand both LBRY as a protocol and the services the protocol enables. HTTP is the protocol that makes web browsing possible, but it would be of little interest without the service of a web browser!</p>
<p>To understand LBRY, think of LBRY in terms of two layers: <em>protocol</em> and <em>service.</em> The protocol provides a fundamental, underlying technological capability. The service layer utilizes the protocol to do something that a human being would actually find useful.</p>
<p>For a user using LBRY at the service level, the magic of what the LBRY protocol does will be largely transparent, much as a typical internet user sees nothing of how HTTP works. Via a LBRY application, a user will be able to open a familiar interface to quickly and easily discover and purchase a piece of digital content published by anyone in the world.</p>
<p>However, such an application would not be possible without the LBRY the underlying layer, the LBRY protocol.</p>
<h3>Layer 1: Protocol</h3>
<p>While the protocol is one comprehensive set of rules, it is easier to understand as two parts.</p>
<h4>Part A: The LBRY Blockchain</h4>
<p>A <em>blockchain</em>, or <em>distributed ledger</em> is the key innovation behind the Bitcoin network. Blockchains solved the very complicated technological problem of having a bunch of distributed, disparate entities all agree on a rivalrous state of affairs (like how much money they owe each other).</p>
<p>Like Bitcoin, the LBRY blockchain maintain balances -- in this case, balances of <em>LBC</em>, LBRYs unit of credit. More importantly, the LBRY blockchain also provides a decentralized lookup and metadata storage system. The LBRY blockchain supports a specific set of commands that allows anyone to bid (in LBC) to control a LBRY <em>name</em>, which is a lot like a domain name. Whoever controls a name gets to describe what it contains, what it costs to access, who to pay, and where to find it. These names are sold in a continuous running auction. We will talk more about this system a little later on.</p>
<p>If youre a programmer, you might recognize the LBRY blockchain as a <em>key-value store</em>. Each key, or name, corresponds to a value, or a metadata entry. Whichever party or parties bid the most LBC gets to control the metadata returned by a key lookup.</p>
<p>Here is a sample key-value entry in the LBRY blockchain. Here, wonderfullife is the key, and the rest of the description is the value.</p>
<div class="code-bash">
<code><pre style="white-space: pre-wrap;">
<span class="code-bash-kw1">wonderfullife</span> : {
<span class="code-bash-kw2">title</span>: "Its a Wonderful Life",
<span class="code-bash-kw2">description</span>: "An angel helps a compassionate but despairingly frustrated businessman by showing what life would have been like if he never existed.",
<span class="code-bash-kw2">thumbnail</span>: "http://i.imgur.com/MW45x88.jpg",
<span class="code-bash-kw2">license</span>: "public domain",
<span class="code-bash-kw2">price</span>: 0, <span class="code-bash-comment">//free!</span>
<span class="code-bash-kw2">publisher</span>: "A Fan Of George Bailey", <span class="code-bash-comment">//simplification</span>
<span class="code-bash-kw2">sources</span>: { <span class="code-bash-comment">//extensible, variable list</span>
<span class="code-bash-kw2">lbry_hash</span> : &lt;unique id&gt;,
<span class="code-bash-kw2">url</span> : &lt;url&gt;
}
}</pre></code>
</div>
<div class="row-fluid hero-tile-row">
<div class="span4 hero-tile">
<span class="icon-mega icon-usd" style="font-size: 180px"></span>
<h3>Payments to Publishers</h3>
<p><strong>Publishers</strong> may embed an address to receive payment for data. Publishers can also create assurance contracts<sup><a href="//en.wikipedia.org/wiki/Assurance_contract">?</a></sup> for new content.</p>
</div>
<div class="span4 hero-tile">
<span class="icon-mega icon-lock"></span>
<h3>Improved Privacy</h3>
<p>LBRY uses novel techniques to protect publishers, providers, and consumers.
<strong>Hosts</strong> only have small portions of an encrypted file with no information of the contents.
</p>
</div>
<div class="span4 hero-tile">
<span class="icon-mega icon-code"></span>
<h3>Designed for Developers</h3>
<p>LBRY is designed to allow others to create applications powered by its distributed, robust data store.</p>
</div>
</div>
</div>
<div class="meta text-center content-inset"><p>A slightly simplified sample entry of metadata in the LBRY blockchain. Whichever party or parties bid the most in an ongoing auction control what a name returns.</p></div>
<p>Other than the usage of the LBRY blockchain to store names and metadata, there are only minor differences between the blockchains of LBRY and Bitcoin, and the changes are generally consensus improvements. Weve buffed the hashing algorithm, smoothed the block reward function, increased the block size, increased the total number of credits, and prepared for offchain settlement.</p>
<p>The LBRY blockchain simply maintains LBC balances and a content namespace/catalogue. The next part, LBRYnet, specifies what to do with this data. To compare to the existing web, the blockchain is like the domain system (it maintains a listing of what is available), while the next piece makes it possible to actually fetch and pay for content.</p>
<footer> If youre a Bitcoiner wondering why we dont use the Bitcoin blockchain, you can read a detailed answer to that question <a href="https://blog.lbry.io/why-doesnt-lbry-just-use-bitcoin/">here</a>.</footer>
<h4>Part B: The Data Network (LBRYNet)</h4>
<p>LBRYNet is the layer that makes the LBRY blockchain useful beyond a simple payment system. It says what to do with the information available in the LBRY blockchain, how to issue payments, how to look up a content identifier, and so on. </p>
<p>To use the LBRY network, a users computer needs the capacity to speak LBRY. That layer is LBRYNet. Just as your computer has a library that enables it to understand HTTP, DNS, and other languages and protocols, LBRYNet is the piece of software that allows your computer to understand how to interact with the LBRY network.</p>
<p>To understand what role LBRYNet plays, lets drill a little more into a sample user interaction. Once a user has affirmed access and purchase, such as in step 5 of our Sample Use above, the following happens:</p>
<ol>
<li>LBRYNet issues a lookup for the name associated with the content. If the client does not have a local copy of the blockchain, this lookup is broadcast to miners or to a service provider. This lookup acquires the metadata associated with the name.</li>
<li>LBRYNet issues any required payments, as instructed by metadata entries.
<ol>
<li>If the content is set to free, nothing happens here.</li>
<li>If the content is set to have a price in LBC, the client must issue a payment in LBC to the specified address. If the content is published encrypted, LBRYNet will not allow access until this payment has been issued.</li>
<li>If the content is set to have another payment method, the seller must run or use a service that provides a private server enforcing payment and provisioning accessing keys.</li>
</ol>
</li>
<li>Simultaneous to #2, LBRYNet uses the metadata to download the content itself.
<ol>
<li>The metadata allows chunks to be discovered and assembled in a BitTorrent-like fashion. However, unlike BitTorrent, chunks do not individually identify themselves as part of a greater whole. Chunks are just arbitrary pieces of data.</li>
<li>If LBRYNet cannot find nodes offering chunks for free, it will offer payments for chunks to other hosts with those chunks.</li>
<li>This payment is not done via proof-of-bandwidth, or third-party escrow. Instead, LBRYNet uses reputation, trust, and small initial payments to ensure reliable hosts. </li>
<li>If content is not published directly to LBRY, the metadata can instruct other access methods, such as a Netflix URL. This allows us to catalogue content not yet available on LBRY as well as offer legacy and extensibility purposes.</li>
</ol>
</li>
</ol>
<h3>Layer 2: Services</h3>
<p>Services are what actually make the LBRY protocol <em>useful. </em>While the LBRY protocol determines what is possible, it is the services that actually do things.</p>
<p>While the protocol is determined, open, and fixed, the service layer is much more flexible. It is far easier to redesign a website than it is to revise the HTTP protocol itself. The same is true here.</p>
<p>Additionally, just as in the early days of the internet the later direction of web would have been unfathomable, so too may the best uses of LBRYs namespace or technology be undiscovered. However, here are some clear uses.</p>
<h4>Applications and Devices</h4>
<p>A LBRY application is how a user would actually have meaningful interactions with the LBRY network. A LBRY client packages the power of the LBRY protocol into a simple application that allows the user to simply search for content, pay for it when necessary, download and enjoy.</p>
<p>Additionally, a LBRY client can allow users to passively participate in the network, allowing them to automatically earn rewards in exchange for contributing bandwidth, disk space, or processing power to the overall network.</p>
<p>Applications beyond a traditional computer based browser are possible as well. A LBRY television dongle, a LBRY radio, and any number of existing content access mechanisms can be implemented via an analogous LBRY device.</p>
<h4>Content Discovery</h4>
<p>Although the namespace provided by the LBRY protocol is helpful towards discovery, much as the web would be much less useful without search engines or aggregators, LBRY needs its own discovery mechanisms.</p>
<p>Search features can be constructed from the catalogue of metadata provided in the blockchain as well as the content transaction history available in the blockchain or observed on the network. All of this data, along with user history, allows for the creation of content recommendation engines and advanced search features.</p>
<p>Discovery on LBRY can also take the form of featured content. Clients can utilize featured content to provide additional visibility for new content that consumers might not otherwise be looking for.</p>
<h4>Content Distribution</h4>
<p>Digital content distributors with server-client models are subject to the whims of internet service providers and hostile foreign governments. Traffic from the host servers can be throttled or halted altogether if the owners of cables and routers so choose. However, in case of the LBRY protocol content comes from anywhere and everywhere, and is therefore not so easily stifled. </p>
<p>Additionally, the market mechanisms of LBRY create a strong incentive for efficient distribution, which will save the costs of producers and ISPs alike. These properties, along with LBRYs infringement disincentivizing properties, make LBRY an appealing technology for large existing data or content distributors.</p>
<h4>Transaction Settlement</h4>
<p>While payments can be issued directly on the LBRY blockchain, the LBRY protocol encourages a volume of transactions that will not scale without usage of offchain settlement.</p>
<p>Essentially, rather than issue a transaction to the core blockchain, transactions are issued to a 3rd-party provider. These providers have a substantial number of coins which are used to maintain balances internally and settle a smaller number of transactions to the core chain. In exchange, these providers earn a small fee, less than the fee required to issue the transaction directly to the blockchain.</p>*
</section>
<section>
<h2>LBRY Credits</h2>
<p>LBRY Credits, or <em>LBC</em>, are the unit of account for LBRY. Eventually 1,000,000,000 LBC will exist, according to a defined schedule over 20 years. The schedule decays exponentially, with around 100,000,000 in the first year.</p>
<p>Additionally, some credits are awarded on a fixed basis. The total break down looks like this:</p>
<ul>
<li>10% for organizations, charities, and other strategic partners. Organizations the EFF, ACLU, and others that have fought for digital rights and the security and freedom of the internet.</li>
<li>20% for adoption programs. Well be giving out lots of bonus credits, especially in the early days of LBRY, in order to encourage participation. We will also look to award credits broadly, ensuring the marketplace is egalitarian.</li>
<li>10% for us. For operational costs as well as profit.</li>
<li>60% earned by LBRY users, via mining the LBRY cryptocurrency.</li>
</ul>
</section>
<section>
<h2>More on Naming</h2>
<p>LBRY names are one of the most unique aspects of LBRY and one that we believe will play a big role in helping it succeed.</p>
<p>Control of a LBRY name is awarded via a <em>continuous running auction </em>in LBC. Bids are entered into a <em>trustless escrow</em>, marking the credits as unspendable, but leaving them intact. When a user looks up a name, the name resolves to the largest bid made by a party or parties. The ability for any number of people to have a say in where a name resolves is part of what makes LBRY a system controlled by its users. As the credits are distributed primarily among users and producers, it is community itself that has ultimate controls over the catalogue of what is available.</p>
<p>Additionally, bids can also be retracted at any time, even if youre the current winning bidder. To prevent a name from rapidly switching between multiple resolutions, the parties that have existing control of a name have a reasonable period of time to respond to counter bids before a names resolution switches.</p>
<p>Its possible this system sounds like chaos to you, but were betting on a Nobel-prize winning result that predicts the opposite. Economist Ronald Coase theorized that in a system with low transaction cost and clear rules, property will be held by those who value it the most. Since LBRY names are the equivalent to content storefronts, we believe that LBRY names will hold the most value to rightsholders who produce content associated with a given name.</p>
<p>As names in demand on LBRY will be more expensive, the names themselves will also serve as a signal of reputation, legitimacy, and quality. If a user searches LBRY for <em>Spider Man</em> and sees one at lbry://spiderman and one at lbry://spiderman_russhaxor, there will be little doubt that the latter is less legitimate. </p>
<footer><p>It is also worth noting that in the event that LBRY received notice that either name contained an illegitimate copy of <em>Spider Man</em>, LBRY would dutifully and quickly put that content id on a blacklist, blocking discovery or purchase via any legal services. LBRY and users of LBRY are still subject to the DMCA and other relevant laws of their respective countries.</p></footer>
<h2 id="combatting-the-ugly">Combatting The Ugly</h2>
<p>As neither naïfs nor knaves, we acknowledge that LBRY can be used for bad ends. Technology is frequently this way. Encryption protects our privacy -- as well as that of terrorists. Cars allow us to travel marvelous distances -- and kill millions per year.</p>
<p>The downside to LBRY is that it can be used to exchange illegal content. However, several factors of LBRY make illicit usage less likely than it may seem at first consideration. On the whole, as with the car and encryption, the benefits of LBRY clearly outway nefarious uses.</p>
<p>To evaluate a technologys effect, we must consider where it moves us from the current state of affairs, not judge against a Platonic ideal or past eta. In assessing LBRY, we must compare it to a world in which BitTorrent already exists and is quite popular, not the 1950s. LBRY is an improvement over BitTorrent in combatting unsavory content in at least five ways:</p>
<ol><li><strong>More records. </strong>LBRY contains a public ledger of transactions recording name purchases and content publishings. As many purchases make it onto the ledger as well, this means infringing actions are frequently recorded <em>forever, </em>or are at a minimum widely observable.</li>
<li><strong>Unilateral removal.</strong> The LBRY naming system allows for quick, unilateral acquisition of infringing URIs. Once a BitTorrent magnet hash is in the wild, there is no mechanism to update or alter its resolution whatsoever. If a LBRY name is pointing to infringing content, it can be seized according to clear rules. </li>
<li><strong>Blacklists</strong>. LBRY will publish and maintain a blacklist of infringing names. All clients we release and all legal clients will have to follow our blacklist, or one like it, or face substantial penalties. Especially because…</li>
<li><strong>Stiffer penalties. </strong>Penalties for profiting off of infringement are far stronger and involve can involve jail time, while infringement without profit only results in statutory damages. This serves as a far stronger deterrent for all infringing uses than BitTorrent provides.</li>
<li><strong>Expensive or impossible. </strong>Offchain settlement will be a requirement for efficient purchases at any significant network size. Settlement providers, ourselves included, will be able to block purchases for infringing content. At significant traffic volume, if infringing content cant be outright removed or blocked, transaction fees will make it prohibitively expensive.</li>
</ol>
<p>And of course, lets not forget that LBRY users are still subject to the DMCA and other laws governing intellectual property. Users who publishing infringing content are still subject to penalties for doing so in exactly the same way they would be via BitTorrent. LBRY only adds to the suite of options available. This makes LBRY a strict improvement over BitTorrent with regards to illegal usages, which provides none of the mechanisms listed.</p>
</section>
<section>
<h2>Our Values</h2>
<p>We want to be the first digital content marketplace to:</p>
<ol>
<li><strong>Treat users like adults</strong> LBRY doesnt play nanny. It encourages individual people to express their own preferences, rather than force our own onto them. We enable consumers to make their own choices about where and who they want to purchase digital content from.</li>
<li><strong>Operate openly, inclusively, and transparently</strong> Anyone can publish or interact with the LBRY network. No one needs permission from us or anyone else. LBRY encourages all parties to participate in the network, rather than the creation of walled gardens. LBRY is a completely open specification and all code is open source.</li>
<li><strong>Prove decentralization doesnt mean infringement</strong> Existing decentralized publishing protocols offer no way for rightsholders to combat or capture profits from illegally shared content. LBRYs service layer, blacklisting mechanisms, and naming system all improve the status quo.</li>
<li><strong>Acknowledge modern digital realities and ethical norms</strong> Prohibition has failed at every turn and in every iteration. Regulating human behavior only works when it aligns with moral norms that are shared by the majority of the population.
If it is impossible to keep drugs out of prisons, it will never be possible to enforce copyright via analogous tactics on the infinitely less-controlled internet. Instead, focus on enticement. While legal compliance is paramount, concentrate as much as possible on making a system that relies more on giving people no excuse to do the wrong thing.</li>
<li><strong>Collect no rent</strong>. Whatever an artist or creator charges for their work should go to them. Distributing bits is exceedingly simple. Theres no need to give 45% to YouTube or 30% to Apple. Collecting no rent isnt just a promise, its hard coded. The nature of LBRY means this could never be done -- by us or anyone else.</li>
</ol>
</section>
<section>
<h2>TL;DR</h2>
<p>Digital art is one of the first goods to evolve beyond scarcity. This evolution is changing the way content is discovered, publicized, paid for and delivered. Heretofore, the lack of transparency and monetization mechanisms in peer-to-peer sharing networks has largely enabled piracy. By equipping a peer-to-peer protocol with a digital currency and transparent decentralized ledger, the LBRY protocol opens the door to a new era of digital content distribution making peer-to-peer content distribution suitable for major publishing housing, self-publishers and everyone in between.</p>
<p>If LBRY succeeds, we will enter a world that is even more creative, connected, and conservatory. We will waste less and we make more. We will create a world where a teenager in Kenya and a reality star in Los Angeles use the same tool to search the same network and have access to the same results -- a world where information, knowledge, and imagination know no borders. </p>
<p>Build our dream with us. Download LBRY at <a class="link-primary" href="https://lbry.io/get">lbry.io/get</a>.</p>
</section>
</div>
<?php echo View::render('nav/learnFooter') ?>
</main>
<?php echo View::render('nav/footer') ?>
<?php /*
<h3>Layer 1: Protocol</h3>
<p>While the protocol is one comprehensive set of rules, it is easier to understand as two parts.</p>
<h4>Part A: The LBRY Blockchain</h4>
<p>A <em>blockchain</em>, or <em>distributed ledger</em> is the key innovation behind the Bitcoin network. Blockchains solved the very complicated technological problem of having a bunch of distributed, disparate entities all agree on a rivalrous state of affairs (like how much money they owe each other).</p>
<p>Like Bitcoin, the LBRY blockchain maintain balances -- in this case, balances of <em>LBC</em>, LBRYs unit of credit. More importantly, the LBRY blockchain also provides a decentralized lookup and metadata storage system. The LBRY blockchain supports a specific set of commands that allows anyone to bid (in LBC) to control a LBRY <em>name</em>, which is a lot like a domain name. Whoever controls a name gets to describe what it contains, what it costs to access, who to pay, and where to find it. These names are sold in a continuous running auction. We will talk more about this system a little later on.</p>
<p>If youre a programmer, you might recognize the LBRY blockchain as a <em>key-value store</em>. Each key, or name, corresponds to a value, or a metadata entry. Whichever party or parties bid the most LBC gets to control the metadata returned by a key lookup.</p>
<p>Here is a sample key-value entry in the LBRY blockchain. Here, wonderfullife is the key, and the rest of the description is the value.</p>
<div class="code-bash">
<code><pre style="white-space: pre-wrap;">
<span class="code-bash-kw1">wonderfullife</span> : {
<span class="code-bash-kw2">title</span>: "Its a Wonderful Life",
<span class="code-bash-kw2">description</span>: "An angel helps a compassionate but despairingly frustrated businessman by showing what life would have been like if he never existed.",
<span class="code-bash-kw2">thumbnail</span>: "http://i.imgur.com/MW45x88.jpg",
<span class="code-bash-kw2">license</span>: "public domain",
<span class="code-bash-kw2">price</span>: 0, <span class="code-bash-comment">//free!</span>
<span class="code-bash-kw2">publisher</span>: "A Fan Of George Bailey", <span class="code-bash-comment">//simplification</span>
<span class="code-bash-kw2">sources</span>: { <span class="code-bash-comment">//extensible, variable list</span>
<span class="code-bash-kw2">lbry_hash</span> : &lt;unique id&gt;,
<span class="code-bash-kw2">url</span> : &lt;url&gt;
}
}</pre></code>
</div>
<div class="meta text-center content-inset"><p>A slightly simplified sample entry of metadata in the LBRY blockchain. Whichever party or parties bid the most in an ongoing auction control what a name returns.</p></div>
<p>Other than the usage of the LBRY blockchain to store names and metadata, there are only minor differences between the blockchains of LBRY and Bitcoin, and the changes are generally consensus improvements. Weve buffed the hashing algorithm, smoothed the block reward function, increased the block size, increased the total number of credits, and prepared for offchain settlement.</p>
<p>The LBRY blockchain simply maintains LBC balances and a content namespace/catalogue. The next part, LBRYnet, specifies what to do with this data. To compare to the existing web, the blockchain is like the domain system (it maintains a listing of what is available), while the next piece makes it possible to actually fetch and pay for content.</p>
<footer> If youre a Bitcoiner wondering why we dont use the Bitcoin blockchain, you can read a detailed answer to that question <a href="https://blog.lbry.io/why-doesnt-lbry-just-use-bitcoin/">here</a>.</footer>
<h4>Part B: The Data Network (LBRYNet)</h4>
<p>LBRYNet is the layer that makes the LBRY blockchain useful beyond a simple payment system. It says what to do with the information available in the LBRY blockchain, how to issue payments, how to look up a content identifier, and so on. </p>
<p>To use the LBRY network, a users computer needs the capacity to speak LBRY. That layer is LBRYNet. Just as your computer has a library that enables it to understand HTTP, DNS, and other languages and protocols, LBRYNet is the piece of software that allows your computer to understand how to interact with the LBRY network.</p>
<p>To understand what role LBRYNet plays, lets drill a little more into a sample user interaction. Once a user has affirmed access and purchase, such as in step 5 of our Sample Use above, the following happens:</p>
<ol>
<li>LBRYNet issues a lookup for the name associated with the content. If the client does not have a local copy of the blockchain, this lookup is broadcast to miners or to a service provider. This lookup acquires the metadata associated with the name.</li>
<li>LBRYNet issues any required payments, as instructed by metadata entries.
<ol>
<li>If the content is set to free, nothing happens here.</li>
<li>If the content is set to have a price in LBC, the client must issue a payment in LBC to the specified address. If the content is published encrypted, LBRYNet will not allow access until this payment has been issued.</li>
<li>If the content is set to have another payment method, the seller must run or use a service that provides a private server enforcing payment and provisioning accessing keys.</li>
</ol>
</li>
<li>Simultaneous to #2, LBRYNet uses the metadata to download the content itself.
<ol>
<li>The metadata allows chunks to be discovered and assembled in a BitTorrent-like fashion. However, unlike BitTorrent, chunks do not individually identify themselves as part of a greater whole. Chunks are just arbitrary pieces of data.</li>
<li>If LBRYNet cannot find nodes offering chunks for free, it will offer payments for chunks to other hosts with those chunks.</li>
<li>This payment is not done via proof-of-bandwidth, or third-party escrow. Instead, LBRYNet uses reputation, trust, and small initial payments to ensure reliable hosts. </li>
<li>If content is not published directly to LBRY, the metadata can instruct other access methods, such as a Netflix URL. This allows us to catalogue content not yet available on LBRY as well as offer legacy and extensibility purposes.</li>
</ol>
</li>
</ol>
<h3>Layer 2: Services</h3>
<p>Services are what actually make the LBRY protocol <em>useful. </em>While the LBRY protocol determines what is possible, it is the services that actually do things.</p>
<p>While the protocol is determined, open, and fixed, the service layer is much more flexible. It is far easier to redesign a website than it is to revise the HTTP protocol itself. The same is true here.</p>
<p>Additionally, just as in the early days of the internet the later direction of web would have been unfathomable, so too may the best uses of LBRYs namespace or technology be undiscovered. However, here are some clear uses.</p>
<h4>Applications and Devices</h4>
<p>A LBRY application is how a user would actually have meaningful interactions with the LBRY network. A LBRY client packages the power of the LBRY protocol into a simple application that allows the user to simply search for content, pay for it when necessary, download and enjoy.</p>
<p>Additionally, a LBRY client can allow users to passively participate in the network, allowing them to automatically earn rewards in exchange for contributing bandwidth, disk space, or processing power to the overall network.</p>
<p>Applications beyond a traditional computer based browser are possible as well. A LBRY television dongle, a LBRY radio, and any number of existing content access mechanisms can be implemented via an analogous LBRY device.</p>
<h4>Content Discovery</h4>
<p>Although the namespace provided by the LBRY protocol is helpful towards discovery, much as the web would be much less useful without search engines or aggregators, LBRY needs its own discovery mechanisms.</p>
<p>Search features can be constructed from the catalogue of metadata provided in the blockchain as well as the content transaction history available in the blockchain or observed on the network. All of this data, along with user history, allows for the creation of content recommendation engines and advanced search features.</p>
<p>Discovery on LBRY can also take the form of featured content. Clients can utilize featured content to provide additional visibility for new content that consumers might not otherwise be looking for.</p>
<h4>Content Distribution</h4>
<p>Digital content distributors with server-client models are subject to the whims of internet service providers and hostile foreign governments. Traffic from the host servers can be throttled or halted altogether if the owners of cables and routers so choose. However, in case of the LBRY protocol content comes from anywhere and everywhere, and is therefore not so easily stifled. </p>
<p>Additionally, the market mechanisms of LBRY create a strong incentive for efficient distribution, which will save the costs of producers and ISPs alike. These properties, along with LBRYs infringement disincentivizing properties, make LBRY an appealing technology for large existing data or content distributors.</p>
<h4>Transaction Settlement</h4>
<p>While payments can be issued directly on the LBRY blockchain, the LBRY protocol encourages a volume of transactions that will not scale without usage of offchain settlement.</p>
<p>Essentially, rather than issue a transaction to the core blockchain, transactions are issued to a 3rd-party provider. These providers have a substantial number of coins which are used to maintain balances internally and settle a smaller number of transactions to the core chain. In exchange, these providers earn a small fee, less than the fee required to issue the transaction directly to the blockchain.</p>*
*/ ?>

View file

@ -1,10 +1,9 @@
<h3><?php echo __('Also On') ?></h3>
<div class="spacer1">
<a href="//twitter.com/lbryio" class="link-primary"><span class="icon icon-twitter"></span><span class="btn-label">Twitter</span></a>
<a href="//twitter.com/lbryio" class="link-primary"><span class="icon-twitter icon-fw"></span><span class="btn-label">Twitter</span></a>
</div>
<div class="spacer1">
<a href="//www.facebook.com/lbryio" class="link-primary"><span class="icon icon-facebook"></span> <span class="btn-label">Facebook</span></a>
<a href="//www.facebook.com/lbryio" class="link-primary"><span class="icon-facebook icon-fw"></span><span class="btn-label">Facebook</span></a>
</div>
<div class="spacer1">
<a href="//reddit.com/r/lbry" class="link-primary"><span class="icon icon-reddit"></span><span class="btn-label">Reddit</span></a>
<a href="//reddit.com/r/lbry" class="link-primary"><span class="icon-reddit icon-fw"></span><span class="btn-label">Reddit</span></a>
</div>

View file

@ -0,0 +1,11 @@
<?php /*
<div class="spacer1">
<a class="link-primary" href="/docs"><span class="icon-file-code-o icon-fw"></span><span class="btn-label">Documentation</span></a>
</div>
*/ ?>
<div class="spacer1">
<a href="//github.com/lbryio" class="link-primary"><span class="icon-github icon-fw"></span><span class="btn-label">GitHub (source code)</span></a>
</div>
<div class="spacer1">
<a href="/slack" class="link-primary"><span class="icon-slack icon-fw"></span><span class="btn-label">Slack (chat)</span></a>
</div>

View file

@ -76,6 +76,8 @@ section
.meta { font-size: 0.8em; }
.meta-large { font-size: 1.2em; }
.clear { clear: both; }
.align-left { float: left; }
.align-right { float: right; }
.link-primary
{
@ -161,7 +163,7 @@ a:hover img
.table-layout
{
td
td
{
padding: 3px 5px $spacing-vertical - 3px;
vertical-align: middle;

View file

@ -16,6 +16,7 @@
{
margin-left: auto;
margin-right: auto;
max-width: 800px;
a[href]
{
@include anchor($color-primary);

View file

@ -1,10 +1,4 @@
@import "global";
.content-constrained
{
max-width: $max-content-width; /*we have more padding than desirable so numbers from ol can exceed container*/
margin-left: auto;
margin-right: auto;
}
.content
{
margin-left: auto;
@ -18,6 +12,14 @@
{
max-width: 1400px;
}
&.content-tile
{
max-width: $max-text-width;
}
&.content-readable
{
max-width: $max-text-width + 200;
}
padding-left: 15px;
padding-right: 15px;

View file

@ -24,7 +24,7 @@
.cover-title { font-size: 2.8em; margin-bottom: $spacing-vertical; }
}
@media (min-width: $mobile-width-threshold) {
.cover-title { font-size: 4.0em; }
.cover-title { font-size: 4.0em; &.cover-title-tile { font-size: 2.8em; } }
}
@media (max-width: $max-content-width) and (min-width: $mobile-width-threshold) {
.cover { padding: $spacing-vertical * 1.5 $spacing-vertical * 2; }

View file

@ -17,6 +17,16 @@ input[type="email"], input[type="text"]
height: $spacing-vertical * 1.5;
}
.span4 input[type="email"] /*hack rule fix me*/
{
width: 100%;
}
form .full-width
{
width: 100%;
}
textarea
{
width: 100%;

View file

@ -8,7 +8,7 @@ $color-text-dark: #000;
$color-money: #216C2A;
$color-meta-light: #505050;
$font-size: 18px;
$font-size: 16px;
$mobile-width-threshold: 801px;
$max-content-width: 1000px;
@ -21,13 +21,13 @@ $font-body: 'Raleway', sans-serif;
{
color: $color;
text-decoration: underline;
.icon:first-child
[class*="icon-"]:first-child
{
padding-right: 5px;
padding-right: 8px;
}
.icon:last-child
[class*="icon-"]:last-child
{
padding-left: 5px;
padding-left: 8px;
}
}

View file

@ -66,7 +66,14 @@ $gutter_fluid: 4;
}
}
.row-fluid, .tile-fluid {
.column-fluid-constrained
{
max-width: 1400px;
margin-left: auto;
margin-right: auto;
}
.row-fluid, .tile-fluid, .row-fluid-always {
@include clearfix();
}

View file

@ -11,6 +11,10 @@ $color-nav-border: #ddd;
z-index: 1;
.icon-close { display: none; }
}
.header-absolute
{
position: absolute;
}
.header-scroll
{
z-index: 2;

View file

@ -23,6 +23,11 @@
font-size: inherit;
text-rendering: auto;
transform: translate(0, 0);
&.icon-fw
{
width: 1.6em;
text-align: center;
}
}
.icon-mega