Skip to content

Commit 69aa9d4

Browse files
Podcasting 2.0 blip
1 parent 6e54938 commit 69aa9d4

File tree

1 file changed

+86
-0
lines changed

1 file changed

+86
-0
lines changed

blip-000X2.md

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
```
2+
bLIP: xxxx
3+
Title: Podcasting 2.0 Boosts and Boostagrams
4+
Status: Active
5+
Author: Satoshis Stream <satoshisstream@pm.me>
6+
Created: 2022-01-24
7+
License: CC0
8+
```
9+
10+
## Abstract
11+
12+
Using Podcasting 2.0 apps, listeners can send sats to the hosts of the podcasts they listen. Per minute sending is called `stream` and manual payments are called `boost`s. If there is a message to the podcaster, with a boost, it is called a `boostagram`.
13+
This is part of what is known as "the Value for Value system". These apps (see [Reference Implementations](#reference-implementations)) adopted the 7629169 TLV type for inputting key-value JSON metadata about the sent payment. The TLV holds data about the timestamp when the payment was sent within the episode, the name of the podcast and its [Guid](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#guid), among other fields described in the [Specification](#Specification) section.
14+
15+
Example: `{'podcast': 'PODCASTNAME', 'feedID': 1337, 'episode': 'EPISODENAME', 'action': 'boost', 'ts': 33 }`
16+
17+
## Copyright
18+
19+
This bLIP is licensed under the CC0 license.
20+
21+
## Specification
22+
23+
The sender of the payments (the Podcast app) needs to input some metadata so the podcast host can identify whom the payment is for. Most fields are optional.
24+
25+
Identifying the podcast **required**: use any of `podcast`, `feedID` or `url`. **guid preferred**
26+
* `podcast` (str) Title of the podcast
27+
* `feedID` (int) ID of podcast in PodcastIndex.org
28+
* `url` (str) RSS feed URL of podcast
29+
* `guid` (str) [The `<podcast:guid>` tag](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#guid).
30+
31+
Identifying the episode **recommended**: use any of `episode`, `itemID` or `episode_guid`. **itemID preferred**
32+
* `episode` (str) Episode of the podcast
33+
* `itemID` (int) ID of episode in PodcastIndex.org
34+
* `episode_guid` (str) The GUID of the episode
35+
36+
Information about time within the episode **recommended**: use any of `time`, `ts`. **ts preferred**
37+
* `time` (str) HH:MM:SS timestamp when the boost/stream was sent WITHIN the episode (playback position)
38+
* `ts` (int) Timestamp when the boost/stream was sent WITHIN the episode (playback position)
39+
40+
Rest of keys:
41+
* `action` **recommended**: (str) "boost" or "stream"
42+
* `app_name`: **recommended** (str) Name of sending app
43+
* `app_version`: (str) Version of sending app
44+
* `boost_link`: (str) App specific URL containing route to podcast, episode, and timestamp at time of boost.
45+
* `message` (str) Text message to add to the boost message: a boostagram
46+
* `name` **recommended** (str) Name for this split in value tag
47+
* `pubkey` (str) Sending node pubkey
48+
* `seconds_back` (int) The amount of seconds someone has listened since last and until this payment. Usually 60 (sending every minute). Batching can be done for streaming payments by setting 600 for 10-minute streaming payments.
49+
* `sender_key` (str) Node key of sending
50+
* `sender_name` (str) Name of sender (free text, not checked by signatures)
51+
* `sender_id` (str) Static random identifier for users, not displayed by apps, for abuse purposes. Apps can set this per-feed or app-wide. A GUID-like random identifier or a hash works well. Max 32 ascii characters.
52+
* `sig_fields` (str) pipe separated list of fields that are used for signature (example: feedID|itemID|ts|action|sender_key|message)
53+
* `signature` (str) DER-encoded ECDSA signature
54+
* `speed` (str) Speed in which the podcast was played, in decimal. So 0.5 is half speed and 2 is double speed.
55+
* `uuid` (str) Unique UUID of the payment
56+
* `value_msat`: (int) Number of millisats for this split payment (this is in the meta/payment data too)
57+
* `value_msat_total`: (int) TOTAL Number of millisats for the payment (all splits together, before fees. The actual number someone entered in their player, for numerology purposes.)
58+
59+
## Motivation
60+
61+
The Value for Value system is a way for podcasters to receive direct payments from listeners in the form of bitcoin through the Lightning Network. It provides not only a new way for podcast to earn and keep their independency, but also new forms of interaction between podcasters and its listeners.
62+
63+
Using the same TLV type allow for podcast creators to understand the messages regardless of which podcast app it was sent from and which solution they used to receive their payments.
64+
65+
_Future: The specification could be used for other media types, too._
66+
67+
## Rationale
68+
69+
The TLV type 7629169 was originally chosen by Breez and other applications adopted it to keep the same standard.
70+
71+
The required and recommended fields are constantly evolving by iterations from different Podcast 2.0 apps. Some of these fields are related to the extensions proposed by [PodcastIndex.org](https://podcastindex.org/) to the RSS 2.0 spec in order to deliver new functionality to apps and aggregators (see [the Podcast Namespace](https://github.com/Podcastindex-org/podcast-namespace))
72+
73+
## Universality
74+
75+
This usage of the 7629169 TLV type is only intended for Lightning applications in the Podcasting 2.0 space. Lightning applications that do not intersect with Podcasting 2.0 have no need to implement this standard. Additionally, no additional work is required from a Lightning implementation itself beyond BOLT-specified TLV support in order to enable this use case at the application layer.
76+
77+
## Backwards Compatibility
78+
79+
This is not using a feature bit and the TLV record is oddly typed, so there are no concerns regarding backwards compatibility.
80+
81+
## Reference Implementations
82+
83+
* Breez: https://github.com/breez/breezmobile/blob/4cf057c066d03c155964f0c4db43476cd70a57ab/lib/bloc/podcast_payments/podcast_payments_bloc.dart
84+
* Podverse: https://github.com/podverse/podverse-shared/blob/fff84c0143dea4fa01241109b8666d4c0b9a6ffc/src/satoshiStream.ts
85+
* PodStation: https://github.com/podStation/podStation/pull/249
86+
* Helipad: https://github.com/Podcastindex-org/helipad/blob/203e72dafb65e4f9e89540fbe4fc07a456a9907a/src/main.rs

0 commit comments

Comments
 (0)