Specification

From OIP Wiki
Jump to: navigation, search

Publishers

Publisher

Publishing is entering content and terms of use into the Open Index with a message and schema format that conforms with OIP's message protocol in effect at the time of publishing, verified by blockchain timestamp. A Publisher is a rights holder of a piece of content who controls the publisher address used to publish the content in the Open Index. Examples: Musicians, Filmmakers, Video Content Creators, etc.

Publisher Address

A unique ECDSA public key hash registered in the Open Index with a message and schema format that conforms with OIP's message protocol at the time of registering, verified by blockchain timestamp. Registering a Publisher Address is required to publish.

Publisher Alias

A publisher alias is a non unique name in the Open Index global namespace. Any number of Publishers can register the same Publisher Alias, but each Publisher can only have one Publisher Alias per Address. Registering a Publisher Alias is not required to publish. If one is not registered, a protocol wide alias recognized for all Publishers is the truncated first 10 characters of their Publisher Address.

Publisher Name

A publisher name is a unique name in the Open Index global namespace. Registering a Publisher Name is not required to publish. A publisher name may be transferred to another party by sending a name transfer message. Publisher name registration is valid when all of the following conditions are met:

  1. Name registration message includes correct registration fee, as its tx-fee
  2. Earliest registration message of name, according to blockchain timestamp
  3. Registration has not yet expired, according to blockchain timestamp

Verified Publisher Name

A verified publisher name is an optional distinction, valid when all of the following conditions are met:

  1. Matches the real name of a rights holder with rights to the content, verified by public databases (ie, IMDB, MusicBrainz).
  2. A publisher name verification message is shared in at least one social media platform from an account controlled by the rights holder (Twitter, Facebook, LinkedIn, Steemit, Diaspora, Synereo).

Publisher Registration Fee

The Publisher Registration Fee is a token payment for the cost of inputting data into the blockchain, paid as a tx-fee. The fee to register a publisher address is only the cost of adding the data to the blockchain. The fee to register a publisher name is determined by the OIPWG, initially it is $1 per year of registration.

Artifacts

An artifact is a single piece or collection of content; it includes the file location on the internet, publisher terms of use and other metadata used for discovery. Examples: music album, video file and its thumbnail, 3D printable and renders of it, PDF, etc.

An artifact is valid if all the following conditions are met:

  1. The message and schema format conforms with OIP's message protocol at the time of publishing, verified by blockchain timestamp
  2. At least one file is included in the message, defined by a network name and address hash
  3. A correct publish fee is paid as a tx-fee

Any files included in the message are assumed to be published by a party with the right to do so, so their ownership is attributed to this publisher. If another publisher attempts to publish the same files at a later date (identifiable by the file address hash), the earlier Artifact is assumed to be by the rights holder, and the later Artifact will not be accepted.

Publishing Fee

A publishing fee is payment for the cost of inputting data into the blockchain. It is paid as a tx-fee and used to validate that an artifact is OIP compliant. The publish fee for free content is the flat tx-fee of the amount of data to be input into the blockchain. The publish fee for commercial content is based on a calculation that includes the commercial value of the content, and the current average cost of all commercial artifacts published in the Open Index. Publish fees drive the security incentive; they increase the potential coins captured by miners in addition to the standard block reward. This sink (fee) is key to the system design because the index blockchain tokens must be use to publish content to the index. Also functions as anti-spam incentive (viggish footnote).

To determine that the correct amount is paid for the publish fee, the history of the tx-fee tokens are evaluated to determine if the tokens are mined, or from circulation. Tokens cycle through the system; publish fees are sent as a tx fee, adding to the standard block reward.

To verify they have not circulated on the market, tokens are considered mined when all of the following conditions are met:

  1. Exactly two or three transactions between a) the transaction in which the tokens were newly created or previously spent as a tx fee and mined again b) the tokens being used as the publish fee. If any more than two or three transactions, they must be change sent to self.
  2. The most recent transaction must be from a registered autominer to the publisher.
  3. The earliest transaction must be a block reward transaction.
  4. Specific market data must be in the coinbase as a valid historian message (rental rig cost, flo market prices)
  5. If there are three transactions, the second transaction must be from an OIP-compliant pool to the registered autominer and include in its transaction message which blocks the block-reward payout was for (since pools delay payouts by varying numbers of blocks).

When tokens are mined, the USD-per-FLO offer price value is determined by the cost to mine at the blockchain timestamp and the historian message in the coinbase when it was mined.

Tokens are considered from circulation if any of the conditions required to be mined are not met. When tokens are from circulation, USD-per-FLO value is calculated based on the average exchange price at the time of the blockchain timestamp when the publish attempt is made using historian data from the index blockchain.

