Message protocol

From OIP Wiki
Jump to: navigation, search

Contents

Mining Pool Messages

Autominer Pool Historian Datapoint

A string, stored in the block reward (coinbase) transaction comment. The pieces of data included are used to estimate the cost to mine this particular block, by multiplying the current average cost to rent a sCrypt miner on MiningRigRentals.com (more sources with time) by the pool's hashrate and dividing by the block reward. The full formula can be found in the specification.

Please note: there should not be spaces of any sort between each colon and piece of data when sent to the blockchain, carriage returns are used here for page formatting purposes only.

The above schema will be implemented soon into the OIP Daemon and Alexandria's hosted endpoints. Expand this section to see the schema currently in use for Historian Datapoints

Autominer Block Reward

A string, stored in the transaction comment attached to the block reward payout sendmany transactions sent by autominer pools. It is used to help establish the chain of custody of mined tokens, by delineating from which blocks a particular token payout comes from.

In instances in which only one miner is receiving their payout, from a single won block, the message format will look like this:

{
oip042:
pub:
abr1:
floAddress:
block:
amount:
signature
}

In instances in which a single miner is receiving their payout, from a series of won blocks, the message will look like this:

{
oip042:
pub:
abr1:
floAddress:
block:
amount:
block:
amount:
block:
amount:
signature
}

And in instances in which a variety of miners are receiving payouts from a series of won blocks, the message will look like this:

{
oip042:
pub:
abr1:
floAddress:
block:
amount:
block:
amount1,amount2:
block:
amount1,amount2,amount3:
block:
amount:
signature
}

Please note: there should not be spaces of any sort between each colon and piece of data when sent to the blockchain, carriage returns are used here for page formatting purposes only.

MultiPart Message Format

Multipart messages take the initial Message data and split it up into chunks that will fit inside of the Flo blockchain.

For example, if someones Artifact publish message was 800 bytes instead of being <528 bytes, then it would need to be "broken up" in order for the information to be stored inside of the Flo Blockchain. In this example, there would be ~2-3 transactions pushed to the Flo blockchain, each with a portion of the overall message data. Read more in the main article.

Index Manipulation Messages

Register/Publish Edit Transfer Control Deactivate
Publishers Publisher Register Publisher Edit
Artifacts Artifact Publish Artifact Edit Artifact Transfer Artifact Deactivate
Platforms Platform Register Platform Edit
Influencers Influencer Register Influencer Edit
Autominers Autominer Register Autominer Edit
Autominer-Pools Autominer-Pool Register Autominer-Pool Edit

Publisher Register

{
	"oip042": {
		"register": {
			"pub": {
				"alias": "string",
				"floAddress": "string",
				"timestamp": integer,
				"authorized": ["string", "string"],
				"info": {
					"emailmd5": "string",
					"avatarNetwork": "string",
					"avatar": "string",
					"headerImageNetwork": "string",
					"headerImage": "string",
					"bitmessage": "string"
				},
				"verification": {
					"imdb": "string",
					"musicbrainz": "string",
					"twitter": "string",
					"facebook": "string",
					"statusCode": integer,
					"status": "string"
				}
			},
			"signature": "string"
		}
	}
}

Anyone can use Alexandria's hosted API to get a list of all registered Publishers, or search for one in particular. Since it uses an RPC connection to a FLO wallet and would have total control over the keys in that wallet, using the API to Register a New Publisher can only be done against localhost - in other words it can only be used by decentralized users running a full node of the Flo blockchain and the OIP Daemon application. Web developers can use the node.js application oip-js to sign and send a Register Publisher message for individual users with separate web hosted wallets.

The above schema will be implemented soon into the OIP Daemon and Alexandria's hosted endpoints. Expand this section to see the schema currently in use for publisher register:

{
	"publisher-data": {
		"alexandria-publisher": {
			"name": "string",
			"address": "string",
			"timestamp": integer,
			"emailmd5": "string",
			"bitmessage": "string",
			},
		"signature": "string"
		}
}

