diff --git a/docs/README_marketplace_flow.md b/docs/README_marketplace_flow.md index 2caaf4a2..ae2526d2 100644 --- a/docs/README_marketplace_flow.md +++ b/docs/README_marketplace_flow.md @@ -5,6 +5,7 @@ This batteries-included flow includes metadata, multiple services for one datato It focuses on Alice's experience as a publisher, and Bob's experience as a buyer & consumer. The rest are services used by Alice and Bob. Here's the steps. + 1. Initialize services 1. Alice publishes assets for data services (= publishes a datatoken contract and metadata) 1. Alice mints 100 tokens @@ -18,13 +19,14 @@ Let's go through each step. ## 0. Installation If you haven't installed yet: + ```bash npm i @oceanprotocol/lib ``` ## 1. Initialize services -This quickstart treats the publisher service, ganache-cli, metadata store, and marketplace as +This quickstart treats the publisher service, ganache-cli, metadata store, and marketplace as externally-run services. For convenience, we run barge locally in default settings. ```bash @@ -37,70 +39,71 @@ export PROVIDER_VERSION=phase2 ## 2. Alice publishes assets for data services (= publishes a datatoken contract) -1. Create DataToken +1. Create DataToken + ```javascript import { TestContractHandler } from '../TestContractHandler' import { DataTokens } from '../../src/datatokens/Datatokens' import { Ocean } from '../../src/ocean/Ocean' const Web3 = require('web3') const web3 = new Web3('http://127.0.0.1:8545') -const factory = require('@oceanprotocol/contracts/artifacts/development/DTFactory.json') -const datatokensTemplate = require('@oceanprotocol/contracts/artifacts/development/DataTokenTemplate.json') +const factory = require('@oceanprotocol/contracts/artifacts/DTFactory.json') +const datatokensTemplate = require('@oceanprotocol/contracts/artifacts/DataTokenTemplate.json') // Alice's config const config = { - metadataStoreUri: 'http://aquarius:5000', - providerUri: 'http://localhost:8030', - nodeUri: `http://localhost:${process.env.ETH_PORT || 8545}`, - verbose: LogLevel.Error, - web3Provider: web3, - factoryAddress: '0x123456789...' -} + metadataStoreUri: 'http://aquarius:5000', + providerUri: 'http://localhost:8030', + nodeUri: `http://localhost:${process.env.ETH_PORT || 8545}`, + verbose: LogLevel.Error, + web3Provider: web3, + factoryAddress: '0x123456789...' +} const ocean = await Ocean.getInstance(config) const alice = (await ocean.accounts.list())[0] datatoken = new DataTokens( - config.factoryAddress, - factory.abi, - datatokensTemplate.abi, - web3 - ) + config.factoryAddress, + factory.abi, + datatokensTemplate.abi, + web3 +) const data = { t: 1, url: ocean.config.metadataStoreUri } const blob = JSON.stringify(data) const dataTokenAddress = await datatoken.create(blob, alice.getId()) - ``` + 2. Publish asset(s) ```javascript const asset = { - main: { - type: 'dataset', - name: 'test-dataset', - dateCreated: new Date(Date.now()).toISOString().split('.')[0] + 'Z', // remove milliseconds - author: 'oceanprotocol-team', - license: 'MIT', - files: [ - { - url: - 'https://raw.githubusercontent.com/tbertinmahieux/MSongsDB/master/Tasks_Demos/CoverSongs/shs_dataset_test.txt', - checksum: 'efb2c764274b745f5fc37f97c6b0e761', - contentLength: '4535431', - contentType: 'text/csv', - encoding: 'UTF-8', - compression: 'zip' - } - ] - } - } + main: { + type: 'dataset', + name: 'test-dataset', + dateCreated: new Date(Date.now()).toISOString().split('.')[0] + 'Z', // remove milliseconds + author: 'oceanprotocol-team', + license: 'MIT', + files: [ + { + url: + 'https://raw.githubusercontent.com/tbertinmahieux/MSongsDB/master/Tasks_Demos/CoverSongs/shs_dataset_test.txt', + checksum: 'efb2c764274b745f5fc37f97c6b0e761', + contentLength: '4535431', + contentType: 'text/csv', + encoding: 'UTF-8', + compression: 'zip' + } + ] + } +} // create a service service1 = await ocean.assets.createAccessServiceAttributes( - alice, - 10, // set the price in datatoken - new Date(Date.now()).toISOString().split('.')[0] + 'Z', // publishedDate - 0 // timeout + alice, + 10, // set the price in datatoken + new Date(Date.now()).toISOString().split('.')[0] + 'Z', // publishedDate + 0 // timeout ) // publish asset @@ -119,18 +122,18 @@ await datatoken.mint(tokenAddress, alice.getId(), 100) ```javascript await datatoken.approve( - dataTokenAddress, - '0x068ed00cf0441e4829d9784fcbe7b9e26d4bd8d0', // marketplace address, - 20, // marketplaceAllowance - alice.getId() + dataTokenAddress, + '0x068ed00cf0441e4829d9784fcbe7b9e26d4bd8d0', // marketplace address, + 20, // marketplaceAllowance + alice.getId() ) ``` ## 5. Marketplace posts asset for sale + Now, you're the marketplace:) ```javascript - // Market's config const marketOcean = await Ocean.getInstance(config) const marketplace = (await ocean.accounts.list())[1] @@ -145,31 +148,33 @@ assert(accessService.attributes.main.cost * price === 200) ```javascript // Not shown: in marketplace GUI, Bob uses Stripe to send USD to marketplace (or other methods / currencies). - ``` - + ## 7. Bob uses a service he just purchased (download) + Now, you're Bob:) ```javascript const accessService = await ocean.assets.getServiceByType(asset.id, 'access') const bob = (await ocean.accounts.list())[2] -await ocean.assets.order(ddo.id, accessService.type, bob.getId()).then(async (res: string) => { - res = JSON.parse(res) - return await datatoken.transfer( +await ocean.assets + .order(ddo.id, accessService.type, bob.getId()) + .then(async (res: string) => { + res = JSON.parse(res) + return await datatoken.transfer( res['dataToken'], res['to'], res['numTokens'], res['from'] - ) - }).then(async (tx) => { - await ocean.assets.download( - ddo.id, - tx.transactionHash, - dataTokenAddress, - bob, - '~/my-datasets' - ) - }) - + ) + }) + .then(async (tx) => { + await ocean.assets.download( + ddo.id, + tx.transactionHash, + dataTokenAddress, + bob, + '~/my-datasets' + ) + }) ``` diff --git a/package-lock.json b/package-lock.json index 111e204c..4b0dfa89 100644 --- a/package-lock.json +++ b/package-lock.json @@ -880,9 +880,9 @@ } }, "@oceanprotocol/contracts": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@oceanprotocol/contracts/-/contracts-0.3.3.tgz", - "integrity": "sha512-ZQ5RHQWp6xkmATt7Sl12LhnH4dovewgKPX1gGeZoDSyFcmpjMDngtJpDns8jMsaclU61tPScw7K/EmxS1ydiCg==" + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@oceanprotocol/contracts/-/contracts-0.3.4.tgz", + "integrity": "sha512-fSiWoFs9ewdnsvb81ylu7So66dzftcC2AH8ZhAXxeszK9h9WYSEV+TNoflujuHjQ+f3hnIbhBubyZI0JP24AdQ==" }, "@octokit/auth-token": { "version": "2.4.2", diff --git a/package.json b/package.json index b93e6129..ce503995 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ }, "dependencies": { "@ethereum-navigator/navigator": "^0.5.0", - "@oceanprotocol/contracts": "0.3.3", + "@oceanprotocol/contracts": "^0.3.4", "bignumber.js": "^9.0.0", "decimal.js": "^10.2.0", "fs": "0.0.1-security", diff --git a/src/balancer/balancerlib.ts b/src/balancer/balancerlib.ts index 73fc2de5..029602b4 100644 --- a/src/balancer/balancerlib.ts +++ b/src/balancer/balancerlib.ts @@ -1,7 +1,7 @@ // import * as jsonFactoryABI from './artifacts/SFactory.json' // import * as jsonPoolABI from './artifacts/SPool.json' -import * as jsonFactoryABI from '@oceanprotocol/contracts/artifacts/development/SFactory.json' -import * as jsonPoolABI from '@oceanprotocol/contracts/artifacts/development/SPool.json' +import * as jsonFactoryABI from '@oceanprotocol/contracts/artifacts/SFactory.json' +import * as jsonPoolABI from '@oceanprotocol/contracts/artifacts/SPool.json' import Web3 from 'web3' const Decimal = require('decimal.js') diff --git a/src/datatokens/Datatokens.ts b/src/datatokens/Datatokens.ts index 3994754f..acb8b510 100644 --- a/src/datatokens/Datatokens.ts +++ b/src/datatokens/Datatokens.ts @@ -1,5 +1,5 @@ -const defaultFactoryABI = require('@oceanprotocol/contracts/artifacts/development/DTFactory.json') -const defaultDatatokensABI = require('@oceanprotocol/contracts/artifacts/development/DataTokenTemplate.json') +const defaultFactoryABI = require('@oceanprotocol/contracts/artifacts/DTFactory.json') +const defaultDatatokensABI = require('@oceanprotocol/contracts/artifacts/DataTokenTemplate.json') /** * Provides a interface to DataTokens diff --git a/test/integration/ComputeFlow.test.ts b/test/integration/ComputeFlow.test.ts index fa3bb3e7..6e9a5091 100644 --- a/test/integration/ComputeFlow.test.ts +++ b/test/integration/ComputeFlow.test.ts @@ -6,8 +6,8 @@ import { assert } from 'console' import { ServiceComputePrivacy } from '../../src/ddo/interfaces/Service' const Web3 = require('web3') const web3 = new Web3('http://127.0.0.1:8545') -const factory = require('@oceanprotocol/contracts/artifacts/development/DTFactory.json') -const datatokensTemplate = require('@oceanprotocol/contracts/artifacts/development/DataTokenTemplate.json') +const factory = require('@oceanprotocol/contracts/artifacts/DTFactory.json') +const datatokensTemplate = require('@oceanprotocol/contracts/artifacts/DataTokenTemplate.json') describe('Compute flow', () => { let owner diff --git a/test/integration/Marketplaceflow.test.ts b/test/integration/Marketplaceflow.test.ts index bce50d63..02be81de 100644 --- a/test/integration/Marketplaceflow.test.ts +++ b/test/integration/Marketplaceflow.test.ts @@ -6,8 +6,8 @@ import { assert } from 'console' const Web3 = require('web3') const web3 = new Web3('http://127.0.0.1:8545') -const factory = require('@oceanprotocol/contracts/artifacts/development/DTFactory.json') -const datatokensTemplate = require('@oceanprotocol/contracts/artifacts/development/DataTokenTemplate.json') +const factory = require('@oceanprotocol/contracts/artifacts/DTFactory.json') +const datatokensTemplate = require('@oceanprotocol/contracts/artifacts/DataTokenTemplate.json') describe('Marketplace flow', () => { let owner diff --git a/test/integration/Rinkeby.test.ts b/test/integration/Rinkeby.test.ts index cb6d49e7..781d3d60 100644 --- a/test/integration/Rinkeby.test.ts +++ b/test/integration/Rinkeby.test.ts @@ -3,8 +3,8 @@ import { DataTokens } from '../../src/datatokens/Datatokens' const Web3 = require('web3') const web3 = new Web3('wss://rinkeby.infura.io/ws/v3/357f2fe737db4304bd2f7285c5602d0d') -const factory = require('@oceanprotocol/contracts/artifacts/development/DTFactory.json') -const datatokensTemplate = require('@oceanprotocol/contracts/artifacts/development/DataTokenTemplate.json') +const factory = require('@oceanprotocol/contracts/artifacts/DTFactory.json') +const datatokensTemplate = require('@oceanprotocol/contracts/artifacts/DataTokenTemplate.json') describe('Rinkeby test', () => { // let account diff --git a/test/integration/Simpleflow.test.ts b/test/integration/Simpleflow.test.ts index c10086d4..0e8f3ddf 100644 --- a/test/integration/Simpleflow.test.ts +++ b/test/integration/Simpleflow.test.ts @@ -5,8 +5,8 @@ import { Config } from '../../src/models/Config' const Web3 = require('web3') const web3 = new Web3('http://127.0.0.1:8545') -const factory = require('@oceanprotocol/contracts/artifacts/development/DTFactory.json') -const datatokensTemplate = require('@oceanprotocol/contracts/artifacts/development/DataTokenTemplate.json') +const factory = require('@oceanprotocol/contracts/artifacts/DTFactory.json') +const datatokensTemplate = require('@oceanprotocol/contracts/artifacts/DataTokenTemplate.json') describe('Simple flow', () => { let owner diff --git a/test/unit/Datatokens.test.ts b/test/unit/Datatokens.test.ts index f3c2e650..5470b0ac 100644 --- a/test/unit/Datatokens.test.ts +++ b/test/unit/Datatokens.test.ts @@ -3,8 +3,8 @@ import { TestContractHandler } from '../TestContractHandler' import { DataTokens } from '../../src/datatokens/Datatokens' const Web3 = require('web3') -const factory = require('@oceanprotocol/contracts/artifacts/development/DTFactory.json') -const datatokensTemplate = require('@oceanprotocol/contracts/artifacts/development/DataTokenTemplate.json') +const factory = require('@oceanprotocol/contracts/artifacts/DTFactory.json') +const datatokensTemplate = require('@oceanprotocol/contracts/artifacts/DataTokenTemplate.json') const web3 = new Web3('http://127.0.0.1:8545') diff --git a/test/unit/balancer/Balancer.test.ts b/test/unit/balancer/Balancer.test.ts index add8132f..b59d8501 100644 --- a/test/unit/balancer/Balancer.test.ts +++ b/test/unit/balancer/Balancer.test.ts @@ -6,12 +6,12 @@ import { OceanPool } from '../../../src/balancer/OceanPool' const Web3 = require('web3') const web3 = new Web3('http://127.0.0.1:8545') -const factory = require('@oceanprotocol/contracts/artifacts/development/DTFactory.json') -const datatokensTemplate = require('@oceanprotocol/contracts/artifacts/development/DataTokenTemplate.json') +const factory = require('@oceanprotocol/contracts/artifacts/DTFactory.json') +const datatokensTemplate = require('@oceanprotocol/contracts/artifacts/DataTokenTemplate.json') // this will be replaced by our SFactory/SPool -const OceanPoolFactory = require('@oceanprotocol/contracts/artifacts/development/SFactory.json') -const OceanSPool = require('@oceanprotocol/contracts/artifacts/development/SPool.json') +const OceanPoolFactory = require('@oceanprotocol/contracts/artifacts/SFactory.json') +const OceanSPool = require('@oceanprotocol/contracts/artifacts/SPool.json') describe('Balancer flow', () => { let oceanTokenAddress