Fee is calculated differently for free and commercial artifacts.


Free Artifacts

Publish Fee vs Artifact Size

If an artifact contains only free content, the publish fee is calculated based on the size of the index data and the cost per byte to store the message in the index blockchain.

Looked up variables:

[math]\mathcal{S} = [/math] Size of artifact, in bytes. Note: meta data ONLY, not file data itself.

[math]\mathcal{Y} = [/math] Minimum transaction fee per byte, in Flotoshis (1/100,000,000 of a Florincoin). This will ultimately be a completely market determined rate; pools will announce their own minimum rate to confirm transactions, and an API endpoint will collect and index them. Currently, use a hard-coded value of 100

Calculated variables:

[math]\mathcal{P}_f = [/math] Fee to publish a free artifact, in Florincoins.

Formulae:

[math]\mathcal{P}_f = \left(\frac{ \mathcal{S} \cdot \mathcal{Y}}{100,000,000}\right) [/math]


Commercial Artifacts

Publish Fee vs Artifact Cost, Closeup
Publish Fee vs Artifact Cost, Wide

If an artifact includes any commercial content, the publish fee is a function of (1) the commercial value of the content, called the artifact cost and (2) the current average cost of all commercial artifacts published in the Open Index, called the average artifact cost.

Looked Up Variables:

[math]\mathcal{n} = [/math] Number of files in the artifact.

[math]\mathcal{P}_i = [/math] Minimum play price for each file [math]\mathcal{i}[/math] in the artifact. Can be looked up at Alexandria's hosted endpoint, returned as the json field labeled oip-041:artifact:storage:files:minPlay

[math]\mathcal{B}_i = [/math] Suggested buy price for each file [math]\mathcal{i}[/math] in the artifact. Can be looked up at Alexandria's hosted endpoint, returned as the json field labeled oip-041:artifact:storage:files:sugBuy

[math]\mathcal{C}_\lambda = [/math] The average "cost" of all commercial artifacts in the open index. Can be looked up at Alexandria's hosted endpoint, returned as the json field labeled avgArtCost

Calculated Variables:

[math]\mathcal{P} = [/math] Total of minimum play prices for all files in the artifact.

[math]\mathcal{B} = [/math] Total of suggested buy prices for all files in the artifact.

[math]\mathcal{C} = [/math] The "cost" of this artifact, a single value representing the average between the sum of all minimum play prices and the sum of all suggested play prices.

[math]\mathcal{P}_u = [/math] Fee to publish a commercial artifact, in US Dollars.

Formulae:

[math]\mathcal{P} = \sum_{i=1}^n \mathcal{P}_i [/math]

[math]\mathcal{B} = \sum_{i=1}^n \mathcal{B}_i [/math]

[math]\mathcal{C} = \frac{\mathcal{P} + \mathcal{B}}{2} [/math]

[math]\mathcal{P}_u = \begin{cases}\mathcal{C} & \mathcal{C} ≤C_{\lambda}\\ (log\mathcal{C} - logC_{\lambda})(\frac{C_{\lambda}}{\mathcal{C}} )(\mathcal{C} - C_{\lambda}) + C_{\lambda} & \mathcal{C} \gt C_{\lambda}\end{cases}[/math]


Possible Network Topologies

Oip methods diagrams publishing large.png

Oip methods diagrams searchAndBrowse.png

Platforms

A platform is an interface (hosted or decentralized) for end users to find or discover content and make purchases. Platforms are paid a percent (defined by Publishers) of the payment activity they facilitate.

Examples: websites, smart phone apps, smart TV apps and physical kiosks.

An interface is considered a platform when either or both of the following services are provided:

  1. Hosting a marketplace
  2. Providing payment processing services

Platforms are required to: 1) follow applicable laws, 2) store/distribute a portion of files in the system 3) enforce Publisher terms of use. Platforms must submit reports to verify compliance with these requirements; OIPWG will maintain open source reference software to standardize and automate this reporting.