Publisher Edit

{
	"oip042": {
		"edit": {
			"pub": {
				"floAddress": "string",
				"timestamp": 10 digit integer,
				"patch": {
				// Squashed Edit of JSON Patch Schema https://tools.ietf.org/html/rfc6902
				}
			},
			"signature": "string"
		}
	}
}

Artifact Publish

{
	"oip042": {
		"publish": {
			"artifact": {
				"floAddress": "string",
				"timestamp": 10 digit integer,
				"type": "string",
				"subtype": "string",
				"info":{
					"title": "string",
					"description": "string",
					"tags": "string",
					"year": 4 digit integer,
					"extraInfo":{
						flexible object, can store anything
					}
				},
				"payment":{
					"fiat": "string",
					"scale": integer,
					"sugTip":[
						integer,
						integer,
						integer
					],
					"addresses": {
						"shortMWaddress": "string",
						"btcAddress": "string",
						"ltcAddress": "string"
					},
					"shortMW": ["btc", "ltc", "flo"], // Only included if using a ShortMultiwalletAddress
					"tokens": {
						"STRING": int,
						"STRING": int
					}
				},
				"storage":{
					"network": "string",
					"location": "string,
					"files":[
						{
						"disBuy": boolean,
						"disPlay": boolean,
						"dName": "string",
						"duration": integer,
						"fName": "string",
						"fSize": integer,
						"sugPlay": integer,
						"minPlay": integer,
						"sugBuy": integer,
						"minBuy": integer,
						"disPer": integer,
						"promo": integer,
						"retail": integer,
						"ptpFT": integer,
						"ptpDT": integer,
						"ptpDA": integer,
						"type": "string",
						"tokenlyID": "string"
						}
					]
				},
				"signature": "string"
			}
		}
	}
}

Anyone can use Alexandria's hosted API to get a list of all registered Artifacts, or search for one in particular.Since it uses an RPC connection to a FLO wallet and would have total control over the keys in that wallet, using the API to Publish a New Artifact can only be done against localhost - in other words it can only be used by decentralized users running a full node of the Flo blockchain and the OIP Daemon application. Web developers can use the node.js application oip-js to sign and send an Artifact Publish message for individual users with separate web hosted wallets.

The above schema will be implemented soon into the OIP Daemon and Alexandria's hosted endpoints. Expand this section to see the schema currently in use for Artifact Publish


Research-Tomogram

property artifact

Property-Party

Property-SpatialUnit

Property-Tenure

Artifact Edit

{
	"oip042": {
		"edit": {
			"artifact": {
				"artifactID": "string",
				"timestamp": integer,
				"patch": {
					// Squashed Edit of JSON Patch Schema https://tools.ietf.org/html/rfc6902
				}
			},
			"signature": "string"
		}
	}
}

Since it uses an RPC connection to a FLO wallet and would have total control over the keys in that wallet, using the API to Edit an Artifact can only be done against localhost - in other words it can only be used by decentralized users running a full node of the Flo blockchain and the OIP Daemon application. Web developers can use the node.js application Oip-js to sign and send a Artifact Edit message for individual users with separate web hosted wallets.

The above schema will be implemented soon into the OIP Daemon and Alexandria's hosted endpoints. Expand this section to see the schema currently in use for Artifact Edit:

{
	"oip-041": {
		"editArtifact": {
			"txid": "string",
			"timestamp": integer,
			"patch": {
				// Squashed Edit of JSON Patch Schema https://tools.ietf.org/html/rfc6902
			}
		}
	},
	"signature": "string"
}

Artifact Transfer

{
	"oip042": {
		"transfer": {
			"artifact": {
				"artifactID": "string",
				"toFloAddress": "string",
				"fromFloAddress": "string",
				"timestamp": integer
			},
			"signature": "string"
		}
	}
}

Since it uses an RPC connection to a FLO wallet and would have total control over the keys in that wallet, using the API to Deactivate an Artifact can only be done against localhost - in other words it can only be used by decentralized users running a full node of the Flo blockchain and the OIP Daemon application. Web developers can use the node.js application Oip-js to sign and send a Artifact Transfer message for individual users with separate web hosted wallets.

