diff --git a/src/config/ConfigHelper.ts b/src/config/ConfigHelper.ts index e17599d3..cb1eb00a 100644 --- a/src/config/ConfigHelper.ts +++ b/src/config/ConfigHelper.ts @@ -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, diff --git a/src/services/Provider.ts b/src/services/Provider.ts index 96b99260..a468dae0 100644 --- a/src/services/Provider.ts +++ b/src/services/Provider.ts @@ -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 { 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 { 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) diff --git a/test/integration/PublishEditConsume.test.ts b/test/integration/PublishEditConsume.test.ts index 63ebb4ae..194318bb 100644 --- a/test/integration/PublishEditConsume.test.ts +++ b/test/integration/PublishEditConsume.test.ts @@ -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' diff --git a/test/integration/helpers.ts b/test/integration/helpers.ts index 62ad0cdf..611e3844 100644 --- a/test/integration/helpers.ts +++ b/test/integration/helpers.ts @@ -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 +}