Publishing is a process when the new content is stored in the network and information about it is spread among the community. The detailed process is as follows:
The author creates content in the form of computer files. These files are structured into a package (for package format, refer to
, option 2). Metadata, such as description and price, shall be created as well.
The author then selects two integers
nrepresent total number of seeders that will seed the content, and
mrepresents number of seeders that needs to cooperate to deliver the content to the user.
Author’s application selects distribution protocol - currently ipfs is the only supported protocol, but more are in roadmap - and uploads the distribution package.
Author selects n suitable seeder. List of seeders can be obtained with
Author’s application generates unique AES key and encrypts part of the content that is not free.
Author’s application splits the encryption key into
nshares, such that
mshares are required to retrieve the key.
Author’s application encrypts the
nshares created in step 6 with el-gamal public keys of the
nseeders, assigning one share to one seeder. The steps 5-7 can be done using api call
Author’s application generates the
content_submitoperation. The operation will contain all content metadata, such as title, synopsis or tags, and network relevant data such as validity, price, list of publishers, and list of shares encrypted for each selected publisher.
The seeding fee is deducted from author’s account. This fee is put into escrow and is used to pay seeders for providing storage. It also acts as anti-spam prevention. Publishing large amount of content will soon become expensive.
The seeders's software will monitor blockchain, and once content submit operation, relevant to them, is issued, it will download the content and issue proof-of-retrievability operation to confirm the content has been successfully published. This is done automatically inside the seeding plugin would it be configured.
mconfirmations are included into the blockchain, the content is deemed published.
Buying is the process when the consumer decides to buy published content. It has form of a contract, starting with promise-to-pay, and ended with payment from the consumer to the author when the publisher was provably delivered the content. The detailed procedure is as follows:
The consumer selects content she wishes to buy and her application downloads the distribution package using the chosen protocol, i.e. ipfs.
The consumer’s application generates
request_to_buyoperation. This operation will effectively block the required amount of tokens from her account into an escrow. Buying can be checked e.g. with
The seeders’ nodes see the request-to-buy in the blockchain. They will decrypt the respective share (from the content_submit operation) with their el-gamal private key, and encrypt it again with consumer’s el-gamal public key. Proof of delivery is also created in this step.
The seeders’ nodes will generate deliver_keys operation, containing the share encrypted with consumer’s key and proof-of-delivery.
When there are enough shares delivered through blockchain:
a. the network will pay to the author from the escrow; and
b. the consumer will decrypt the shares with her private key, reconstruct the decryption key and decrypt the content, e.g. with
Finally, the consumer can rate the content, by submitting the
leave_rating_and_commentoperation into the blockchain. These operations can be collected by different rating and classification engines and used to generate various recommendation for the consumers.
When the miner generates the block using DPoS, she will:
Verify all transactions, including proof-of-retrievability and proof-of-delivery.
Distribute payments to the author (see buying process).
From the publishing fee escrow distribute payments to the publishers based on the stored content(the proof-of-retrievability).
Keep part of the distributed tokens to herself.