1
0
mirror of https://github.com/oceanprotocol/ocean.js.git synced 2024-11-26 20:39:05 +01:00

Merge branch 'main' into feature/metadatacache

This commit is contained in:
Alex Coseru 2020-10-13 16:03:19 +03:00 committed by GitHub
commit a55da41ac7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 62 additions and 64 deletions

View File

@ -782,6 +782,7 @@ export class OceanPool extends Pool {
fromBlock: 0, fromBlock: 0,
toBlock: 'latest' toBlock: 'latest'
}) })
events.sort((a, b) => (a.blockNumber > b.blockNumber ? 1 : -1))
for (let i = 0; i < events.length; i++) { for (let i = 0; i < events.length; i++) {
const constituents = await super.getCurrentTokens(events[i].returnValues[0]) const constituents = await super.getCurrentTokens(events[i].returnValues[0])
if (constituents.includes(dtAddress)) result.push(events[i].returnValues[0]) if (constituents.includes(dtAddress)) result.push(events[i].returnValues[0])

View File

@ -1,13 +1,7 @@
import { SearchQuery, QueryResult } from '../metadatacache/MetadataCache' import { SearchQuery, QueryResult } from '../metadatacache/MetadataCache'
import { DDO } from '../ddo/DDO' import { DDO } from '../ddo/DDO'
import { Metadata } from '../ddo/interfaces/Metadata' import { Metadata } from '../ddo/interfaces/Metadata'
import { import { Service, ServiceAccess, ServiceComputePrivacy } from '../ddo/interfaces/Service'
Service,
ServiceAccess,
ServiceComputePrivacy,
ServiceCommon
} from '../ddo/interfaces/Service'
import { EditableMetadata } from '../ddo/interfaces/EditableMetadata' import { EditableMetadata } from '../ddo/interfaces/EditableMetadata'
import Account from './Account' import Account from './Account'
import DID from './DID' import DID from './DID'
@ -17,6 +11,7 @@ import { WebServiceConnector } from './utils/WebServiceConnector'
import BigNumber from 'bignumber.js' import BigNumber from 'bignumber.js'
import { Provider } from '../provider/Provider' import { Provider } from '../provider/Provider'
import { isAddress } from 'web3-utils' import { isAddress } from 'web3-utils'
import { MetadataMain } from '../ddo/interfaces'
export enum CreateProgressStep { export enum CreateProgressStep {
CreatingDataToken, CreatingDataToken,
@ -124,7 +119,8 @@ export class Assets extends Instantiable {
this.logger.log('Encrypting files') this.logger.log('Encrypting files')
observer.next(CreateProgressStep.EncryptingFiles) observer.next(CreateProgressStep.EncryptingFiles)
let provider let provider: Provider
if (providerUri) { if (providerUri) {
provider = new Provider(this.instanceConfig) provider = new Provider(this.instanceConfig)
provider.setBaseUrl(providerUri) provider.setBaseUrl(providerUri)
@ -175,7 +171,7 @@ export class Assets extends Instantiable {
index, index,
url: undefined url: undefined
})) }))
} as any } as MetadataMain
} }
}, },
...services ...services
@ -375,12 +371,10 @@ export class Assets extends Instantiable {
} as SearchQuery) } as SearchQuery)
} }
public async getServiceByType( public async getServiceByType(did: string, serviceType: string): Promise<Service> {
did: string, let service: Service
serviceType: string const services: Service[] = (await this.resolve(did)).service
): Promise<ServiceCommon> {
const services: ServiceCommon[] = (await this.resolve(did)).service
let service
services.forEach((serv) => { services.forEach((serv) => {
if (serv.type.toString() === serviceType) { if (serv.type.toString() === serviceType) {
service = serv service = serv
@ -389,12 +383,10 @@ export class Assets extends Instantiable {
return service return service
} }
public async getServiceByIndex( public async getServiceByIndex(did: string, serviceIndex: number): Promise<Service> {
did: string, let service: Service
serviceIndex: number const services: Service[] = (await this.resolve(did)).service
): Promise<ServiceCommon> {
const services: ServiceCommon[] = (await this.resolve(did)).service
let service
services.forEach((serv) => { services.forEach((serv) => {
if (serv.index === serviceIndex) { if (serv.index === serviceIndex) {
service = serv service = serv
@ -441,8 +433,7 @@ export class Assets extends Instantiable {
* @param {String} serviceType * @param {String} serviceType
* @param {String} consumerAddress * @param {String} consumerAddress
* @param {Number} serviceIndex * @param {Number} serviceIndex
* @param {String} mpFeePercent will be converted to Wei * @param {String} serviceEndpoint
* @param {String} mpAddress mp fee collector address
* @return {Promise<any>} Order details * @return {Promise<any>} Order details
*/ */
public async initialize( public async initialize(
@ -466,7 +457,7 @@ export class Assets extends Instantiable {
* @param {String} serviceType * @param {String} serviceType
* @param {String} payerAddress * @param {String} payerAddress
* @param {Number} serviceIndex * @param {Number} serviceIndex
* @param {String} mpAddress mp fee collector address * @param {String} mpAddress Marketplace fee collector address
* @param {String} consumerAddress Optionally, if the consumer is another address than payer * @param {String} consumerAddress Optionally, if the consumer is another address than payer
* @return {Promise<String>} transactionHash of the payment * @return {Promise<String>} transactionHash of the payment
*/ */
@ -478,7 +469,8 @@ export class Assets extends Instantiable {
mpAddress?: string, mpAddress?: string,
consumerAddress?: string consumerAddress?: string
): Promise<string> { ): Promise<string> {
let service let service: Service
if (!consumerAddress) consumerAddress = payerAddress if (!consumerAddress) consumerAddress = payerAddress
if (serviceIndex === -1) { if (serviceIndex === -1) {
service = await this.getServiceByType(did, serviceType) service = await this.getServiceByType(did, serviceType)

View File

@ -183,7 +183,8 @@ export class Compute extends Instantiable {
did?: string, did?: string,
jobId?: string jobId?: string
): Promise<ComputeJob[]> { ): Promise<ComputeJob[]> {
let provider let provider: Provider
if (did) { if (did) {
const ddo = await this.ocean.assets.resolve(did) const ddo = await this.ocean.assets.resolve(did)
const service = ddo.findServiceByType('compute') const service = ddo.findServiceByType('compute')

View File

@ -7,6 +7,7 @@ import { Output } from '../ocean/interfaces/ComputeOutput'
import { MetadataAlgorithm } from '../ddo/interfaces/MetadataAlgorithm' import { MetadataAlgorithm } from '../ddo/interfaces/MetadataAlgorithm'
import { Versions } from '../ocean/Versions' import { Versions } from '../ocean/Versions'
import { Response } from 'node-fetch' import { Response } from 'node-fetch'
import { DDO } from '../ddo/DDO'
const apiPath = '/api/v1/services' const apiPath = '/api/v1/services'
@ -19,7 +20,8 @@ const apiPath = '/api/v1/services'
export class Provider extends Instantiable { export class Provider extends Instantiable {
public nonce: string public nonce: string
private baseUrl: string private baseUrl: string
public get url() {
public get url(): string {
return this.baseUrl return this.baseUrl
} }
@ -101,7 +103,8 @@ export class Provider extends Instantiable {
serviceType: string, serviceType: string,
consumerAddress: string consumerAddress: string
): Promise<string> { ): Promise<string> {
let DDO let DDO: DDO
try { try {
DDO = await this.ocean.assets.resolve(did) DDO = await this.ocean.assets.resolve(did)
} catch (e) { } catch (e) {

View File

@ -3,50 +3,50 @@ import { TestContractHandler } from '../TestContractHandler'
import { DataTokens } from '../../src/datatokens/Datatokens' import { DataTokens } from '../../src/datatokens/Datatokens'
import { Ocean } from '../../src/ocean/Ocean' import { Ocean } from '../../src/ocean/Ocean'
import { ConfigHelper } from '../../src/utils/ConfigHelper' import { ConfigHelper } from '../../src/utils/ConfigHelper'
import { assert } from 'chai' import { assert } from 'chai'
import { ServiceCommon, ServiceComputePrivacy } from '../../src/ddo/interfaces/Service' import { Service, ServiceComputePrivacy } from '../../src/ddo/interfaces/Service'
import Web3 from 'web3' import Web3 from 'web3'
import factory from '@oceanprotocol/contracts/artifacts/DTFactory.json' import factory from '@oceanprotocol/contracts/artifacts/DTFactory.json'
import datatokensTemplate from '@oceanprotocol/contracts/artifacts/DataTokenTemplate.json' import datatokensTemplate from '@oceanprotocol/contracts/artifacts/DataTokenTemplate.json'
import { Account, DDO, Metadata } from '../../src/lib'
import { Cluster, Container, Server } from '../../src/ocean/Compute'
const web3 = new Web3('http://127.0.0.1:8545') const web3 = new Web3('http://127.0.0.1:8545')
function sleep(ms) { function sleep(ms: number) {
return new Promise((resolve) => { return new Promise((resolve) => {
setTimeout(resolve, ms) setTimeout(resolve, ms)
}) })
} }
describe('Compute flow', () => { describe('Compute flow', () => {
let owner let owner: Account
let bob let bob: Account
let ddo let ddo: DDO
let alice let alice: Account
let asset let asset: Metadata
let datasetNoRawAlgo let datasetNoRawAlgo: DDO
let datasetWithTrustedAlgo let datasetWithTrustedAlgo: DDO
let algorithmAsset let algorithmAsset: DDO
let contracts let contracts: TestContractHandler
let datatoken: DataTokens let datatoken: DataTokens
let tokenAddress let tokenAddress: string
let tokenAddressNoRawAlgo let tokenAddressNoRawAlgo: string
let tokenAddressWithTrustedAlgo let tokenAddressWithTrustedAlgo: string
let tokenAddressAlgorithm let tokenAddressAlgorithm: string
let price: string let price: string
let ocean let ocean: Ocean
let computeService: ServiceCommon let computeService: Service
let data let data: { t: number; url: string }
let blob let blob: string
let jobId let jobId: string
let cluster let cluster: Cluster
let servers let servers: Server[]
let containers let containers: Container[]
let provider let providerAttributes: any
const dateCreated = new Date(Date.now()).toISOString().split('.')[0] + 'Z' // remove milliseconds const dateCreated = new Date(Date.now()).toISOString().split('.')[0] + 'Z' // remove milliseconds
const marketplaceAllowance = '20'
const tokenAmount = '100' const tokenAmount = '100'
const timeout = 86400 const timeout = 86400
@ -170,7 +170,7 @@ describe('Compute flow', () => {
'sha256:cb57ecfa6ebbefd8ffc7f75c0f00e57a7fa739578a429b6f72a0df19315deadc' 'sha256:cb57ecfa6ebbefd8ffc7f75c0f00e57a7fa739578a429b6f72a0df19315deadc'
) )
] ]
provider = ocean.compute.createProviderAttributes( providerAttributes = ocean.compute.createProviderAttributes(
'Azure', 'Azure',
'Compute service with 16gb ram for each node.', 'Compute service with 16gb ram for each node.',
cluster, cluster,
@ -186,7 +186,7 @@ describe('Compute flow', () => {
alice, alice,
price, price,
dateCreated, dateCreated,
provider, providerAttributes,
origComputePrivacy as ServiceComputePrivacy origComputePrivacy as ServiceComputePrivacy
) )
ddo = await ocean.assets.create(asset, alice, [computeService], tokenAddress) ddo = await ocean.assets.create(asset, alice, [computeService], tokenAddress)
@ -205,7 +205,7 @@ describe('Compute flow', () => {
alice, alice,
'1000', '1000',
dateCreated, dateCreated,
provider, providerAttributes,
origComputePrivacy as ServiceComputePrivacy origComputePrivacy as ServiceComputePrivacy
) )
datasetNoRawAlgo = await ocean.assets.create( datasetNoRawAlgo = await ocean.assets.create(
@ -229,7 +229,7 @@ describe('Compute flow', () => {
alice, alice,
'1000', '1000',
dateCreated, dateCreated,
provider, providerAttributes,
origComputePrivacy as ServiceComputePrivacy origComputePrivacy as ServiceComputePrivacy
) )
datasetWithTrustedAlgo = await ocean.assets.create( datasetWithTrustedAlgo = await ocean.assets.create(
@ -243,7 +243,7 @@ describe('Compute flow', () => {
}) })
it('should publish an algorithm', async () => { it('should publish an algorithm', async () => {
const algoAsset = { const algoAsset: Metadata = {
main: { main: {
type: 'algorithm', type: 'algorithm',
name: 'Test Algo', name: 'Test Algo',
@ -344,7 +344,7 @@ describe('Compute flow', () => {
undefined, undefined,
algorithmMeta, algorithmMeta,
output, output,
computeService.index, `${computeService.index}`,
computeService.type computeService.type
) )
jobId = response.jobId jobId = response.jobId
@ -365,7 +365,8 @@ describe('Compute flow', () => {
assert(jobId != null) assert(jobId != null)
await ocean.compute.stop(bob, ddo.id, jobId) await ocean.compute.stop(bob, ddo.id, jobId)
const response = await ocean.compute.status(bob, ddo.id, jobId) const response = await ocean.compute.status(bob, ddo.id, jobId)
assert(response[0].stopreq === 1) // TODO: typings say that `stopreq` does not exist
assert((response[0] as any).stopreq === 1)
}) })
it('should not allow order the compute service with raw algo for dataset that does not allow raw algo', async () => { it('should not allow order the compute service with raw algo for dataset that does not allow raw algo', async () => {
const service1 = datasetNoRawAlgo.findServiceByType('compute') const service1 = datasetNoRawAlgo.findServiceByType('compute')
@ -416,7 +417,7 @@ describe('Compute flow', () => {
algorithmAsset.id, algorithmAsset.id,
undefined, undefined,
output, output,
computeService.index, `${computeService.index}`,
computeService.type, computeService.type,
orderalgo, orderalgo,
algorithmAsset.dataToken algorithmAsset.dataToken

View File

@ -5,7 +5,7 @@ import spies from 'chai-spies'
import Web3 from 'web3' import Web3 from 'web3'
import { AbiItem } from 'web3-utils/types' import { AbiItem } from 'web3-utils/types'
import { DataTokens } from '../../src/datatokens/Datatokens' import { DataTokens } from '../../src/datatokens/Datatokens'
import { Account, EditableMetadata, ServiceAccess, ServiceCommon } from '../../src/lib' import { Account, EditableMetadata, Service, ServiceAccess } from '../../src/lib'
import { Ocean } from '../../src/ocean/Ocean' import { Ocean } from '../../src/ocean/Ocean'
import { ConfigHelper } from '../../src/utils/ConfigHelper' import { ConfigHelper } from '../../src/utils/ConfigHelper'
import { TestContractHandler } from '../TestContractHandler' import { TestContractHandler } from '../TestContractHandler'
@ -33,7 +33,7 @@ describe('Marketplace flow', () => {
let service1: ServiceAccess let service1: ServiceAccess
let price: string let price: string
let ocean: Ocean let ocean: Ocean
let accessService: ServiceCommon let accessService: Service
let data let data
let blob let blob