# URI ## Regex If you are a robot and prefer regexes to English, here's the full regex for `lbry://` URIs: ``` (?P ^ (?Plbry\:\/\/)? (?P (?P[a-zA-Z0-9\-]+) | (?P\@[a-zA-Z0-9\-]{4,}) ) (?P (?:\#(?P[0-9a-f]{1,40})) | (?:\$(?P\-?[1-9][0-9]*)) | (?:\:(?P\-?[1-9][0-9]*)) )? (?:\/(?P[a-zA-Z0-9\-]+))? $ ) ``` ## Protocol The LBRY protocol is called `lbry`. URIs using the protocol must start with `lbry://`. ## Reserved characters - CHANNEL_CHAR = `@` - CLAIM_ID_CHAR = `#` - CLAIM_SEQUENCE_CHAR = `:` - BID_POSITION_CHAR = `$` - PATH_CHAR = `/` - QUERY_CHAR = `?` ## Names Names may contain English letters (upper and lower case), numbers, and hyphens. ### Content Name `content_name` is the name of piece of content. ### Channel Name `channel_name` is the name of a channel (aka publisher identity). It must start with CHANNEL_CHAR, followed by at least 4 name characters. ## Modifiers Only one modifier is allowed at a time. ### Claim ID `claim_id` is a hex string identifying a claim. A claim id is prefixed with the CLAIM_ID_CHAR. Partial claim ids are allowed (same is git hashes), and will resolve to the oldest claim who's id starts with the given characters. ### Claim Sequence `claim_sequence` is a positive integer (>= 1) that resolves to the Nth claim for a given name. A claim sequence is prefixed with the CLAIM_SEQUENCE_CHAR. All valid claims are considered, in the order that they appear in the blockchain. Nonwinning claims are included. For example, `lbry://@chan:1` resolves to the oldest valid claim for `@chan`, even if that claim is no longer the winning claim for `@chan`. Negative claim sequence numbers will be supported eventually. ### Bid Position _not implemented yet_ `bid_position` is a positive integer (>= 1) that resolves to the Nth highest-bid claim for a given name. A bid position is prefixed with the BID_POSITION_CHAR. All valid claims are considered, in order from highest bid to lowest bid, with ties being broken by claim age. Nonwinning claims are included. For example, `lbry://@chan$1` always resolves to the current winning claim for `@chan`. `@chan` and `@chan$1` are equivalent. Negative bid position numbers will be supported eventually. ## Path `path` is a Unix-style path that resolves to a claim within a channel. A path is prefixed with PATH_CHAR. Only paths one level deep are currently supported. Only channel claims may have a path. For example, `lbry://@chan/snaps_from_last_night` resolves to the claim for `snaps_from_last_night` that is signed by `@chan` ## Query Params _not implemented yet_