The above schema will be implemented soon into the OIP Daemon and Alexandria's hosted endpoints. Expand this section to see the schema currently in use for artifact transfer:

{
	"oip-041": {
		"transferArtifact": {
			"txid": "string",
			"to": "string",
			"from": "string",
			"timestamp": integer
		},
		"signature": "string"
	}
}

Artifact Deactivate

{
	"oip042": {
		"deactivate": {
			"artifact": {
				"artifactID": "string",
				"timestamp": int
			},
			"signature": "string"
		}
	}
}

Since it uses an RPC connection to a FLO wallet and would have total control over the keys in that wallet, using the API to Deactivate an Artifact can only be done against localhost - in other words it can only be used by decentralized users running a full node of the Flo blockchain and the OIP Daemon application. Web developers can use the node.js application Oip-js to sign and send a Artifact Deactivate message for individual users with separate web hosted wallets.

The above schema will be implemented soon into the OIP Daemon and Alexandria's hosted endpoints. Expand this section to see the schema currently in use for Artifact Deactivate

{
	"oip-041": {
		"deactivateArtifact": {
			"txid": "string",
			"timestamp": int
		},
		"signature": "string"
	}
}

Platform Register

Plaintext data, stored in a transaction comment.

{
	"oip042": {
		"register": {
			"platform": {
				"alias": "string",
				"timestamp": 10 digit integer,
				"floAddress": "string",
				"addresses": {
					"shortMWaddress": "string",
					"btcAddress": "string",
					"ltcAddress": "string"
				},
				"shortMW": ["btc", "ltc", "flo"], // Only included if using a ShortMultiwalletAddress
				"verification": {
					"facebook":"string",
					"twitter":"string"
				},
				"version": 2,
				},
				"info" {
					"minShare": integer,
					"httpURL": "string"
				}
			"signature": "string"
		}
	}
}

Anyone can use Alexandria's hosted API to get a list of all registered Platforms. Since it uses an RPC connection to a FLO wallet and would have total control over the keys in that wallet, using the API to Register a New Publisher can only be done against localhost - in other words it can only be used by decentralized users running a full node of the Flo blockchain and the OIP Daemon application. Web developers can use the node.js application oip-js to sign and send a Register Publisher message for individual users with separate web hosted wallets.

The above schema will be implemented soon into the OIP Daemon and Alexandria's hosted endpoints. Expand this section to see the schema currently in use for Register Platform

{
	"alexandria-retailer": {
		"FLOaddress": "string",
		"BTCaddress": 10 digit integer,
		"web-url": "string",
		"minimumshare": integer,
		"name": "string",
		"version": 1
	},
	"signature": "string"
}

A list of Registered Platforms can be found at Alexandria's hosted API endpoint

Influencer Register

To view the JSON schema for Register Influencer, click Expand ->