A platform is valid if all of the following conditions are met:

  1. Send a platform registration message with a publicly visible payment address to the Open Index, default payment address is currently BTC.
  2. Validate verified Publisher accounts at least once per twenty four hour period by checking that each verified publisher’s social media verification messages are still online.
  3. Contribute to available storage and bandwidth by running a protocol supported version of pinbotwizard Platform File Storage Manager, software that manages storage of the files published to the Open Index.
    1. Pinbotwizard maintains a minimum threshold of pins to ensure content persistence, current minimum is 5. Pinbotwizard tracks the pin count of each file and only pins files which are under the minimum threshold of pins.
    2. Pinbotwizard nodes pin only unpopular files; pinning of popular files is incentivized by "Pin to play" Pin to Play.
    3. Pinbotwizard development roadmap: When OIPWG quarterly platform reporting is implemented (see point 4 below), further logic will be added to dynamically adjust each platform file pinning requirement proportional to the platform’s revenue.
  4. Provide reporting for DMCA takedown requests, comply with fair use precedent and review/address takedown requests for any content published to the Open Index.
    1. Platforms must subscribe to the blacklist filters maintained by OIPWG. Blacklist offenses include: distributing content without consent from the rights holder (includes pirated commercial content), distributing content that has been "de-activated" by the Publisher, and universally abhorrent content (read more).
    2. Platforms can receive DMCA takedown requests for 1) not respecting the publisher terms of use for content published to OIP or 2) hosting pirated content that has been published to OIP.
    3. Platforms who do not make a good faith attempt to address DMCA takedown requests within a reasonable time period as determined by OIPWG will be added to a blacklist and OIP revenue will be terminated.
    4. Platforms may appeal a takedown request to the OIPWG.
    5. DMCA takedown request process disincentives sybil attack efficacy. Content in question remains accessible in the Open Index and is not blacklisted until it has been reviewed.
    6. OIPWG is not involved in DMCA takedown requests for content that is not published to OIP, including platforms that display a combination of OIP content and other content.
  5. Report standardized commercial activity analytics once per quarter to the Open Index Protocol Working Group.
    1. OIPWG will provide open source software to run the reports which will include only the information necessary to ensure publisher terms of use are respected by all parties taking money from end users.
    2. Current planned content of the report includes: Timestamped record of each commercial transaction facilitated by the platform including the transaction ID(s), artifact ID, type of commercial activity (play, buy), total discounts applied by platform, pin count, and all demographic information the end user opts to share publicly.

Influencers

A influencer shares links to content published in the Open Index and is paid a percent (determined by Publishers) of the payment activity driven by these links. Influencers are financially incentivized to share both commercial and non-commercial (tip-only) content. Similar to the Amazon Affiliates program.

Examples: social media influencers, bloggers, traditional advertisers

An influencer is valid when all of the following conditions are met:

  1. Send a influencer registration message with a publicly visible payment address to the Open Index, default payment address is currently planned to be BTC.
  2. Must use valid OIP links, if an influencer account is posting malformed, spoofing or malicious links the influencer account is added to the OIPWG blacklist.

Influencer account types:

  • Verified Account: Connected to one or more social media accounts. A verified influencer account is verified by posting the hash of the influencer’s registration message on a publicly visible social media feed. A verified publisher account can share a regular OIP link and receive their percentage of any payment activity driven by this link.
  • Non-Verified Account: Not connected to a social media account. A non-verified influencer must generate a unique link for every piece of content shared in order to receive payment.

Autominers

Florincoin Blockchain Proof-of-Work Miners maintain the security of the Open Index and create the supply of tokens that are sold to publishers to be used for the publishing fees. Since getting Florincoin tokens from an exchange only indirectly incentivizes its mining, OIP defines a method, called Autominer, for miners to automatically set a sustainable Offer Price for their mined tokens which creates an incentive to mine, hold, and trade to the users who directly need it. As a result of this, Publisher demand directly drives the security of the Open Index. The services that ensure persistent file storage/bandwidth and secure publishing of new content to the Open Index are governed by the OIP specification, allowing permissionless participation in offering these services and making their work product function as fungible commodities; in other words, the protocol sees any 1MB of file storage as equivalent to any other 1MB, and any 1GH/s of POW as equivalent to any other 1GH/s of POW.

  • Users who wish to participate in the Autominer system can either do so with their own sCrypt mining hardware, or more commonly, can do so by renting hardware from others on a periodic basis. The Autominer Application can be used to handle automatic renting of mining hardware based on market conditions and user preferences.
  • Whether they wish to use their own hardware or rent from others, to participate in the system the user must register in the Open Index, and they must use a properly registered Autominer Pool.
  • Whenever their Autominer Pool wins a block, it will look up various external points of data, called Historian Data Points, and stores them into the transaction comment of that particular block reward (coinbase).
  • Based upon two important market factors, 1) the pools share of the overall mining activity and 2) the current cost to mine a token vs the current market exchange value, a reasonable margin is determined by a function called the Cross Chain Price Manager calculates the Offer Price for that particular block.
  • Offers stay open until a Publisher closes them by executing a trade at the pre-determined Offer Price on a first-come, first-served basis.
  • As a result, some offers will be open for a few hours, some could be open for a few weeks, but trades will always be made at a price that at least covers the miners costs, and in most conditions, allows a sustainable margin to encourage them to continue mining.
  • OIPWG will maintain an open source reference client application for facilitating these trades, currently called TradeBot.

