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

more work on publish edit consume integration test

This commit is contained in:
Bogdan Fazakas 2023-03-22 11:57:04 +02:00
parent 4cac5395b3
commit 904e8485bf
4 changed files with 224 additions and 219 deletions

View File

@ -32,13 +32,13 @@ export const configHelperNetworks: Config[] = [
chainId: 8996,
network: 'development',
// comment th following configs if running on macOS
// metadataCacheUri: 'http://172.15.0.5:5000',
// providerUri: 'http://172.15.0.4:8030',
// subgraphUri: 'https://172.15.0.15:8000'
metadataCacheUri: 'http://172.15.0.5:5000',
providerUri: 'http://172.15.0.4:8030',
subgraphUri: 'https://172.15.0.15:8000'
// uncomment the following configs if running on macOS
metadataCacheUri: 'http://127.0.0.1:5000',
providerUri: 'http://127.0.0.1:8030/',
subgraphUri: 'http://127.0.0.1:9000/'
// metadataCacheUri: 'http://127.0.0.1:5000',
// providerUri: 'http://127.0.0.1:8030/',
// subgraphUri: 'http://127.0.0.1:9000/'
},
{
...configHelperNetworksBase,

View File

@ -18,6 +18,7 @@ import {
Smartcontract,
GraphqlQuery
} from '../@types'
import Web3 from 'web3'
export class Provider {
/**
@ -101,7 +102,7 @@ export class Provider {
public async signProviderRequest(
signer: Signer,
message: string,
password?: string
web3?: Web3
): Promise<string> {
const consumerMessage = ethers.utils.solidityKeccak256(
['bytes'],
@ -115,7 +116,13 @@ export class Provider {
// if (isMetaMask)
// (signer as providers.JsonRpcSigner)._legacySignMessage(consumerMessage)
// else
return await (signer as providers.JsonRpcSigner)._legacySignMessage(consumerMessage)
const oldSignature = await web3.eth.sign(consumerMessage, await signer.getAddress())
console.log('initial signature = ', oldSignature)
const newSignature = await (signer as providers.JsonRpcSigner)._legacySignMessage(
consumerMessage
)
console.log('new signature = ', newSignature)
return newSignature
}
/** Encrypt data using the Provider's own symmetric key
@ -318,7 +325,7 @@ export class Provider {
return results
} catch (e) {
LoggerInstance.error(e)
throw new Error('Asset URL not found or not available.')
throw new Error(`Provider initialize failed url: ${initializeUrl} `)
}
}
@ -383,12 +390,12 @@ export class Provider {
*/
public async getDownloadUrl(
did: string,
accountId: string,
serviceId: string,
fileIndex: number,
transferTxId: string,
providerUri: string,
signer: Signer,
web3: Web3,
userCustomParameters?: UserCustomParameters
): Promise<any> {
const providerEndpoints = await this.getEndpoints(providerUri)
@ -401,13 +408,13 @@ export class Provider {
: null
if (!downloadUrl) return null
const nonce = Date.now()
const signature = await this.signProviderRequest(signer, did + nonce)
const signature = await this.signProviderRequest(signer, did + nonce, web3)
let consumeUrl = downloadUrl
consumeUrl += `?fileIndex=${fileIndex}`
consumeUrl += `&documentId=${did}`
consumeUrl += `&transferTxId=${transferTxId}`
consumeUrl += `&serviceId=${serviceId}`
consumeUrl += `&consumerAddress=${accountId}`
consumeUrl += `&consumerAddress=${await signer.getAddress()}`
consumeUrl += `&nonce=${nonce}`
consumeUrl += `&signature=${signature}`
if (userCustomParameters)

View File

@ -1,6 +1,6 @@
import { assert } from 'chai'
import { ethers, Signer } from 'ethers'
import { getTestConfig, getAddresses, provider } from '../config'
import { getTestConfig, getAddresses, provider, web3 } from '../config'
import {
Config,
ProviderInstance,
@ -12,7 +12,7 @@ import {
amountToUnits
} from '../../src'
import { Files, Smartcontract } from '../../src/@types'
import { createAsset } from './helpers'
import { createAsset, orderAsset } from './helpers'
let config: Config
@ -293,186 +293,185 @@ describe('Publish consume test', async () => {
assert(resolvedGraphqlAssetDdo, 'Cannot fetch graphql DDO from Aquarius')
})
// it('Mint datasets datatokens to publisher', async () => {
// const urlMintTx = await datatoken.mint(
// resolvedUrlAssetDdo.services[0].datatokenAddress,
// publisherAccount,
// '10',
// consumerAccount
// )
// assert(urlMintTx, 'Failed minting url datatoken to consumer.')
it('Mint datasets datatokens to publisher', async () => {
datatoken = new Datatoken(publisherAccount, config.chainId)
const urlMintTx = await datatoken.mint(
resolvedUrlAssetDdo.services[0].datatokenAddress,
await publisherAccount.getAddress(),
'10',
await consumerAccount.getAddress()
)
assert(urlMintTx, 'Failed minting url datatoken to consumer.')
// const arwaveMintTx = await datatoken.mint(
// resolvedArweaveAssetDdo.services[0].datatokenAddress,
// publisherAccount,
// '10',
// consumerAccount
// )
// assert(arwaveMintTx, 'Failed minting arwave datatoken to consumer.')
const arwaveMintTx = await datatoken.mint(
resolvedArweaveAssetDdo.services[0].datatokenAddress,
await publisherAccount.getAddress(),
'10',
await consumerAccount.getAddress()
)
assert(arwaveMintTx, 'Failed minting arwave datatoken to consumer.')
// const ipfsMintTx = await datatoken.mint(
// resolvedIpfsAssetDdo.services[0].datatokenAddress,
// publisherAccount,
// '10',
// consumerAccount
// )
// assert(ipfsMintTx, 'Failed minting ipfs datatoken to consumer.')
const ipfsMintTx = await datatoken.mint(
resolvedIpfsAssetDdo.services[0].datatokenAddress,
await publisherAccount.getAddress(),
'10',
await consumerAccount.getAddress()
)
assert(ipfsMintTx, 'Failed minting ipfs datatoken to consumer.')
// const onchainMintTx = await datatoken.mint(
// resolvedOnchainAssetDdo.services[0].datatokenAddress,
// publisherAccount,
// '10',
// consumerAccount
// )
// assert(onchainMintTx, 'Failed minting onchain datatoken to consumer.')
const onchainMintTx = await datatoken.mint(
resolvedOnchainAssetDdo.services[0].datatokenAddress,
await publisherAccount.getAddress(),
'10',
await consumerAccount.getAddress()
)
assert(onchainMintTx, 'Failed minting onchain datatoken to consumer.')
// const graphqlMintTx = await datatoken.mint(
// resolvedGraphqlAssetDdo.services[0].datatokenAddress,
// publisherAccount,
// '10',
// consumerAccount
// )
// assert(graphqlMintTx, 'Failed minting graphql datatoken to consumer.')
// })
const graphqlMintTx = await datatoken.mint(
resolvedGraphqlAssetDdo.services[0].datatokenAddress,
await publisherAccount.getAddress(),
'10',
await consumerAccount.getAddress()
)
assert(graphqlMintTx, 'Failed minting graphql datatoken to consumer.')
})
// it('Should order the datasets', async () => {
// urlOrderTx = await orderAsset(
// resolvedUrlAssetDdo.id,
// resolvedUrlAssetDdo.services[0].datatokenAddress,
// consumerAccount,
// resolvedUrlAssetDdo.services[0].id,
// 0,
// datatoken,
// providerUrl
// )
// assert(urlOrderTx, 'Ordering url dataset failed.')
it('Should order the datasets', async () => {
datatoken = new Datatoken(consumerAccount, config.chainId)
// arwaveOrderTx = await orderAsset(
// resolvedArweaveAssetDdo.id,
// resolvedArweaveAssetDdo.services[0].datatokenAddress,
// consumerAccount,
// resolvedArweaveAssetDdo.services[0].id,
// 0,
// datatoken,
// providerUrl
// )
// assert(arwaveOrderTx, 'Ordering arwave dataset failed.')
urlOrderTx = await orderAsset(
resolvedUrlAssetDdo.id,
resolvedUrlAssetDdo.services[0].datatokenAddress,
await consumerAccount.getAddress(),
resolvedUrlAssetDdo.services[0].id,
0,
datatoken,
providerUrl
)
assert(urlOrderTx, 'Ordering url dataset failed.')
// onchainOrderTx = await orderAsset(
// resolvedOnchainAssetDdo.id,
// resolvedOnchainAssetDdo.services[0].datatokenAddress,
// consumerAccount,
// resolvedOnchainAssetDdo.services[0].id,
// 0,
// datatoken,
// providerUrl
// )
// assert(onchainOrderTx, 'Ordering onchain dataset failed.')
arwaveOrderTx = await orderAsset(
resolvedArweaveAssetDdo.id,
resolvedArweaveAssetDdo.services[0].datatokenAddress,
await consumerAccount.getAddress(),
resolvedArweaveAssetDdo.services[0].id,
0,
datatoken,
providerUrl
)
assert(arwaveOrderTx, 'Ordering arwave dataset failed.')
// ipfsOrderTx = await orderAsset(
// resolvedIpfsAssetDdo.id,
// resolvedIpfsAssetDdo.services[0].datatokenAddress,
// consumerAccount,
// resolvedIpfsAssetDdo.services[0].id,
// 0,
// datatoken,
// providerUrl
// )
// assert(ipfsOrderTx, 'Ordering ipfs dataset failed.')
onchainOrderTx = await orderAsset(
resolvedOnchainAssetDdo.id,
resolvedOnchainAssetDdo.services[0].datatokenAddress,
await consumerAccount.getAddress(),
resolvedOnchainAssetDdo.services[0].id,
0,
datatoken,
providerUrl
)
assert(onchainOrderTx, 'Ordering onchain dataset failed.')
// grapqlOrderTx = await orderAsset(
// resolvedGraphqlAssetDdo.id,
// resolvedGraphqlAssetDdo.services[0].datatokenAddress,
// consumerAccount,
// resolvedGraphqlAssetDdo.services[0].id,
// 0,
// datatoken,
// providerUrl
// )
// assert(grapqlOrderTx, 'Ordering graphql dataset failed.')
// })
ipfsOrderTx = await orderAsset(
resolvedIpfsAssetDdo.id,
resolvedIpfsAssetDdo.services[0].datatokenAddress,
await consumerAccount.getAddress(),
resolvedIpfsAssetDdo.services[0].id,
0,
datatoken,
providerUrl
)
assert(ipfsOrderTx, 'Ordering ipfs dataset failed.')
// it('Should download the datasets files', async () => {
// const urlDownloadUrl = await ProviderInstance.getDownloadUrl(
// resolvedUrlAssetDdo.id,
// consumerAccount,
// resolvedUrlAssetDdo.services[0].id,
// 0,
// urlOrderTx.transactionHash,
// providerUrl,
// web3
// )
// assert(urlDownloadUrl, 'Provider getDownloadUrl failed for url dataset')
// try {
// await downloadFile(urlDownloadUrl)
// } catch (e) {
// assert.fail(`Download url dataset failed: ${e}`)
// }
grapqlOrderTx = await orderAsset(
resolvedGraphqlAssetDdo.id,
resolvedGraphqlAssetDdo.services[0].datatokenAddress,
await consumerAccount.getAddress(),
resolvedGraphqlAssetDdo.services[0].id,
0,
datatoken,
providerUrl
)
assert(grapqlOrderTx, 'Ordering graphql dataset failed.')
})
// const arwaveDownloadURL = await ProviderInstance.getDownloadUrl(
// resolvedArweaveAssetDdo.id,
// consumerAccount,
// resolvedArweaveAssetDdo.services[0].id,
// 0,
// arwaveOrderTx.transactionHash,
// providerUrl,
// web3
// )
// assert(arwaveDownloadURL, 'Provider getDownloadUrl failed for arwave dataset')
// try {
// await downloadFile(arwaveDownloadURL)
// } catch (e) {
// assert.fail(`Download arwave dataset failed: ${e}`)
// }
it('Should download the datasets files', async () => {
const urlDownloadUrl = await ProviderInstance.getDownloadUrl(
resolvedUrlAssetDdo.id,
resolvedUrlAssetDdo.services[0].id,
0,
urlOrderTx.transactionHash,
providerUrl,
consumerAccount,
web3
)
assert(urlDownloadUrl, 'Provider getDownloadUrl failed for url dataset')
try {
await downloadFile(urlDownloadUrl)
} catch (e) {
assert.fail(`Download url dataset failed: ${e}`)
}
// const ipfsDownloadURL = await ProviderInstance.getDownloadUrl(
// resolvedIpfsAssetDdo.id,
// consumerAccount,
// resolvedIpfsAssetDdo.services[0].id,
// 0,
// ipfsOrderTx.transactionHash,
// providerUrl,
// web3
// )
// assert(ipfsDownloadURL, 'Provider getDownloadUrl failed for ipfs dataset')
// try {
// await downloadFile(ipfsDownloadURL)
// } catch (e) {
// assert.fail(`Download ipfs dataset failed ${e}`)
// }
// const arwaveDownloadURL = await ProviderInstance.getDownloadUrl(
// resolvedArweaveAssetDdo.id,
// resolvedArweaveAssetDdo.services[0].id,
// 0,
// arwaveOrderTx.transactionHash,
// providerUrl,
// consumerAccount
// )
// assert(arwaveDownloadURL, 'Provider getDownloadUrl failed for arwave dataset')
// try {
// await downloadFile(arwaveDownloadURL)
// } catch (e) {
// assert.fail(`Download arwave dataset failed: ${e}`)
// }
// const onchainDownloadURL = await ProviderInstance.getDownloadUrl(
// resolvedOnchainAssetDdo.id,
// consumerAccount,
// resolvedOnchainAssetDdo.services[0].id,
// 0,
// onchainOrderTx.transactionHash,
// providerUrl,
// web3
// )
// assert(onchainDownloadURL, 'Provider getDownloadUrl failed for onchain dataset')
// try {
// await downloadFile(onchainDownloadURL)
// } catch (e) {
// assert.fail(`Download onchain dataset failed ${e}`)
// }
// const ipfsDownloadURL = await ProviderInstance.getDownloadUrl(
// resolvedIpfsAssetDdo.id,
// resolvedIpfsAssetDdo.services[0].id,
// 0,
// ipfsOrderTx.transactionHash,
// providerUrl,
// consumerAccount
// )
// assert(ipfsDownloadURL, 'Provider getDownloadUrl failed for ipfs dataset')
// try {
// await downloadFile(ipfsDownloadURL)
// } catch (e) {
// assert.fail(`Download ipfs dataset failed ${e}`)
// }
// const graphqlDownloadURL = await ProviderInstance.getDownloadUrl(
// resolvedGraphqlAssetDdo.id,
// consumerAccount,
// resolvedGraphqlAssetDdo.services[0].id,
// 0,
// grapqlOrderTx.transactionHash,
// providerUrl,
// web3
// )
// assert(graphqlDownloadURL, 'Provider getDownloadUrl failed for graphql dataset')
// try {
// await downloadFile(graphqlDownloadURL)
// } catch (e) {
// assert.fail(`Download graphql dataset failed ${e}`)
// }
// })
// const onchainDownloadURL = await ProviderInstance.getDownloadUrl(
// resolvedOnchainAssetDdo.id,
// resolvedOnchainAssetDdo.services[0].id,
// 0,
// onchainOrderTx.transactionHash,
// providerUrl,
// consumerAccount
// )
// assert(onchainDownloadURL, 'Provider getDownloadUrl failed for onchain dataset')
// try {
// await downloadFile(onchainDownloadURL)
// } catch (e) {
// assert.fail(`Download onchain dataset failed ${e}`)
// }
// const graphqlDownloadURL = await ProviderInstance.getDownloadUrl(
// resolvedGraphqlAssetDdo.id,
// resolvedGraphqlAssetDdo.services[0].id,
// 0,
// grapqlOrderTx.transactionHash,
// providerUrl,
// consumerAccount
// )
// assert(graphqlDownloadURL, 'Provider getDownloadUrl failed for graphql dataset')
// try {
// await downloadFile(graphqlDownloadURL)
// } catch (e) {
// assert.fail(`Download graphql dataset failed ${e}`)
// }
})
// it('Should update datasets metadata', async () => {
// resolvedUrlAssetDdo.metadata.name = 'updated url asset name'

View File

@ -67,7 +67,7 @@ export async function createAsset(
const datatokenAddressAsset = tokenCreatedEvent.args.newTokenAddress
// create the files encrypted string
assetUrl.datatokenAddress = datatokenAddressAsset
assetUrl.nftAddress = ddo.nftAddress
assetUrl.nftAddress = nftAddress
ddo.services[0].files = await ProviderInstance.encrypt(assetUrl, chain, providerUrl)
ddo.services[0].datatokenAddress = datatokenAddressAsset
ddo.services[0].serviceEndpoint = 'http://172.15.0.4:8030' // put back proviederUrl
@ -83,7 +83,7 @@ export async function createAsset(
0,
'http://172.15.0.4:8030', // put back proviederUrl
'123',
'0x02',
ethers.utils.hexlify(2),
encryptedResponse,
validateResult.hash
)
@ -163,43 +163,42 @@ export async function createAsset(
// return tx.transactionHash
// }
// export async function orderAsset(
// did: string,
// datatokenAddress: string,
// consumerAccount: string,
// serviceId: string,
// serviceIndex: number,
// datatoken: Datatoken,
// providerUrl: string
// ) {
// const initializeData = await ProviderInstance.initialize(
// did, // resolvedDdoAfterUpdate.id,
// serviceId, // resolvedDdoAfterUpdate.services[0].id,
// serviceIndex,
// consumerAccount,
// providerUrl
// )
export async function orderAsset(
did: string,
datatokenAddress: string,
consumerAccount: string,
serviceId: string,
serviceIndex: number,
datatoken: Datatoken,
providerUrl: string
) {
const initializeData = await ProviderInstance.initialize(
did,
serviceId,
serviceIndex,
consumerAccount,
providerUrl
)
// console.log(`initializeData fees for did:${did} == ${initializeData.providerFee}`)
console.log('intialized', initializeData)
// const providerFees: ProviderFees = {
// providerFeeAddress: initializeData.providerFee.providerFeeAddress,
// providerFeeToken: initializeData.providerFee.providerFeeToken,
// providerFeeAmount: initializeData.providerFee.providerFeeAmount,
// v: initializeData.providerFee.v,
// r: initializeData.providerFee.r,
// s: initializeData.providerFee.s,
// providerData: initializeData.providerFee.providerData,
// validUntil: initializeData.providerFee.validUntil
// }
const providerFees: ProviderFees = {
providerFeeAddress: initializeData.providerFee.providerFeeAddress,
providerFeeToken: initializeData.providerFee.providerFeeToken,
providerFeeAmount: initializeData.providerFee.providerFeeAmount,
v: initializeData.providerFee.v,
r: initializeData.providerFee.r,
s: initializeData.providerFee.s,
providerData: initializeData.providerFee.providerData,
validUntil: initializeData.providerFee.validUntil
}
// // make the payment
// const orderTx = await datatoken.startOrder(
// datatokenAddress, // resolvedDdoAfterUpdate.services[0].datatokenAddress,
// consumerAccount,
// consumerAccount,
// 0,
// providerFees
// )
// return orderTx
// }
// make the payment
const orderTx = await datatoken.startOrder(
datatokenAddress,
consumerAccount,
0,
providerFees
)
return orderTx
}