{  
	"oip042": {  
		"register": {
			"influencer": {
				"timestamp": 10 digit integer,
				"floAddress": "string",
				"version": 2,
				"addresses": {
					"shortMWaddress": "string",
					"btcAddress": "string",
					"ltcAddress": "string"
				},
				"shortMW": ["btc", "ltc", "flo"], // Only included if using a ShortMultiwalletAddress
				"alias": "string",
				"verification":{  
					"facebook":"string",
					"twitter":"string"
				}
			},
			"signature":"string"
	}
}

Anyone can use Alexandria's hosted API to get a list of all registered Influencers. Since it uses an RPC connection to a FLO wallet and would have total control over the keys in that wallet, using the API to Register a New Influencer can only be done against localhost - in other words it can only be used by decentralized users running a full node of the Flo blockchain and the OIP Daemon application. Web developers can use the node.js application oip-js to sign and send a Register Influencer message for individual users with separate web hosted wallets.

The above schema will be implemented soon into the OIP Daemon and Alexandria's hosted endpoints. Expand this section to see the schema currently in use for Influencer Register

{  
	"promoter-data":{  
		"alexandria-promoter":{  
			"FLOaddress":"string",
			"BTCaddress":"string",
			"version":1,
			"social-media":{}
			},
		"signature":"string"
	}
}

Autominer Register

{
	"oip042": {
		"register": {
			"autominer": {
				"floAddress": "string",
				"timestamp": ten digit integer,
				"version": 2,
				"addresses": {
					"shortMWaddress": "string",
					"btcAddress": "string",
					"ltcAddress": "string"
				},
				"shortMW": ["btc", "ltc", "flo"], // Only included if using a ShortMultiwalletAddress
				"info" {
					"minShare": integer,
					"httpURL": "string"
				}
			},
			"signature": "string"
		}
	}
}

Anyone can use Alexandria's hosted API to get a list of all registered Autominers, or search for one in particular. Since it uses an RPC connection to a FLO wallet and would have total control over the keys in that wallet, using the API to Register a New Publisher can only be done against localhost - in other words it can only be used by decentralized users running a full node of the Flo blockchain and the OIP Daemon application. Web developers can use the node.js application oip-js to sign and send a Register Publisher message for individual users with separate web hosted wallets.

The above schema will be implemented soon into the OIP Daemon and Alexandria's hosted endpoints. Expand this section to see the schema currently in use for autominer register:

{
	"autominer-data": {
		"register-autominer": {
			"FLOaddress": "string",
			"BTCaddress": "string",
			"endpointURL": "string",
			"version": 2
		}
	},
	"signature": "string"
}

custompage A list of Registered Autominers can be found at Alexandria's hosted API endpoint

Autominer Pool Register

{
	"oip042": {  
		"register": {
			"autominerPool": {
				"timestamp": 10 digit integer,
				"floAddress": "string",
				"alias": "string",
				"info": {
					"poolShare":integer,
					"targetMargin":integer,
					"httpURL":"string"
				},
				"version": 2,
				"addresses": {
					"shortMWaddress": "string",
					"btcAddress": "string",
					"ltcAddress": "string"
				},
				"shortMW": ["btc", "ltc", "flo"], // Only included if using a ShortMultiwalletAddress
				"verification":{  
					"facebook":"string",
					"twitter":"string"
				}
			},
			"signature":"string"
 	 	}
	}
}

Anyone can use Alexandria's hosted API to get a list of all registered Influencers. Since it uses an RPC connection to a FLO wallet and would have total control over the keys in that wallet, using the API to Register a New Influencer can only be done against localhost - in other words it can only be used by decentralized users running a full node of the Flo blockchain and the OIP Daemon application. Web developers can use the node.js application oip-js to sign and send a Register Influencer message for individual users with separate web hosted wallets.

The above schema will be implemented soon into the OIP Daemon and Alexandria's hosted endpoints. Expand this section to see the schema currently in use for AutominerPool Register

{  
	"autominer-pool-data":{  
		"alexandria-autominer-pool":{  
			"FLOaddress":"string",
			"WebURL":"string",
			"TargetMargin":integer,
			"PoolShare": integer,
			"version": 1,
			"PoolName": "string",
		},
		"signature":"string"
	}
}

Key Definitions

Commonly used

These object keys and key-value pairs are used in multiple kinds of OIP messages.

oip###
  • top-level object key

The top key in the message defines the version of the OIP Specification which was used in publishing this message. Currently this is oip-041. The next release, oip042, will change this key slightly by removing the hyphen.

register/publish/edit/transfer/deactivate
  • second-level object key

The next key defines what kind of action this message should cause - for example, a register message is used to register users in the index as publishers, platforms, influencers, autominers or autominer pools. A publish message is used to publish something into the index, an edit message is used to patch something previously added to the index, transfer is used to transfer ownership/signing authority of something in the index to a new owner, and deactivate messages are used to tell the index to remove an artifact that user had previously published.

pub/artifact/platform/influencer/autominer/autominer-pool
  • third-level object key

The next key defines what kind of object this message should apply the previous key's action to. For example, if the previous key was register or edit, this one will be artifact, pub, platform, influencer, autominer or autominer-pool. If the previous key was pub, this one will be artifact or historypoint, if it was transfer or deactivate, this one will be artifact or pub.

timestamp
  • fourth-level key-value pair (value is an integer)

The current Unixtime (a system for describing a point in time, defined as the number of seconds that have elapsed since 00:00:00 Coordinated Universal Time (UTC), Thursday, 1 January 1970, minus the number of leap seconds that have taken place since then.)

Note: this should be expressed in seconds (10 digits), and not milliseconds (13 digits).

floAddress
  • fourth-level key-value pair (value is a string)

A Flo blockchain public key address, used in registration, publish, edit and transfer messages for Artifacts, Publishers, Platforms, Influencers, Autominers and Autominer-Pools.

addresses
  • fourth or fifth-level object key

This object consists of key-value pairs which identify which public key addresses where this entity can receive payments to. Generally will contain either a single shortMWaddress or a list of individual addresses. Each key follows a name scheme of a three-letter code that identifies which network they apply to and the word "address", such as btcAddress, ltcAddress and so on.

shortMWaddress
  • fifth or sixth-level key-value pair, inside of addresses (value is a string)

...

shortMW
  • fourth or fifth-level object key

This object consists of an array of three letter acronyms identifying which payment networks can have public keys generated for, using the value provided in shortMWaddress

info
  • fourth-level object key

Contains a list of key value pairs that describe or contextualize a particular artifact, publisher, platform, influencer, autominer or autominer-pool. Specific key-value pairs are described in their appropriate sections below.

Registration

These object keys and key-value pairs are used in registration messages.

alias
  • fourth-level key-value pair (value is a string)

A non unique name, used in registration messages for Publishers, Platforms, Influencers, Autominers and Autominer-Pools as a human readable name. There is no cost to claim an alias.

Before oip042, this field was called name. Changed in oip042 to alias to make clear that collisions are allowed.

verification
  • fourth-level object key

This object consists of key-value pairs which are used for social-media verification purposes, like a verified publisher name.

imdb/musicbrainz/twitter/facebook
  • fifth-level key-value pairs (values are strings)

The URL of a specially formatted verification message stored on a social media platform, used to confirm that a publisher, platform, influencer, autominer or pool is the same party that controls a particular social media account.

statusCode
status

Register Publisher

These object keys and key-value pairs are used publisher registration messages only.

authorized
  • fourth-level array (values are strings)

A list of floAddresses which are authorized to make changes to this Publisher's Artifacts.

emailmd5
  • fifth-level key-value pair, inside of the info object (value is a string)

The md5 hash of a given email address. Used with the Gravatar avatar hosting service to let users associate themselves with an avatar without needing to host the image file within a decentralized network.

avatarNetwork
  • fifth-level key-value pair, inside of the info object (value is a string)

If a user does not wish to rely on a centrally managed avatar host like Gravatar, they can reference an image file hosted on a peer to peer network. This value identifies the name of the network, used in conjunction with avatar.

Values currently supported:

  • IPFS

Values with support currently planned:

  • BittorrentMainline
avatar
  • fifth-level key-value pair, inside of the info object (value is a string)

If a user does not wish to rely on a centrally managed avatar host like Gravatar, they can reference an image file hosted on a peer to peer network. This value identifies the actual content address of the file itself, used in conjunction with avatarNetwork.

headerImageNetwork
  • fifth-level key-value pair, inside of the info object (value is a string)

If a user wishes to, they can use an image file hosted on a peer to peer network for their Publisher Profile's "header" or "banner" image. This value identifies the name of the network, used in conjunction with headerImage.

Values currently supported:

  • IPFS

Values with support currently planned:

  • BittorrentMainline
headerImage
  • fifth-level key-value pair, inside of the info object (value is a string)

If a user wishes to, they can use an image file hosted on a peer to peer network for their Publisher Profile's "header" or "banner" image. This variable defines the actual content address of the file itself, used in conjunction with headerImageNetwork.

bitmessage
  • fifth-level key-value pair, inside of the info object (value is a string)

Getting deprecated, ignore.

Register Platform

minShare
  • fifth-level key-value pair, inside of the info object (value is an integer)

The percent of net transactions which this platform requires in order to allow a given artifact into it's catalog. This is an optional value.

Register Autominer

Register Autominer-Pool

poolShare
targetMargin

Artifacts

publisher

(Publisher Address) A string. The ECDSA public key registered by the Publisher.

type

  • fourth-level key-value pair (value is a string), inside the artifact object

The media type of the primary piece of content in a given Artifact.

Examples: Video-Basic, Video-Movie, Audio-Song, Audio-Album, Text-PDF

Complete List of All Media Types

subtype

title

A string. The Publishers name for the Artifact; should encompass the entire Artifact. Title's must be unique amongst a Publisher's Artifacts; in other words, each publisher can have only one artifact with any given Title at any point in time.

description

A string. Self explanatory, but note that this is a required field for all Artifacts.

tags

A string. Contains a comma delimited list of tag values. Ex. "tag1,tag2,tag3"

year

An integer. The year that this piece of content was first released.

fiat

  • fifth-level key-value pair (value is a string), inside the payment object

The ISO currency designator for the fiat money in which the publisher is expressing their pricing terms. At this time, most common is “USD.”

Complete list of designators

scale

  • fifth-level key-value pair (value is an integer), inside the payment object

A ratio applied to the integer values of sugTip, minPlay, sugPlay, minBuy and sugBuy, along with the value from the fiat field, to arrive at display prices.

Most common at this time is 1000. The most common value for fiat is "USD" these should be interpreted as 1000 units to 1 US Dollar.

network

  • fifth-level key-value pair (value is a string), inside the storage object

The name of the file transport network where the file can be found. Default value shall be IPFS, eventually BitTorrent will likely also be commonly used.

location

  • fifth-level key-value pair (value is a string), inside the storage object

The content address hash where the file can be found within the designated network.

disBuy

stands for: Disallow Buying

  • sixth-level key-value pair (value is boolean), inside the files object

If "true", this file will not be allowed to be purchased, only played (at any price, including zero - this field is a behavior limiter, not a price floor).

disPlay

stands for: Disallow Playing

  • sixth-level key-value pair (value is boolean), inside the files object

If "true", this file will not be allowed to be played, only purchased (at any price, including zero - this field is a behavior limiter, not a price floor).

dName

stands for: Display Name

  • sixth-level key-value pair (value is a string), inside the files object

The name that should be used to label the file in playlists and if it is downloaded.

fName

stands for: File Name

  • sixth-level key-value pair (value is a string), inside the files object

The name of the file itself, including its file extension. Used along with network and location to retrieve the file for playback or downloading.

duration

  • sixth-level key-value pair (value is a float number), inside the files object

The playback duration of the file, in seconds.

fSize

stands for: File Size

  • sixth-level key-value pair (value is an integer), inside the files object

The file size, in bytes.

sugTip

stands for: Suggested Tip Amounts

  • sixth-level array (array values are integers), inside the files object

As many as three values.

To assemble a fiat value for display purposes, use this formula:

[sugTip / scale] fiat

Example:

sugTip: 50
scale: 1000
fiat: USD

display as: 0.05USD, or $0.05 or 5¢

sugPlay

stands for: Suggested Play Price

  • sixth-level key-value pair (value is an integer), inside the files object

This is the full price to play the piece of content, think "manufacturers suggested retail price.”

To assemble a fiat value for display purposes, use this formula:

[sugPlay / scale] fiat

Example:

sugPlay: 5
scale: 1000
fiat: USD

display as: 0.005USD, or $0.005 or 0.5¢

minPlay

stands for: Minimum Play Price

  • sixth-level key-value pair (value is an integer), inside the files object

The lowest allowed price to play the piece of content. Used when a platform is having a sale or promotion.

To assemble a fiat value for display purposes, use this formula:

[minPlay / scale] fiat

Example:

minPlay: 3
scale: 1000
fiat: USD

display as: 0.003USD, or $0.003 or 0.3¢

sugBuy

stands for: Suggested Buy

  • sixth-level key-value pair (value is an integer), inside the files object

The full price to buy the piece of content.

Currently buying a piece of content means downloading the file, but soon it will mean buying a token that represents playback rights (currently planning to use Tokenly’s protocol - it functions as Ultra Violet on a blockchain).

To assemble a fiat value for display purposes, use this formula:

[sugBuy / scale] fiat

Example:

sugBuy: 100
scale: 1000
fiat: USD

display as: 1.0USD, or $1.00, or 100¢

minBuy

stands for: Minimum Buy

  • sixth-level key-value pair (value is an integer), inside the files object

The lowest allowed price to buy a piece of content. Used as a threshold limit when a platform is having a sale or promotion.

To assemble a fiat value for display purposes, use this formula:

[minBuy / scale] fiat

Example:

minBuy: 75
scale: 1000
fiat: USD

display as: 0.75USD, or $0.75, or 75¢

disPer

stands for: Discount Percent

  • sixth-level key-value pair (value is an integer), inside the files object

The maximum percent discount allowed for a piece of content, applied against the values for sugPlay and/or sugBuy. Used as an alternative to minPlay and minBuy when the publisher doesn't wish to define them individually.

retailer

stands for: Platform Percent

  • sixth-level key-value pair (value is an integer), inside the files object

The percent of commercial (or voluntary tipping) value paid to platforms who facilitate relevant commercial (or voluntary tipping) activity. An integer value of 100 or less, can be 0 or omitted. Can be used with non-commercial artifacts (tip-only) to financially incentivize suggestion of high quality free content. This percent is applied to the net transaction price after sales/promotions discounts have been applied.

  • Example: A song priced at $1 (sug)/$0.70 (min) to buy, and $0.015 (sug)/$0.01 (min) to play, offering a 20% platform cut. The maximum a platform can discount each piece of content is limited by its own publisher - for this example, any sale would be limited to 30% off for purchases, and 33% for plays.
  • Any normal day, a purchase will result in $0.80 going to the publisher and $0.20 going to the platform.
  • If the platform has a 10% sale, a purchase will result in $0.72 going to the publisher and $0.18 going to the platform, and a play would result in $0.0108 going to the publisher and $0.0027 going to the platform.

promo

stands for: Influencer Percent

  • sixth-level key-value pair (value is an integer), inside the files object

Similar to the Amazon Affiliates program. The percent of commercial (or voluntary tipping) value paid to individual content influencers who drive relevant payment activity. A value of 100 or less, can be 0 or omitted. Can be used with non-commercial artifacts (tip-only) to financially incentivize promotion of high quality free content. This percent is applied to the net transaction price after sales/promotions discounts have been applied.

ptpFT

stands for: Pin to Play, Free Threshold

  • sixth-level key-value pair (value is an integer), inside the files object

The number of nodes at any given time that can get free access to a file in exchange for pinning (aka: seeding) the file. Creates the option for publishers offer limited access to free content in exchange for file distribution which eliminates the publisher’s file storage and distribution costs. A positive integer value, can be 0 or omitted. We expect a number of market determined mean values will develop, depending on the type of content and target audience. We estimate popular albums of high bitrate MP3s will have an ideal ptpFT value of ~8[1], whereas a long video or movie will have an ideal value of ~20[1].

ptpDT

stands for: Pin to Play, Discount Threshold

  • sixth-level key-value pair (value is an integer), inside the files object

The number of nodes at any given time, past the threshold of those getting free access, that can get discounted access in exchange for pinning the file. Even when a file has a decent swarm of nodes pinning it (estimated: 10-20), there is added (although diminishing) benefit from more nodes in a swarm. The Pay to Play Discount Threshold provides an incentive for end users to participate in the "pin to play" system because some files will be free and some will be discounted. A positive integer value, can be 0 or omitted, or can be -1 if the publisher wishes to put no limits on the number of nodes receiving this discount.

ptpDP

stands for: Pin to Play, Discount Percent

  • sixth-level key-value pair (value is an integer), inside the files object

A value of 100 or less, can be 0 or omitted, only relevant if artifact contains a value for ptpDT. This percent is applied to the total transaction amount after discounts have been applied.

Historian Data Points

hdp3

stands for: Historian Datapoint, version 3

Prefix that identifies this kind of message.

miningRigRentalsLast10

stands for: MiningRigRentals.com's Last 10 (moving average rental price, per 24 hours of rental, per MH/s, in BTC)

Looked up at the miningrigrentals API endpoint for sCrypt rentals.

miningRigRentalsLast24hr

stands for: MiningRigRentals.com's Last 24 Hours

24-hour moving average of values from miningRigRentalsLast10

autominerPoolHashrate

stands for: Autominer-Pool's hashrate, in hashes per second

  • Value is an integer ≥ 0

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.

floNetHashrate

stands for: FLO blockchain's network hashrate, in hashes per second

  • Value is an integer ≥ 0

Alexandria's network node provides this information at this hosted endpoint, the json value's key is networkhashps.

floMarketPriceBTC

stands for: FLO blockchain's (weighted by exchange volume) token market price, in BTC

  • Value is a float number ≥ 0

Alexandria's instance can be looked up at this hosted endpoint, the json value's key is weighted.

floMarketPriceUSD

stands for: FLO blockchain's (weighted by exchange volume) token market price, in USD

  • Value is a float number ≥ 0

Alexandria's instance can be looked up at this hosted endpoint, the json value's key is USD.

ltcMarketPriceUSD

stands for: Litecoin's (weighted by exchange volume) token market price, in USD

  • Value is a float number ≥ 0

This value can be found at the CoinMarketCap.com hosted endpoint, the json value's key is price_usd.

Autominer-pool Block Rewards

abr1

stands for: Autominer-pool Block Reward, version 1.

Prefix that identifies this kind of message. These are, in most cases, a sendmany transaction, and it can sometimes include payments from previously won blocks. The block and amount values, below, are used to distinguish how many coins came from which blocks.

block

  • Value is an integer > 0

ID of the block in which the reward was won.

amount

  • Value is an integer > 0

Number of Flo satoshis (1/100,000,000 of a Flo token) from this block included in this transaction.

Signatures

  • third-level key-value pair (value is a string)

A piece of text is provided to a Flo blockchain wallet and signed by a given Flo key, the resulting signature is included in blockchain messages in order to verify that they were generated by the same party who registered that Flo key in an earlier registration message. Each message type has its own signature preImage recipe, they can be found below. Any values inside of [brackets] are optional, other values are mandatory.

Autominer-Pool Historian Datapoint
oip042:
pub:
hdp3:
address:
miningRigRentalsLast10:
miningRigRentalsLast24hr:
autominerPoolHashrate:
floNetHashrate:
floMarketPriceBTC:
floMarketPriceUSD:
ltcMarketPriceUSD

Please note: there should not be spaces of any sort between each semi-colon and piece of data when sent to be signed, carriage returns are used here for page formatting purposes only.

Publisher Register signature
alias-address-timestamp
Artifact Publish signature
location-address-timestamp
Artifact Edit signature
artifactID-address-timestamp
Artifact Transfer signature
artifactID-address(to)-address(from)-timestamp
Artifact Deactivate signature
artifactID-address-timestamp
Platform Register signature
btcAddress-httpURL-version[-alias-minShare]
Influencer Register signature
btcAddress-version
Autominer Register signature
btcAddress-version
Autominer-Pool Register signature
httpURL-version-targetMargin-poolShare[-alias]

See also

  1. 1.0 1.1 Needs reference