mirror of
https://github.com/oceanprotocol/react.git
synced 2025-02-14 21:10:38 +01:00
compute
This commit is contained in:
parent
927d0acf05
commit
29f5b2d16c
@ -1,5 +1,11 @@
|
|||||||
import React from 'react'
|
import React from 'react'
|
||||||
import { useOcean, usePublish, useConsume } from '@oceanprotocol/react'
|
import {
|
||||||
|
useOcean,
|
||||||
|
usePublish,
|
||||||
|
useConsume,
|
||||||
|
useCompute,
|
||||||
|
computeOptions
|
||||||
|
} from '@oceanprotocol/react'
|
||||||
import { Metadata, DDO } from '@oceanprotocol/lib'
|
import { Metadata, DDO } from '@oceanprotocol/lib'
|
||||||
import { useState } from 'react'
|
import { useState } from 'react'
|
||||||
import { useEffect } from 'react'
|
import { useEffect } from 'react'
|
||||||
@ -7,6 +13,7 @@ import { useEffect } from 'react'
|
|||||||
export function ConsumeDdo() {
|
export function ConsumeDdo() {
|
||||||
const { accountId, ocean } = useOcean()
|
const { accountId, ocean } = useOcean()
|
||||||
const { consumeStepText, consume, consumeError } = useConsume()
|
const { consumeStepText, consume, consumeError } = useConsume()
|
||||||
|
const { compute, computeStepText } = useCompute()
|
||||||
const [did, setDid] = useState<string | undefined>()
|
const [did, setDid] = useState<string | undefined>()
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
async function init() {}
|
async function init() {}
|
||||||
@ -20,6 +27,25 @@ export function ConsumeDdo() {
|
|||||||
await consume(did, ddo.dataToken, 'access')
|
await consume(did, ddo.dataToken, 'access')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const computeDid = async () => {
|
||||||
|
if (did === undefined) return
|
||||||
|
const ddo = await ocean.assets.resolve(did)
|
||||||
|
console.log(ddo)
|
||||||
|
console.log('ocean dt', ocean.datatokens)
|
||||||
|
|
||||||
|
const computeService = ddo.findServiceByType('compute')
|
||||||
|
console.log('ddo compute service', computeService)
|
||||||
|
const serv = ddo.findServiceById(computeService.index)
|
||||||
|
|
||||||
|
console.log('ddo compute service resolved', serv)
|
||||||
|
await compute(
|
||||||
|
did,
|
||||||
|
computeService,
|
||||||
|
ddo.dataToken,
|
||||||
|
"console.log('test')",
|
||||||
|
computeOptions[0].value
|
||||||
|
)
|
||||||
|
}
|
||||||
const handleChange = (e: any) => {
|
const handleChange = (e: any) => {
|
||||||
setDid(e.target.value)
|
setDid(e.target.value)
|
||||||
}
|
}
|
||||||
@ -31,8 +57,12 @@ export function ConsumeDdo() {
|
|||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<button onClick={consumeDid}>Consume did</button>
|
<button onClick={consumeDid}>Consume did</button>
|
||||||
|
<button onClick={computeDid}>Compute</button>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
{consumeStepText}
|
||||||
|
{computeStepText}
|
||||||
</div>
|
</div>
|
||||||
<div>{consumeStepText}</div>
|
|
||||||
<div>{consumeError}</div>
|
<div>{consumeError}</div>
|
||||||
</>
|
</>
|
||||||
)
|
)
|
||||||
|
@ -33,7 +33,8 @@ export function Publish() {
|
|||||||
|
|
||||||
const publishAsset = async () => {
|
const publishAsset = async () => {
|
||||||
const ddo = await publish(asset as Metadata, '4', marketAddress, [
|
const ddo = await publish(asset as Metadata, '4', marketAddress, [
|
||||||
{ serviceType: 'access', cost: '1' }
|
{ serviceType: 'access', cost: '1' },
|
||||||
|
{ serviceType: 'compute', cost: '1' }
|
||||||
])
|
])
|
||||||
console.log(ddo)
|
console.log(ddo)
|
||||||
setDdo(ddo)
|
setDdo(ddo)
|
||||||
|
13
package-lock.json
generated
13
package-lock.json
generated
@ -376,9 +376,9 @@
|
|||||||
"integrity": "sha512-5Oohzno3tnISMYG1jhtHxKMMkcIypTZAPlIoFjE5vDlAW51tyuxwYxBXHYQ2/FLRVFkmUmy5yASKg9zbnKKwQw=="
|
"integrity": "sha512-5Oohzno3tnISMYG1jhtHxKMMkcIypTZAPlIoFjE5vDlAW51tyuxwYxBXHYQ2/FLRVFkmUmy5yASKg9zbnKKwQw=="
|
||||||
},
|
},
|
||||||
"@oceanprotocol/lib": {
|
"@oceanprotocol/lib": {
|
||||||
"version": "0.1.4",
|
"version": "0.1.6",
|
||||||
"resolved": "https://registry.npmjs.org/@oceanprotocol/lib/-/lib-0.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/@oceanprotocol/lib/-/lib-0.1.6.tgz",
|
||||||
"integrity": "sha512-H+soD+W+fOdKXgFxM8pkhAs9JoJDMWxudvTJxT696Ch+z1CvbcEh4bFNlUpjWhVgwjMTVCigYum3BG+V1mqN1Q==",
|
"integrity": "sha512-eFncaLtetef6REKzd2u68fFCVdCfBqwGnsDU9oirMfBrdcGu0VquXtAsEfrnHAkIsCaf97wd1GAZ4Yp1JaXP1g==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@ethereum-navigator/navigator": "^0.5.0",
|
"@ethereum-navigator/navigator": "^0.5.0",
|
||||||
"@oceanprotocol/contracts": "^0.2.3",
|
"@oceanprotocol/contracts": "^0.2.3",
|
||||||
@ -390,13 +390,6 @@
|
|||||||
"web3": "^1.2.9",
|
"web3": "^1.2.9",
|
||||||
"web3-eth-contract": "^1.2.9",
|
"web3-eth-contract": "^1.2.9",
|
||||||
"whatwg-url": "^8.0.0"
|
"whatwg-url": "^8.0.0"
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"@oceanprotocol/contracts": {
|
|
||||||
"version": "0.2.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/@oceanprotocol/contracts/-/contracts-0.2.3.tgz",
|
|
||||||
"integrity": "sha512-5Oohzno3tnISMYG1jhtHxKMMkcIypTZAPlIoFjE5vDlAW51tyuxwYxBXHYQ2/FLRVFkmUmy5yASKg9zbnKKwQw=="
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@octokit/auth-token": {
|
"@octokit/auth-token": {
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
],
|
],
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@oceanprotocol/contracts": "^0.2.3",
|
"@oceanprotocol/contracts": "^0.2.3",
|
||||||
"@oceanprotocol/lib": "^0.1.4",
|
"@oceanprotocol/lib": "^0.1.6",
|
||||||
"@walletconnect/web3-provider": "^1.0.15",
|
"@walletconnect/web3-provider": "^1.0.15",
|
||||||
"axios": "^0.19.2",
|
"axios": "^0.19.2",
|
||||||
"react": "^16.9.41",
|
"react": "^16.9.41",
|
||||||
|
@ -4,15 +4,16 @@ import { ComputeValue } from './ComputeOptions'
|
|||||||
import { feedback } from './../../utils'
|
import { feedback } from './../../utils'
|
||||||
import { DID, Logger } from '@oceanprotocol/lib'
|
import { DID, Logger } from '@oceanprotocol/lib'
|
||||||
import { MetadataAlgorithm } from '@oceanprotocol/lib/dist/node/ddo/interfaces/MetadataAlgorithm'
|
import { MetadataAlgorithm } from '@oceanprotocol/lib/dist/node/ddo/interfaces/MetadataAlgorithm'
|
||||||
|
import { ComputeJob } from '@oceanprotocol/lib/dist/node/ocean/interfaces/ComputeJob'
|
||||||
|
|
||||||
interface UseCompute {
|
interface UseCompute {
|
||||||
compute: (
|
compute: (
|
||||||
did: string,
|
did: string,
|
||||||
computeServiceIndex: number,
|
computeService: any,
|
||||||
dataTokenAddress: string,
|
dataTokenAddress: string,
|
||||||
algorithmRawCode: string,
|
algorithmRawCode: string,
|
||||||
computeContainer: ComputeValue
|
computeContainer: ComputeValue
|
||||||
) => Promise<void>
|
) => Promise<ComputeJob>
|
||||||
computeStep?: number
|
computeStep?: number
|
||||||
computeStepText?: string
|
computeStepText?: string
|
||||||
computeError?: string
|
computeError?: string
|
||||||
@ -21,8 +22,9 @@ interface UseCompute {
|
|||||||
|
|
||||||
// TODO: customize for compute
|
// TODO: customize for compute
|
||||||
export const computeFeedback: { [key in number]: string } = {
|
export const computeFeedback: { [key in number]: string } = {
|
||||||
...feedback,
|
0: '1/3 Ordering asset...',
|
||||||
4: '3/3 Access granted. Starting job...'
|
1: '2/3 Transfering data token.',
|
||||||
|
2: '3/3 Access granted. Starting job...'
|
||||||
}
|
}
|
||||||
const rawAlgorithmMeta: MetadataAlgorithm = {
|
const rawAlgorithmMeta: MetadataAlgorithm = {
|
||||||
rawcode: `console.log('Hello world'!)`,
|
rawcode: `console.log('Hello world'!)`,
|
||||||
@ -53,7 +55,7 @@ function useCompute(): UseCompute {
|
|||||||
dataTokenAddress: string,
|
dataTokenAddress: string,
|
||||||
algorithmRawCode: string,
|
algorithmRawCode: string,
|
||||||
computeContainer: ComputeValue
|
computeContainer: ComputeValue
|
||||||
): Promise<void> {
|
): Promise<ComputeJob> {
|
||||||
if (!ocean || !account) return
|
if (!ocean || !account) return
|
||||||
|
|
||||||
setComputeError(undefined)
|
setComputeError(undefined)
|
||||||
@ -65,6 +67,13 @@ function useCompute(): UseCompute {
|
|||||||
rawAlgorithmMeta.rawcode = algorithmRawCode
|
rawAlgorithmMeta.rawcode = algorithmRawCode
|
||||||
|
|
||||||
const output = {}
|
const output = {}
|
||||||
|
Logger.log(
|
||||||
|
'compute order',
|
||||||
|
accountId,
|
||||||
|
did,
|
||||||
|
computeService,
|
||||||
|
rawAlgorithmMeta
|
||||||
|
)
|
||||||
const order = await ocean.compute.order(
|
const order = await ocean.compute.order(
|
||||||
accountId,
|
accountId,
|
||||||
did,
|
did,
|
||||||
@ -73,13 +82,16 @@ function useCompute(): UseCompute {
|
|||||||
rawAlgorithmMeta
|
rawAlgorithmMeta
|
||||||
)
|
)
|
||||||
|
|
||||||
|
setStep(1)
|
||||||
const computeOrder = JSON.parse(order)
|
const computeOrder = JSON.parse(order)
|
||||||
const tokenTransfer = await ocean.datatokens.transfer(
|
Logger.log('compute order', computeOrder)
|
||||||
|
const tokenTransfer = await ocean.datatokens.transferWei(
|
||||||
computeOrder.dataToken,
|
computeOrder.dataToken,
|
||||||
computeOrder.to,
|
computeOrder.to,
|
||||||
String(computeOrder.numTokens),
|
String(computeOrder.numTokens),
|
||||||
computeOrder.from
|
computeOrder.from
|
||||||
)
|
)
|
||||||
|
setStep(2)
|
||||||
const response = await ocean.compute.start(
|
const response = await ocean.compute.start(
|
||||||
did,
|
did,
|
||||||
(tokenTransfer as any).transactionHash,
|
(tokenTransfer as any).transactionHash,
|
||||||
@ -91,11 +103,12 @@ function useCompute(): UseCompute {
|
|||||||
computeService.index,
|
computeService.index,
|
||||||
computeService.type
|
computeService.type
|
||||||
)
|
)
|
||||||
|
return response
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
Logger.error(error)
|
Logger.error(error)
|
||||||
setComputeError(error.message)
|
setComputeError(error.message)
|
||||||
} finally {
|
} finally {
|
||||||
setComputeStep(undefined)
|
setStep(undefined)
|
||||||
setIsLoading(false)
|
setIsLoading(false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,10 @@ import { useEffect, useState } from 'react'
|
|||||||
import { DDO, Metadata, DataTokens, Logger } from '@oceanprotocol/lib'
|
import { DDO, Metadata, DataTokens, Logger } from '@oceanprotocol/lib'
|
||||||
import { useOcean } from '../../providers'
|
import { useOcean } from '../../providers'
|
||||||
import ProviderStatus from '../../providers/OceanProvider/ProviderStatus'
|
import ProviderStatus from '../../providers/OceanProvider/ProviderStatus'
|
||||||
import { Service } from '@oceanprotocol/lib/dist/node/ddo/interfaces/Service'
|
import {
|
||||||
|
Service,
|
||||||
|
ServiceComputePrivacy
|
||||||
|
} from '@oceanprotocol/lib/dist/node/ddo/interfaces/Service'
|
||||||
import { ServiceConfig } from './ServiceConfig'
|
import { ServiceConfig } from './ServiceConfig'
|
||||||
import { publishFeedback } from '../../utils'
|
import { publishFeedback } from '../../utils'
|
||||||
|
|
||||||
@ -72,7 +75,7 @@ function usePublish(): UsePublish {
|
|||||||
new Date(Date.now()).toISOString().split('.')[0] + 'Z'
|
new Date(Date.now()).toISOString().split('.')[0] + 'Z'
|
||||||
const timeout = 0
|
const timeout = 0
|
||||||
const services: Service[] = []
|
const services: Service[] = []
|
||||||
setStep(3)
|
|
||||||
serviceConfigs.forEach(async (serviceConfig) => {
|
serviceConfigs.forEach(async (serviceConfig) => {
|
||||||
const price = ocean.datatokens.toWei(serviceConfig.cost)
|
const price = ocean.datatokens.toWei(serviceConfig.cost)
|
||||||
switch (serviceConfig.serviceType) {
|
switch (serviceConfig.serviceType) {
|
||||||
@ -88,11 +91,47 @@ function usePublish(): UsePublish {
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
case 'compute': {
|
case 'compute': {
|
||||||
const computeService = await ocean.assets.createAccessServiceAttributes(
|
const cluster = ocean.compute.createClusterAttributes(
|
||||||
|
'Kubernetes',
|
||||||
|
'http://10.0.0.17/xxx'
|
||||||
|
)
|
||||||
|
const servers = [
|
||||||
|
ocean.compute.createServerAttributes(
|
||||||
|
'1',
|
||||||
|
'xlsize',
|
||||||
|
'50',
|
||||||
|
'16',
|
||||||
|
'0',
|
||||||
|
'128gb',
|
||||||
|
'160gb',
|
||||||
|
timeout
|
||||||
|
)
|
||||||
|
]
|
||||||
|
const containers = [
|
||||||
|
ocean.compute.createContainerAttributes(
|
||||||
|
'tensorflow/tensorflow',
|
||||||
|
'latest',
|
||||||
|
'sha256:cb57ecfa6ebbefd8ffc7f75c0f00e57a7fa739578a429b6f72a0df19315deadc'
|
||||||
|
)
|
||||||
|
]
|
||||||
|
const provider = ocean.compute.createProviderAttributes(
|
||||||
|
'Azure',
|
||||||
|
'Compute service with 16gb ram for each node.',
|
||||||
|
cluster,
|
||||||
|
containers,
|
||||||
|
servers
|
||||||
|
)
|
||||||
|
const origComputePrivacy = {
|
||||||
|
allowRawAlgorithm: true,
|
||||||
|
allowNetworkAccess: false,
|
||||||
|
trustedAlgorithms: []
|
||||||
|
}
|
||||||
|
const computeService = ocean.compute.createComputeService(
|
||||||
account,
|
account,
|
||||||
price,
|
price,
|
||||||
publishedDate,
|
publishedDate,
|
||||||
0
|
provider,
|
||||||
|
origComputePrivacy as ServiceComputePrivacy
|
||||||
)
|
)
|
||||||
services.push(computeService)
|
services.push(computeService)
|
||||||
break
|
break
|
||||||
@ -100,14 +139,15 @@ function usePublish(): UsePublish {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
Logger.log('services created', services)
|
Logger.log('services created', services)
|
||||||
setStep(4)
|
setStep(3)
|
||||||
const ddo = await ocean.assets.create(
|
const ddo = await ocean.assets.create(
|
||||||
asset,
|
asset,
|
||||||
account,
|
account,
|
||||||
services,
|
services,
|
||||||
tokenAddress
|
tokenAddress
|
||||||
)
|
)
|
||||||
setStep(5)
|
Logger.log('ddo created', ddo)
|
||||||
|
setStep(4)
|
||||||
|
|
||||||
return ddo
|
return ddo
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user