Historian Data

Autominer Pools encode Historian Datapoints into the transaction comment of the reward (coinbase) whenever they win a block. Historian data is used to determine the price of a block using the factors of (1) the actual cost to mine, (2) the market spot price, (3) the winning pool’s target margin and (4) the winning pool’s influence over the florincoin network.

Autominer Application

Autominer manages miner participation in index security and file storage/distribution based on the miner’s unique preferences. It allows miners to "set it and forget it," and ensures they earn the minimum margin set in their preferences.

Autominer Pool

An autominer pool is any mining pool that properly encodes historian blockchain data into winning blocks.

An autominer pool is valid when all of the following conditions are met:

  1. Send a pool registration message to the Open Index with the URL of the service and the pool target margin.
  2. To update or change the pool URL or target margin, an update message is sent to the Open Index to modify the initial registration data.

Collaborative Defense

Collaborative Defense is an optional process in autominer; it is an automated process that facilitates security of the network without reducing the users profits. *the set of market conditions & collaborative defense process needs to be defined

Tradebot Application

Tradebot is an application layer function, built into the UI anywhere that a user will be in need of protocol tokens (Florincoin & Filecoin). Most commonly used in the publishing process when a publisher needs to trade $USD -> BTC -> Florincoin to pay their publish fee. In order to prevent bad actors from abusing the process to sell their market-purchased tokens at a price higher than the market is pricing them, its limited only to the trade of tokens mined by protocol compliant autominer pools, with correctly encoded historian messages the coinbase of the tokens.

Cross Chain Price Manager

The protocol calculates an offer price for tokens that qualify as mined using the information captured by historian and the target margin set by their autominer pool, using the following formulae in order to account for both, the current mining conditions and the current market conditions:

Looked Up Variables:

[math]\mathcal{N} = [/math] floNetHashrate, Florincoin network hashrate. In hashes per second. (fbdNetworkhashps) Can be looked up at Alexandria's hosted endpoint, the json value's key is networkhashps

  • [math]\mathcal{N} \gt 0 [/math]

[math]\mathcal{A} = [/math] autominerPoolHashrate, The given Autominer-Pool's hash rate. In hashes per second. Alexandria's instance can be looked up at this hosted endpoint, the json value's key is pools:florincoin:hashrate

[math]\mathcal{M} = [/math] miningRigRentalsLast24hr, MiningRigRentals.com's 24 hour average cost per hash per second, per second of rental, in BTC. Looked up at the miningrigrentals API endpoint for sCrypt rentals, delivered as the 24 hour average cost to rent 24 hours of 1 megahash per second - this is divided by 86,400 (the number of seconds in 24 hours), and divided by 1,000,000 (to convert from megahashes to hashes) to become hashes per second per second.

[math]\mathcal{T} = [/math] Time since Autominer pool won its last block, in seconds.

[math]\mathcal{R} = [/math] Florincoin tokens won in block.

  • [math]\mathcal{R} \gt 0 [/math]

[math]\mathcal{X} = [/math] floMarketPriceBTC, Exchange value per Florincoin token, in BTC. Can be looked up at Alexandria's hosted endpoint, returned as the json field labeled weighted

  • [math]\mathcal{X} \gt 0 [/math]

[math]\mathcal{U} = [/math] floMarketPriceUSD, Exchange value per Florincoin token, in US Dollars. Can be looked up at Alexandria's hosted endpoint, returned as the json field labeled USD

  • [math]\mathcal{U} \gt 0 [/math]

[math]\mathcal{W}_\mathcal{1} = [/math] poolWeightThreshold1, Protocol Governed Control Variable. Initial value is 0.3

[math]\mathcal{W}_\mathcal{2} = [/math] poolWeightThreshold2, Protocol Governed Control Variable. Initial value is 0.45

  • [math]\mathcal{W}_\mathcal{1} ≠ \mathcal{W}_\mathcal{2} [/math]
  • [math]\mathcal{W}_\mathcal{1} \lt \mathcal{W}_\mathcal{2} [/math]

[math]\mathcal{g} = [/math] Autominer-Pool's registered target margin. (Automner pool Target Margin) Can be looked up at Alexandria's hosted endpoint, returned as the json field labeled autominer-pool-data:alexandria-autominer-pool:TargetMargin Alexandria's autominer pool will initially use a value of 20

