kopia lustrzana https://github.com/Podcastindex-org/podcast-namespace
Merge branch 'main' into patch-1
commit
c6b3115d32
|
@ -22,7 +22,7 @@
|
|||
"startTime": 410,
|
||||
"title": "Namespace",
|
||||
"img": "https://example.com/images/namepsace_example.jpg",
|
||||
"url": "https://github.com/Podcastindex-org/podcast-namespace"
|
||||
"url": "https://github.com/Podcastindex-org/podcast-namespace",
|
||||
},
|
||||
{
|
||||
"startTime": 3990,
|
||||
|
@ -30,6 +30,13 @@
|
|||
"img": "https://example.com/images/justbreakuppod.png",
|
||||
"url": "https://twitter.com/justbreakuppod"
|
||||
},
|
||||
{
|
||||
"startTime": 4200,
|
||||
"title": "Played song by artist",
|
||||
"img": "https://i.discogs.com/R-249504-1334592212.jpeg?bucket=discogs-images&fit=contain&format=auto&height=600&quality=90&width=600&signature=wMI9I0mHkbVxkkryQrN1JkkzhwFsrereuom9Lmfa92w%3D",
|
||||
"url": "https://www.discogs.com/Rick-Astley-Never-Gonna-Give-You-Up/master/96559"
|
||||
"value": "<podcast:value type=\"lightning\" method=\"keysend\" suggested=\"0.00000005000\"><podcast:valueRecipient name=\"Performing Artist\" type=\"node\" address=\"03c457fafbc8b91b462ef0b8f61d4fd96577a4b58c18b50e59621fd0f41a8ae1a4\" split=\"100\"/></podcast:value>"
|
||||
},
|
||||
{
|
||||
"startTime": 4600,
|
||||
"title": "Donations",
|
||||
|
@ -57,4 +64,4 @@
|
|||
"title": "Outro"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
23
docs/1.0.md
23
docs/1.0.md
|
@ -116,8 +116,9 @@ truncated by aggregators.
|
|||
<br><br><br><br><!-- Tag block -->
|
||||
## Chapters
|
||||
`<podcast:chapters>`<br><br>
|
||||
Links to an external file (see example file) containing chapter data for the episode. See the [jsonChapters.md](https://github.com/Podcastindex-org/podcast-namespace/blob/main/chapters/jsonChapters.md)
|
||||
file for a description of the chapter file syntax. And, see the [example.json](https://github.com/Podcastindex-org/podcast-namespace/blob/main/chapters/example.json) example file for a real world example.
|
||||
Links to an external file (see example file) containing chapter data for the episode. See the [jsonChapters.md](https://github.com/Podcastindex-org/podcast-namespace/blob/main/chapters/jsonChapters.md) file for a description of the chapter file syntax. And, see the [example.json](https://github.com/Podcastindex-org/podcast-namespace/blob/main/chapters/example.json) example file for a real world example.
|
||||
|
||||
Benefits with this approach are that chapters do not require altering audio files, and the chapters can be edited after publishing, since they are a separate file that can be requested on playback (or cached with download). JSON chapter information also allows chapters to be displayed by a wider range of playback tools, including web browsers (which typically have no access to ID3 tags), thus greatly simplifying chapter support; and images can be retrieved on playback, rather than bloating the filesize of the audio. The data held is compatible with normal ID3 tags, thus requiring no additional work for the publisher.
|
||||
|
||||
### Parent
|
||||
`<item>`
|
||||
|
@ -531,16 +532,20 @@ This element defines a method of verifying integrity of the media given either a
|
|||
<br><br><br><br><!-- Tag block -->
|
||||
## Guid
|
||||
`<podcast:guid>`<br><br>
|
||||
This element is used to declare a unique, global identifier for a podcast. The value is a UUIDv5, and is easily generated from the RSS feed url, with the **protocol scheme and trailing slashes stripped off**, combined with a unique "podcast" namespace
|
||||
which has a UUID of `ead4c236-bf58-58c6-a2c6-a6b28d128cb6`. Tools like [this one](https://www.uuidtools.com/v5) can help generate these values by hand. Or, language libraries like [this one](https://github.com/sporkmonger/uuidtools) in Ruby are widely
|
||||
available.
|
||||
This element is used to declare a unique, global identifier for a podcast. The value is a UUIDv5, and is easily generated from the RSS feed url, with the **protocol scheme and trailing slashes stripped off**, combined with a unique "podcast" namespace which has a UUID of `ead4c236-bf58-58c6-a2c6-a6b28d128cb6`. Tools like [this one](https://www.uuidtools.com/v5) can help generate these values by hand. Or, language libraries like [this one](https://github.com/sporkmonger/uuidtools) in Ruby are widely available.
|
||||
|
||||
A podcast gets assigned a podcast:guid once in its lifetime using its current feed url (at the time of assignment) as the seed value. That GUID is then meant to follow the podcast from then on, for the duration of its life, even if the feed url
|
||||
changes. This means that when a podcast moves from one hosting platform to another, its podcast:guid should be discovered by the new host and imported into the new platform for inclusion into the feed.
|
||||
A podcast gets assigned a podcast:guid once in its lifetime using its current feed url (at the time of assignment) as the seed value. That GUID is then meant to follow the podcast from then on, for the duration of its life, even if the feed url changes. This means that when a podcast moves from one hosting platform to another, its podcast:guid should be discovered by the new host and imported into the new platform for inclusion into the feed.
|
||||
|
||||
Using this pattern, podcasts can maintain a consistent identity across the open RSS ecosystem without a central authority.
|
||||
|
||||
**Tips:** A GUID is 36 characters long. All podcasts in the Podcast Index have already been assigned a GUID; but if one exists in the RSS feed, that value is canonical.
|
||||
**Tips:**
|
||||
* All podcasts in the Podcast Index have already been assigned a GUID; but if one exists in the RSS feed, that value is canonical.
|
||||
* You can programmatically spot a GUID: it is 36 characters long, and contains four hyphen characters.
|
||||
* Be aware that Amazon Music also uses separate UUIDv5 identifiers within their podcast directory, which are calculated differently and unrelated to this specification.
|
||||
* The following regular expression (regex) will match a GUID:
|
||||
```re
|
||||
[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}`
|
||||
```
|
||||
|
||||
### Parent
|
||||
`<channel>`
|
||||
|
@ -675,4 +680,4 @@ this tag works and what it is capable of.
|
|||
fee="true"
|
||||
/>
|
||||
</podcast:value>
|
||||
```
|
||||
```
|
||||
|
|
|
@ -44,6 +44,7 @@ For elements that are included in the official [DTD](https://github.com/Podcasti
|
|||
12. [Podlove Podcast Publisher](https://github.com/podlove/podlove-publisher/releases/tag/3.3.1)
|
||||
13. [Podcat](https://twitter.com/podlove_org/status/1363586304643133442)
|
||||
14. [RSS.com Podcasting](https://rss.com)
|
||||
15. [Anytime Podcast Player](https://play.google.com/store/apps/details?id=uk.me.amugofjava.anytime)
|
||||
|
||||
## Chapters `<podcast:chapters>`
|
||||
1. [Podcast Chapters](https://chaptersapp.com/faq/jsonExport.html)
|
||||
|
@ -58,6 +59,7 @@ For elements that are included in the official [DTD](https://github.com/Podcasti
|
|||
10. [PodServe.fm](https://www.podserve.fm)
|
||||
11. [JustCast.com](https://twitter.com/thejustcast/status/1420783756156145664)
|
||||
12. [RSS.com Podcasting](https://rss.com)
|
||||
13. [Anytime Podcast Player](https://play.google.com/store/apps/details?id=uk.me.amugofjava.anytime)
|
||||
|
||||
## Soundbites `<podcast:soundbite>`
|
||||
1. [Buzzsprout](https://www.buzzsprout.com)
|
||||
|
|
|
@ -0,0 +1,78 @@
|
|||
# An Open Letter to Apple
|
||||
|
||||
> Please leave a comment and I'll invite you and give you edit power - Brian
|
||||
|
||||
[](https://hackmd.io/x-EFQGinSrCquuV-KYn72A)
|
||||
|
||||
|
||||
Signatories:
|
||||
## Adam Curry - The Podfather
|
||||
### Co-inventor of Podcasting.
|
||||
|
||||
## Podcasting 2.0
|
||||
Dave Jones
|
||||
Everybody else
|
||||
Brian of London
|
||||
|
||||
EARLY DRAFT v1.0
|
||||
|
||||
## What we're asking from Apple
|
||||
|
||||
1. **Podcast Linking**: allow iOS and Mac users to select their own choice of 3rd party Podcast playing app for links to podcasts. We have a standardised schema and a range of apps, which have adopted it. We would love to see the Apple Podcast app also recognise this standard way of linking to episodes of podcasts.
|
||||
2. **Use Podping**: We would be delighted to see Apple start using the free to use instant notification system Podping. This would dramatically reduce the number and frequency of checks on RSS feeds which Apple makes 24x7 to keep Apple's index up to date.
|
||||
3. **Appoint a dedicated Podcasting 2.0 Liason**: We'd love to see Apple recognise the vibrant Podcasting 2.0 development community and **engage with us** making everything better for everyone involved in Podcasting! This largely grass roots and direct form of communication is one of the most vibrant parts of the Internet and we want to keep it growing.
|
||||
|
||||
|
||||
## Background
|
||||
|
||||
Adam writes: "Back in 2005 I was called to a meeting with Steve Jobs. He asked me if it would be OK to put Podcasts directly into the software for the iPod: iTunes on the Mac.
|
||||
|
||||
This meeting followed a number of years of open source development which built the fledgling Podcasting industry. That effort had built production tools, distribution systems and podcast player software. We had our own Index which, following that meeting with Steve Jobs, I entrusted to Apple."
|
||||
|
||||
Many years later, through which Podcasting grew into a thriving industry all of its own, Apple still holds a special place with it's Index of shows and free to use API.
|
||||
|
||||
Today Apple maintains a large market dominance on its own iOS platform with the built in Podcasting App. But there is healthy competition from a range of apps produced by billion dollar companies right down to single person startups. All these apps compete on iOS and Google's Android and there is room for all of them.
|
||||
|
||||
## Podcast Linking
|
||||
|
||||
There is an important element missing, however, especially on iOS. The ability to share a link to a Podcast or epsiode of a show and have it open in the user's preferred application.
|
||||
|
||||
This choice is available on Google's Android system. We've recently seen search engine choice, browser choice and choice of email client added to iOS. We'd like to see Podcast App choice be added too.
|
||||
|
||||
Podcast listening is deeply personal. Podcast listeners have strong emotional ties to the content they follow and often to the apps they use. Podcasts are also deeply affected by word of mouth sharing and link sharing needs to be easier.
|
||||
|
||||
### Competition
|
||||
|
||||
All over the world, from Europe to Australia and the USA, competition authorities are looking very carefully at every aspect of big tech.
|
||||
|
||||
The browser wars of the 90's have carried into the heavy discussions today around mobile app store policies. Something as simple as reducing barriers to user's chosing a new primary Podcast App can only be seen as a win and encouraging of competition and choice for your customers.
|
||||
|
||||
## Podping
|
||||
|
||||
The diverse team of open source developers and Podcast lovers who have worked together under the Podcast Index stewardship have developed a revolutionary notification system for new podcast episode notifications.
|
||||
|
||||
**Podping** replaces energy wasteful, repetetive polling of millions of RSS feeds with an elegent blockchain based notification system.
|
||||
|
||||
Apple would need little more than a single Raspberry Pi, watching the stream of Podpings shared over the open source Hive blockchain. That could replace hundreds of energey burning servers Apple maintains today.
|
||||
|
||||
This one computer would notify Apple of every new episode within seconds of it being published and only then would Apple need to fetch the updated RSS feed and index its new content.
|
||||
|
||||
Podping is currently being used by the following podcast hosts and the *podpings* are picked up and used by PodcastIndex and a number of other apps:
|
||||
|
||||
- Buzzsprout.com
|
||||
- Transistor.fm
|
||||
- rss.com
|
||||
- Captivate.fm
|
||||
- podserve.fm
|
||||
- 3speak.tv
|
||||
- podnews.net
|
||||
|
||||
[You can "watch" Podping right now in the browser](https://podping.watch/), every new episode from any of these hosts will appear here and this can run in your browser, no need to check 100's of 1,000's of RSS feeds every hour!
|
||||
|
||||
With Apple on board and using Podping to provide much faster and more energy efficient updates of podcasts to millions of iOS devices, we are sure that the rest of the Podcast hosting companies would join.
|
||||
|
||||
## One More Thing
|
||||
|
||||
PodcastIndex has been working for over a year now and been at the center of developing many new initiatives around what we've called Podcasting 2.0. Those innovations we've mentioned in this letter are just the tip of an iceberg.
|
||||
|
||||
We know Apple has been passionate about Podcasting for almost as long as we have, we would love to collaborate further and see Apple adopt some of the innovations our teams come up with! Please get in touch with Adam directly and lets work together on making Podcasting even better.
|
|
@ -95,6 +95,8 @@ Because of these issues, we've created a way to receive cryptocurrency payments
|
|||
- [Podverse](https://podverse.fm)
|
||||
- [podStation](https://podstation.github.io)
|
||||
- [Sphinx.chat](https://sphinx.chat)
|
||||
- [Castamatic](https://castamatic.com)
|
||||
- [Fountain.fm](https://fountain.fm)
|
||||
|
||||
If you can't add the `<podcast:value>` tag to your feed manually, we also have created [a site](https://podcasterwallet.com) that can help you put a value tag directly into the Podcast Index database for your feed. Any apps that use the Podcast Index will see your value tag and be able to stream micropayments to you.
|
||||
|
||||
|
|
|
@ -1,37 +1,7 @@
|
|||
|
||||
|
||||
# The "podcast:hiveAccount" Specification
|
||||
# WITHDRAWN - The "podcast:hiveAccount" Specification
|
||||
|
||||
<small>Version 1.0 by Brian of London - 2021.06.08</small>
|
||||
|
||||
<br>
|
||||
|
||||
## Purpose
|
||||
|
||||
Allows for the easy inclusion of a definitive Hive Account to which Value for Value payments can be routed.
|
||||
|
||||
## Specification
|
||||
|
||||
For the `<podcast:hiveAccount>` tag there are no attributes, the tag just wraps the Hive account name string.
|
||||
|
||||
## Example
|
||||
|
||||
```xml
|
||||
<podcast:hiveAccount>no-agenda</podcast:hiveAccount>
|
||||
```
|
||||
|
||||
## More Information
|
||||
|
||||
More information about the Hive Blockchain can be found at the [Dev Portal for Hive](https://developers.hive.io/#introduction-welcome)
|
||||
|
||||
|
||||
# Alternate idea (but not quite as good)
|
||||
## It could be done with FUNDING tag!
|
||||
|
||||
<podcast:funding hiveAccname="brianoflondon">Support Brian of London </podcast:funding>
|
||||
|
||||
This could even be done via URL, but
|
||||
|
||||
<podcast:funding url="https://hive.blog/@brianoflondon">Support Brian of London</podcast:funding>
|
||||
|
||||
however that would need to be passed on in the TLV records.
|
||||
Withdrawn - It's handled better by `customKey` and `customValue` in the [`value block`](value/value.md)
|
|
@ -0,0 +1,133 @@
|
|||
# The "podcast:social" Specification
|
||||
|
||||
<small>Version 1.0 by Benjamin Bellamy - 2021.04.13</small>
|
||||
|
||||
<br />
|
||||
|
||||
## Purpose
|
||||
|
||||
Social networks (Facebook, Instagram, Twitter, Mastodon…) and discussion platforms (Slack, Discord, Jabber, IRC, Matrix…) are a convenient way
|
||||
for podcasters to interact with their audience, and for listeners to interact with podcasters.
|
||||
Thanks to them listeners can comment, share or like podcast episodes.
|
||||
The purpose of this specification is to allow podcast apps to know where they should guide the listeners to make these interactions - and the onboarding process
|
||||
necessary to make them possible - as seamless as possible.
|
||||
Of course not all podcast apps would implement all platforms. Each one would implement the one(s) they want to provide their users a better interaction with.
|
||||
|
||||
There are three elements:
|
||||
- **"podcast:social"** for the \<channel> element: tells the user **which platform(s)** is/are used for this podcast.
|
||||
- **"podcast:socialSignUp"** for the \<podcast:social> element: tells the user **where to sign up** on this platform.
|
||||
- **"podcast:socialInteract"** for the \<item> element: tells the user where to **interact with this specific episode**.
|
||||
|
||||
## Elements
|
||||
|
||||
### Social Element
|
||||
|
||||
- **\<podcast:social platform="[platform_id]" podcastAccountId="[podcast_account_id]" podcastAccountUrl="[podcast_account_url]" priority="[platform_priority]">**[one or more "podcast:socialPlatform" elements]**\</podcast:social>**
|
||||
|
||||
Channel (optional | multiple)
|
||||
|
||||
This element allows a podcaster to specify one or many platform where listeners can interact.
|
||||
There may be several occurences of this tag for the same element (on several platforms, the podcast may have several accounts on the same plaforms…)
|
||||
|
||||
- `platform` (required): This is the platform id. It can be on of the following:
|
||||
- activitypub
|
||||
- facebook
|
||||
- twitter
|
||||
- instagram
|
||||
- slack
|
||||
- discord
|
||||
- jabber
|
||||
- irc
|
||||
- matrix
|
||||
- …
|
||||
- `podcastAccountId` (required): The podcast ID on this platform.
|
||||
- `podcastAccountUrl` (required): The podcast URL on this platform.
|
||||
- `priority` (optional): This platform priority (useful if the podcaster wants to tell which platform is prefered, lower is better)
|
||||
|
||||
Examples:
|
||||
- `<podcast:social platform="twitter" podcastAccountId="@PodcastindexOrg" podcastAccountUrl="https://twitter.com/PodcastindexOrg"></podcast:social>`
|
||||
- `<podcast:social platform="activitypub" podcastAccountId="@podcastindex@noagendasocial.com" podcastAccountUrl="https://noagendasocial.com/@podcastindex"></podcast:social>`
|
||||
|
||||
### SocialSignUp Element
|
||||
|
||||
- **\<podcast:socialSignUp homeUrl="[home_url]" signUpUrl="sign_up_url" priority="[platform_priority]" />**
|
||||
|
||||
podcast:social (optional | multiple)
|
||||
|
||||
This element allows to make easy onboarding for listeners on social/discussion platforms, especially for decentralized ones (such as Matrix or ActivityPub) where podcasters and listeners can register on different servers.
|
||||
|
||||
- `homeUrl` (required): The platform home URL.
|
||||
- `signUpUrl` (required): The platform sign up URL.
|
||||
- `priority` (optional): This platform priority (useful if the podcaster wants to tell which platform is prefered, lower is better)
|
||||
|
||||
Examples:
|
||||
- `<podcast:socialSignUp homeUrl="https://twitter.com/" signUpUrl="https://twitter.com/login" priority="1" />`
|
||||
- `<podcast:socialSignUp homeUrl="https://podcastindex.social/public" signUpUrl="https://podcastindex.social/auth/sign_up" priority="2" />`
|
||||
|
||||
### SocialInteract Element
|
||||
|
||||
- **\<podcast:socialInteract platform="platform_id" podcastAccountId="podcast_account_id" pubDate="publication_date" priority="platform_priority">**[URL to this episode on this platform]**</podcast:social>**
|
||||
|
||||
Item (optional | multiple)
|
||||
|
||||
This element allows listeners to interact (comment, share, like…) with an episode.
|
||||
|
||||
- `platform` (required): This is the platform id. It can be on of the following:
|
||||
- activitypub
|
||||
- facebook
|
||||
- twitter
|
||||
- instagram
|
||||
- slack
|
||||
- discord
|
||||
- jabber
|
||||
- irc
|
||||
- matrix
|
||||
- …
|
||||
- `podcastAccountId` (required): The podcast ID on this platform.
|
||||
- `pubDate` (optional): publication date on this platform. This can be useful when there are several interactions for the same plateform for the same episode (for instance , two Tweets about the same episode). Format must be ISO 8601.
|
||||
- `priority` (optional): This platform priority (useful if the podcaster wants to tell which platform is prefered, lower is better)
|
||||
- element's content: URL to this episode on this platform
|
||||
|
||||
Examples:
|
||||
- `<podcast:socialInteract platform="twitter" podcastAccountId="@Podverse" priority="2" pubDate="2021-04-14T10:25:42Z">https://twitter.com/Podverse/status/1375624446296395781<podcast:socialInteract>`
|
||||
|
||||
## Full RSS feed example
|
||||
|
||||
```
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:podcast="https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
|
||||
<channel>
|
||||
<atom:link xmlns:atom="http://www.w3.org/2005/Atom" href="https://lespoesiesdheloise.fr/@heloise/feed.xml" rel="self" type="application/rss+xml"/>
|
||||
<title>Les Poésies d’Héloïse</title>
|
||||
[…]
|
||||
|
||||
<podcast:social priority="1" platform="activitypub" podcastAccountId="@heloise@lespoesiesdheloise.fr" podcastAccountUrl="https://lespoesiesdheloise.fr/@heloise">
|
||||
<podcast:socialSignUp priority="1" homeUrl="https://enfants-et-famille.podcasts.chat/public" signUpUrl="https://enfants-et-famille.podcasts.chat/auth/sign_up" />
|
||||
<podcast:socialSignUp priority="2" homeUrl="https://mamot.fr/public" signUpUrl="https://mamot.fr/auth/sign_up" />
|
||||
<podcast:socialSignUp priority="3" homeUrl="https://podcastindex.social/public" signUpUrl="https://podcastindex.social/auth/sign_up" />
|
||||
</podcast:social>
|
||||
<podcast:social priority="666" platform="facebook" podcastAccountId="LesPoesiesDHeloise" podcastAccountUrl="https://www.facebook.com/LesPoesiesDHeloise">
|
||||
<podcast:socialSignUp homeUrl="https://www.facebook.com/" signUpUrl="https://www.facebook.com/r.php?display=page" />
|
||||
</podcast:social>
|
||||
|
||||
<item>
|
||||
<title>Oisillon bleu</title>
|
||||
<enclosure url="https://lespoesiesdheloise.fr/audio/AQAAAFoAAAC4gSwAnlI2AEwAAABk.q1c/podcasts/heloise/oisillon-bleu.mp3" length="3560094" type="audio/mpeg"/>
|
||||
<guid>https://lespoesiesdheloise.fr/episode_2019-04-10_lpdh_oisillonbleu</guid>
|
||||
<pubDate>Wed, 10 Apr 2019 14:15:00 +0000</pubDate>
|
||||
<link>https://lespoesiesdheloise.fr/@heloise/episodes/oisillon-bleu</link>
|
||||
[…]
|
||||
|
||||
<podcast:socialInteract priority="1" platform="activitypub" podcastAccountId="@heloise@lespoesiesdheloise.fr" pubDate="2021-04-14T10:25:42Z">https://lespoesiesdheloise.fr/@heloise/notes/4ba8df51-d67d-405d-a475-6471e1235c1c</podcast:socialInteract>
|
||||
<podcast:socialInteract priority="666" platform="facebook" podcastAccountId="LesPoesiesDHeloise" pubDate="2021-04-14T10:25:42Z">https://www.facebook.com/LesPoesiesDHeloise/posts/399766303947452</podcast:socialInteract>
|
||||
|
||||
</item>
|
||||
[…]
|
||||
|
||||
</channel>
|
||||
</rss>
|
||||
```
|
||||
|
||||
Discussion here:
|
||||
- https://github.com/Podcastindex-org/podcast-namespace/issues/153
|
||||
- https://podcastindex.social/web/statuses/106065482252134072
|
|
@ -187,6 +187,16 @@ The `fee` attribute tells apps whether this split should be treated as a "fee",
|
|||
as a fee, meaning its percentage (as calculated from the shares) should be taken off the top of the entire transaction amount. This is the preferred way for service
|
||||
providers such as apps, hosting companies, API's and third-party value add providers to add their fee to a value block.
|
||||
|
||||
#### Custom Key/Value Pairs
|
||||
|
||||
The `customKey` and `customValue` pair can be used (especially for the Lighning Network) to help a receiving application route or process payments that have all arrived at one node.
|
||||
|
||||
The idea is that Podcast Index will parse and store and all client apps will always send a `customKey:customValue` pair if these are found in the Value Block.
|
||||
|
||||
For example, the `customKey`'s of `818818`, `112111100` are used to route payments to Hive accounts or specific wallets on LNPay respectively. These fields are documented [in the list maintained by Satoshis Stream](https://github.com/satoshisstream/satoshis.stream/blob/main/TLV_registry.md).
|
||||
|
||||
If your specific application would benefit from your own `customKey:customValue` pair which will be passed along from the player to your app, and for which nothing already exists, add your own.
|
||||
|
||||
<br><br>
|
||||
|
||||
<div class="page"/>
|
||||
|
@ -290,16 +300,22 @@ For the `<podcast:valueRecipient>` tag, the following attributes MUST be used:
|
|||
- `address`: \<the destination node's pubkey\>
|
||||
- `split`: \<the number of shares\>
|
||||
|
||||
If the receiving Lightning node, or service, requires a custom record or meta-data of some sort to be passed along with the payment
|
||||
the `customKey` and `customValue` can be utilized as follows:
|
||||
If the receiving Lightning node, or service, requires application specific data to be sent with the payment in the lightning message `extension` (a _TLV stream_, see the Appendix section), the `customKey` and `customValue` can be utilized as follows:
|
||||
|
||||
- `type`: "node"
|
||||
- `method`: "keysend" or "amp"
|
||||
- `customKey`: \<key name\>
|
||||
- `customValue`: \<value\>
|
||||
- `customKey`: \<tlv record type, a 64 bit integer greater than or equal to 2^16\>
|
||||
- `customValue`: \<tlv record value, a string\>
|
||||
- `address`: \<the destination node's pubkey\>
|
||||
- `split`: \<the number of shares\>
|
||||
|
||||
When sending a payment containing application specific data, the client must use UTF-8 as encoding for `customValue`.
|
||||
|
||||
**Remarks:**
|
||||
|
||||
- `customValue` is specified as a string due to the emergence of known users for this field (see Appendix). If we decide to support raw binary data in the future, a new attribute can be introduced to indicate the different behavior
|
||||
- There is at least one known shared node ([satoshis.stream](https://satoshis.stream/)) that requires, in addition to this specification, the inclusion of the TLV record with type `7629169`, as defined [here](https://github.com/satoshisstream/satoshis.stream/blob/main/TLV_registry.md#field-7629169), in order to correctly route the payment to the corresponding receiver
|
||||
|
||||
<br>
|
||||
|
||||
##### Example
|
||||
|
@ -424,6 +440,17 @@ and guest.
|
|||
</channel>
|
||||
```
|
||||
|
||||
<br>
|
||||
|
||||
##### Appendix
|
||||
|
||||
Lightning payments are performed using lightning messages as specified in [BOLT #1: Base Protocol](https://github.com/lightningnetwork/lightning-rfc/blob/master/01-messaging.md).
|
||||
|
||||
One part of the message is the `extension`, a TLV (Type-Length-Value) stream. Application specific data can be added to transactions using _custom records_ on the TLV Stream.
|
||||
|
||||
A community maintained registry of known custom record types and formats, governed by satoshis.stream, can be found at the document [TLV record registry](https://github.com/satoshisstream/satoshis.stream/blob/main/TLV_registry.md). In special, the section _Fields used in customKey / customValue Pairs_ documents the known use cases for the `customKey` and `customValue` attributes.
|
||||
|
||||
|
||||
#### Nano
|
||||
|
||||
Specification for Value 4 Value integration with the [Nano](https://nano.org) cryptocurrency.
|
||||
|
@ -438,7 +465,7 @@ For the `<podcast:valueRecipient>` tag, the following attributes MUST be used:
|
|||
- `address`: \<*destination nano_xxx address*\>
|
||||
- `split`: \<*the number of shares*\>
|
||||
|
||||
#### Example
|
||||
##### Example
|
||||
***Note:** The following is a made up example, and the accounts shown are for demonstration purposes only.*
|
||||
|
||||
```xml
|
||||
|
|
Ładowanie…
Reference in New Issue