diff --git a/src/hooks/usePublish/usePublish.ts b/src/hooks/usePublish/usePublish.ts index 0326ae9..e28d676 100644 --- a/src/hooks/usePublish/usePublish.ts +++ b/src/hooks/usePublish/usePublish.ts @@ -6,32 +6,32 @@ import { Service } from '@oceanprotocol/lib/dist/node/ddo/interfaces/Service' interface UsePublish { - publish: (asset: Metadata,tokensToMint: number, price?: number) => Promise - mint:(did: string, tokenAddress: string, tokensToMint:number)=>void + publish: (asset: Metadata, tokensToMint: number, price?: number) => Promise + mint: (tokenAddress: string, tokensToMint: number) => void } const factory = require('@oceanprotocol/contracts/artifacts/development/Factory.json') const datatokensTemplate = require('@oceanprotocol/contracts/artifacts/development/DataTokenTemplate.json') function usePublish(): UsePublish { - const { web3, ocean, status, account,accountId, config } = useOcean() + const { web3, ocean, status, account, accountId, config } = useOcean() - async function publish(asset: Metadata,tokensToMint: number, price: number = 1): Promise { + async function publish(asset: Metadata, tokensToMint: number, price: number = 1): Promise { if (status !== ProviderStatus.CONNECTED) return - + const datatoken = new DataTokens( ocean.datatokens.factoryAddress, factory.abi, datatokensTemplate.abi, web3 - ) + ) Logger.log('datatoken created', datatoken) const data = { t: 1, url: config.metadataStoreUri } const blob = JSON.stringify(data) const tokenAddress = await datatoken.create(blob, accountId) - Logger.log('tokensto mint',tokensToMint) - + Logger.log('tokensto mint', tokensToMint) + await datatoken.mint(tokenAddress, accountId, tokensToMint) Logger.log('tokenAddress created', tokenAddress) @@ -61,9 +61,43 @@ function usePublish(): UsePublish { return ddo } - // WIP - async function mint(did: string, tokenAddress: string, tokensToMint: number){ - //await datatoken.mint(tokenAddress, accountId, tokensToMint) + + async function mint(tokenAddress: string, tokensToMint: number, datatoken?: DataTokens) { + if (datatoken === undefined) + datatoken = new DataTokens( + ocean.datatokens.factoryAddress, + factory.abi, + datatokensTemplate.abi, + web3 + ) + + await datatoken.mint(tokenAddress, accountId, tokensToMint) + } + + async function giveMarketAllowance(tokenAddress: string, marketAddress: string, tokens: number, datatoken?: DataTokens) { + if (datatoken === undefined) + datatoken = new DataTokens( + ocean.datatokens.factoryAddress, + factory.abi, + datatokensTemplate.abi, + web3 + ) + + await datatoken + .approve( + tokenAddress, + marketAddress, + tokens, + accountId + ) + const allowance = await datatoken.allowance( + tokenAddress, + accountId, + marketAddress + ) + await datatoken + .transferFrom(tokenAddress, accountId, allowance, marketAddress) + } diff --git a/src/providers/OceanProvider/OceanProvider.tsx b/src/providers/OceanProvider/OceanProvider.tsx index 0cae616..a4e0988 100644 --- a/src/providers/OceanProvider/OceanProvider.tsx +++ b/src/providers/OceanProvider/OceanProvider.tsx @@ -2,8 +2,7 @@ import React, { useContext, useState, useEffect, createContext } from 'react' import Web3 from 'web3' import ProviderStatus from './ProviderStatus' import { Ocean, Logger, Account, Config } from '@oceanprotocol/lib' -import Web3Modal, { IProviderOptions, ICoreOptions } from 'web3modal' -import { LogLevel } from '@oceanprotocol/lib/dist/node/utils/Logger' +import Web3Modal, { ICoreOptions } from 'web3modal' const factory = require('@oceanprotocol/contracts/artifacts/development/Factory.json') const datatokensTemplate = require('@oceanprotocol/contracts/artifacts/development/DataTokenTemplate.json')