[math]\mathcal{M}_\mathcal{1} = [/math] marketRatioThreshold1 Protocol Governed Control Variable. Initial value is 1.25

[math]\mathcal{M}_\mathcal{2} = [/math] marketRatioThreshold2 Protocol Governed Control Variable. Initial value is 2

  • [math]\mathcal{M}_\mathcal{1} ≠ \mathcal{M}_\mathcal{2}[/math]
  • [math]\mathcal{M}_\mathcal{1} \lt \mathcal{M}_\mathcal{2}[/math]

[math]\exists = [/math] Protocol Governed Control Variable. (Exaggerator) Initial value is 2

Calculated Variables:

[math]\mathcal{f} = [/math] Estimated cost of renting hashes to mine a Florincoin token. In BTC (costToMinePerToken)

[math]\psi _\mathcal{W} = [/math] AutoPool's Weight on the Florincoin network.

[math]\Omega _\mathcal{W} = [/math] pool Weight multiplier.

[math]\psi _\mathcal{M} = [/math] Ratio between the resulting price with the full target margin and the current market price.

[math]\Omega _\mathcal{M} = [/math] Market conditions multiplier

[math] O = [/math] Offer Price. (in USD)

Formulae

[math]\mathcal{f} = \frac{ \mathcal{M} \times \mathcal{A} \times \mathcal{T} }{ \mathcal{R} } [/math]

[math]\psi _\mathcal{W} = \frac{ \mathcal{A}}{ \mathcal{N}} [/math]

[math]\Omega _\mathcal{W} = \begin{cases} 1, & \text{if }\psi _\mathcal{W} \lt \mathcal{W}_\mathcal{1} \\ \begin{cases} 0, & \text{if }\psi _\mathcal{W} \gt \mathcal{W}_\mathcal{2} \\ 1-( \frac{\psi _\mathcal{W} - \mathcal{W}_\mathcal{1}}{\mathcal{W}_\mathcal{2} - \mathcal{W}_\mathcal{1}} ) ^\exists, & \text{if }\mathcal{W}_\mathcal{1} ≤ \psi _\mathcal{W} ≤ \mathcal{W}_\mathcal{2} \end{cases} \end{cases} [/math]

[math]\mathcal\psi _\mathcal{M} = ( \mathcal{f} \times (1 + ( \mathcal{g} \div 100))) \div \mathcal{X} [/math]

[math]\Omega _\mathcal{M} = \begin{cases} 1, & \text{if }\mathcal\psi _\mathcal{M} \lt \mathcal{M}_\mathcal{1} \\ \begin{cases} 0, & \text{if }\mathcal\psi _\mathcal{M} \gt \mathcal{M}_\mathcal{2} \\ 1- (\frac{ \psi_\mathcal{M} - \mathcal{M}_\mathcal{1}} {\mathcal{M}_\mathcal{2} - \mathcal{M}_\mathcal{1}})^\exists, & \text{if }\mathcal{M}_\mathcal{1} ≤ \mathcal\psi _\mathcal{M} ≤ \mathcal{M}_\mathcal{2} \end{cases} \end{cases} [/math]

[math]O = \mathcal{f} \times ( 1 + ( \frac {\mathcal{g}}{100} \times \Omega _\mathcal{W} \times \Omega _\mathcal{M} ) ) \div \mathcal{U} \times \mathcal{X} [/math]

File Storage & Distribution

download speeds vs number of peers
  1. File persistence is ensured because Platforms are required to store and seed a portion of the total size of all files in the Open Index. The amount of storage required of a Platform is commensurate with the percent of OIP market share captured by the Platform. Division of files for storage is random and not based on the content of the files. Example: Platform revenues are 30% of economic activity in OIP = Platform must store/seed 30% of total OIP files, by disk space.
  2. Playback performance is dependent on bandwidth. Similar to other p2p networks, bandwidth and file popularity are positively correlated; there is no upper limit on user file storage/distribution. Users are incentivized to store/distribute files via:
    1. pin to play: free or discounted file access in exchange for seeding files
    2. Paid hosting: Filecoin* (once released) will allow users to pay the network to store more copies of a file, increasing its bandwidth.
    3. Fandom: some fans will volunteer storage/distribution to support the artists they enjoy.

*Note: ipfs-cluster & filecoin are specifically related to IPFS. A publisher can use a different network for file storage/distribution because OIP uses interoperable transport layers, such as the Bittorrent Mainline DHT. Sia and Streamium also offer similar functionality. The OIPWG roadmap includes reference client software to implement the “pin to play” and “platform file storage manager” functions for additional networks like these.

 See also