Markets¶
Creating Markets¶
After registering in the XBR Network, stakeholders that want to run their own data markets will first need to create a XBR Market.
JavaScript¶
async function main (account) {
// marketId (like all IDs in XBR) is a 128 bit (16 bytes) unique value
// here, we derive a deterministic ID from a name. other approaches to
// get an ID are fine too - as long as the ID is unique
const marketId = web3.sha3('MyMarket1').substring(0, 34);
// every market has exactly one delegate working as a market maker delegate
// the market maker maintains the real-time offchain balances, mediates
// the actual data market transactions and talks to the blockchain
const maker = '0x...';
// optionally, provide an IPFS link to a ZIP file with market terms/documents
const terms = '';
// optionally, provide an IPFS link to a RDF/Turtle file with market metadata
const meta = '';
// both XBR Consumers and Providers must deposit 100 XBR into the
// market as a security guarantee when joining
const providerSecurity = 100 * 10**18;
const consumerSecurity = 100 * 10**18;
// the market owner takes 5% market fee
const marketFee = 0.05 * 10**9 * 10**18
// now actually create the market. the sender will become market owner.
await xbr.xbrNetwork.createMarket(marketId, terms, meta, maker,
providerSecurity, consumerSecurity, marketFee, {from: account});
}
Joining Markets¶
XBR Provider that want to offer or XBR Consumer that wants to use data services in a XBR Market first need to join the respective XBR Market.
A given actor (address) can only be joined on a given XBR Market only once, under one role of these roles:
XBRNetwork.ActorType.CONSUMERXBRNetwork.ActorType.PROVIDER
The actor may join more than one XBR Market (under the same or different roles), but on one given XBR Market, it can only act as either a XBR Consumer or Provider.
Note
The XBR Market owner is automatically joined under role XBRNetwork.ActorType.MARKET
when the market is created.
JavaScript¶
To join a XBR Market in JavaScript:
async function main (account) {
// derive (deterministically) an ID for our market
const marketId = web3.sha3('MyMarket1').substring(0, 34);
// join under role XBR Consumer
const actorType = xbr.ActorType.CONSUMER;
// const actorType = xbr.ActorType.PROVIDER;
// join the market
await xbr.xbrNetwork.joinMarket(marketId, xbr.ActorType.CONSUMER, {from: account});
}