diff --git a/index.html b/index.html index ad78a43..cce5d98 100644 --- a/index.html +++ b/index.html @@ -194,15 +194,11 @@ fixme final polish checklist:

Introduction

-

LBRY is a protocol for accessing and publishing digital content in a global, decentralized marketplace. Clients can use LBRY to publish, host, find, download, and pay for content — books, movies, music, or anything else that can be represented as a stream of bits. Participation in the network is open to everyone. No permission is required, and no one may be blocked from participating. No single entity has unilateral control, nor will the removal of any single entity prevent the system from functioning.

+

LBRY is a protocol for accessing and publishing digital content in a global, decentralized marketplace. LBRY uses a public blockchain to provide shared, consistent metadata across the network, as well for payment and content discovery.

-

TODO:

+

Clients can use LBRY to publish, host, find, download, and pay for content — books, movies, music, or anything else that can be represented as a stream of bits. Participation in the network is open to everyone. No permission is required, and no one may be blocked from participating. No single entity has unilateral control, nor will the removal of any single entity prevent the system from functioning.

- +

LBRY is a step forward from previous generations of decentralized networks, which provide no discovery or payment mechanisms. For creators, LBRY is unparalleled in trust and earning potential. For consumers, LBRY is the first system that provides end-to-end digital content consumption that does not require trusting a third-party. For the world, LBRY is designed to engender the most complete catalog of information to ever exist, and to be controlled by the only party that could be trusted with such monumental responsibility: no one.

Assumptions

@@ -662,9 +658,26 @@ OP_SUPPORT_CLAIM <name> <claimID> OP_2DROP OP_DROP <outputScript&

Proof of Payment

- +

No system can strongly enforce digital intellectual property rights, especially not a decentralized one. Therefore, the protocol must be able to produce evidence that differentiates legitimate and illegitimate use. In LBRY, this is done via blockchain transactions and proofs of payment.

-

TODO: Explain how transactions serve as proof that a client has made a valid payment for a piece of content.

+

A proof of payment has two components:

+ +
    +
  1. A transaction on the blockchain that spends credits to the fee address for a claim (the transaction must send a number of credits equal to or greater than the fee amount for the claim).
  2. +
  3. Proof that a client knows the private key of the address that the transaction spends from.
  4. +
+ +

To prove 1, it is sufficient to provide the transaction ID and input index of the spend. Proving 2 requires signing a nonce using the associated private key.

+ +

Verifying a proof of payment is done as follows:

+ +
    +
  1. Look up the fee amount and fee address of the claim that the proof is for.
  2. +
  3. Use the transaction ID from the proof to find the transaction. verify that it spends the correct amount to the correct address.
  4. +
  5. Use the public key from the transaction output to verify the signed nonce.
  6. +
+ +

The protocol is likely to be extended in the future to enable stricter proofs of payment.

Consensus

diff --git a/index.md b/index.md index c84b4cf..8058a0e 100644 --- a/index.md +++ b/index.md @@ -607,10 +607,22 @@ The `
` in this script may be the same as the address in the original tr #### Proof of Payment - +No system can strongly enforce digital intellectual property rights, especially not a decentralized one. Therefore, the protocol must be able to produce evidence that differentiates legitimate and illegitimate use. In LBRY, this is done via blockchain transactions and proofs of payment. -TODO: Explain how transactions serve as proof that a client has made a valid payment for a piece of content. +A proof of payment has two components: +1. A transaction on the blockchain that spends credits to the fee address for a claim (the transaction must send a number of credits equal to or greater than the fee amount for the claim). +2. Proof that a client knows the private key of the address that the transaction spends from. + +To prove 1, it is sufficient to provide the transaction ID and input index of the spend. Proving 2 requires signing a nonce using the associated private key. + +Verifying a proof of payment is done as follows: + +1. Look up the fee amount and fee address of the claim that the proof is for. +2. Use the transaction ID from the proof to find the transaction. verify that it spends the correct amount to the correct address. +3. Use the public key from the transaction output to verify the signed nonce. + +The protocol is likely to be extended in the future to enable stricter proofs of payment. ### Consensus diff --git a/readme.md b/readme.md index 746d42e..59b2ebd 100644 --- a/readme.md +++ b/readme.md @@ -1,8 +1,30 @@ # LBRY Protocol Specification -This is the official protocol spec for the LBRY protocol. +LBRY is a protocol for accessing and publishing digital content in a global, decentralized marketplace. -## Editing +This repo contains the official protocol specification for LBRY. -- edit text in index.md -- run `make` to build index.html \ No newline at end of file +## Usage + +The spec is available at https://lbryio.github.io/spec. You can also view it locally by opening `index.html` in your browser. + +## Contributing + +To edit the spec: + +- make changes in `index.md` +- run `./build.sh` to build `index.html` + +Contributions to this project are welcome, encouraged, and compensated. For more details, [click here](https://lbry.io/faq/contributing). + +## License + +This project is MIT licensed. For the full license, see [LICENSE](LICENSE). + +## Security + +We take security seriously. Please contact security@lbry.io regarding any security issues. [Our GPG key is here](https://lbry.io/faq/gpg-key) if you need it. + +## Contact + +The primary contact for this project is [@lyoshenka](https://github.com/lyoshenka) (grin@lbry.io). \ No newline at end of file