mirror of
https://github.com/oceanprotocol/ocean.js.git
synced 2024-11-26 20:39:05 +01:00
Updating CodeExamples.md
This commit is contained in:
parent
2ade8e7423
commit
7ced17f2fa
560
CodeExamples.md
560
CodeExamples.md
@ -1,91 +1,91 @@
|
|||||||
/// # Ocean.js Code Examples
|
# Ocean.js Code Examples
|
||||||
|
|
||||||
/// ## Introduction
|
## Introduction
|
||||||
|
|
||||||
/// The following guide runs you through the process of using ocean.js to publish and then consume a dataset. The code examples below are all working and you can learn how to publish by following along.
|
The following guide runs you through the process of using ocean.js to publish and then consume a dataset. The code examples below are all working and you can learn how to publish by following along.
|
||||||
/// The process involves creating a Data NFT (which represents the base-IP on-chain) and a datatoken (which will be used to purchase the dataset). This guide provides all the code you need and no prior knowledge is required. It is helpful if you have some experience with javascript but it is not necessary.
|
The process involves creating a Data NFT (which represents the base-IP on-chain) and a datatoken (which will be used to purchase the dataset). This guide provides all the code you need and no prior knowledge is required. It is helpful if you have some experience with javascript but it is not necessary.
|
||||||
|
|
||||||
/// Selling your data over the blockchain puts you in charge of how it is used and can be a great source of passive income. There are many AI startups that have deep expertise in machine learning but need more data to improve their models. Selling your data via the blockchain gives you a level of security that you would be unable to achieve if you were selling via a centralised marketplace.
|
Selling your data over the blockchain puts you in charge of how it is used and can be a great source of passive income. There are many AI startups that have deep expertise in machine learning but need more data to improve their models. Selling your data via the blockchain gives you a level of security that you would be unable to achieve if you were selling via a centralised marketplace.
|
||||||
|
|
||||||
/// In this guide we'll be making use of the Ocean.js library. Ocean Protocol provides you with everything you need to quickly get setup and start selling data over the blockchain.
|
In this guide we'll be making use of the Ocean.js library. Ocean Protocol provides you with everything you need to quickly get setup and start selling data over the blockchain.
|
||||||
|
|
||||||
/// These examples take you through a typical user journey that focuses on the experience of a publisher, and a buyer / consumer.
|
These examples take you through a typical user journey that focuses on the experience of a publisher, and a buyer / consumer.
|
||||||
|
|
||||||
/// If you have any questions or issues at any point while following along to this article please reach out to us on [discord](https://discord.gg/TnXjkR5).
|
If you have any questions or issues at any point while following along to this article please reach out to us on [discord](https://discord.gg/TnXjkR5).
|
||||||
|
|
||||||
/// Here are the steps we will be following throughout the article:
|
Here are the steps we will be following throughout the article:
|
||||||
|
|
||||||
/// Here are the steps:
|
Here are the steps:
|
||||||
|
|
||||||
/// 0. [Prerequisites](#-Prerequisites)
|
0. [Prerequisites](#-Prerequisites)
|
||||||
/// 1. [Initialize services](#-initialize-services)
|
1. [Initialize services](#-initialize-services)
|
||||||
/// 2. [Create a new node.js project](#-create-a-new-node.js-project)
|
2. [Create a new node.js project](#-create-a-new-node.js-project)
|
||||||
/// 3. [Install dependencies](#-install-dependencies)
|
3. [Install dependencies](#-install-dependencies)
|
||||||
/// 4. [Initialize accounts and deploy contracts](#-initialize-accounts-and-deploy-contracts)
|
4. [Initialize accounts and deploy contracts](#-initialize-accounts-and-deploy-contracts)
|
||||||
/// 5. [Import dependencies and add variables and constants](#-import-dependencies-and-add-variables-and-constants)
|
5. [Import dependencies and add variables and constants](#-import-dependencies-and-add-variables-and-constants)
|
||||||
/// 6. [Publish Data NFT and a Datatoken with a liquidity pool](#-Publish-data-nft-and-a-datatoken-with-a-liquidity-pool)
|
6. [Publish Data NFT and a Datatoken with a liquidity pool](#-Publish-data-nft-and-a-datatoken-with-a-liquidity-pool)
|
||||||
/// 7. [Publish Data NFT and a Datatoken with a fixed rate exchange](#-publish-data-nft-and-a-datatoken-with-a-fixed-rate-exchange)
|
7. [Publish Data NFT and a Datatoken with a fixed rate exchange](#-publish-data-nft-and-a-datatoken-with-a-fixed-rate-exchange)
|
||||||
/// 8. [Publish Data NFT and a Datatoken with a dispenser](#-publish-data-nft-and-a-datatoken-with-a-dispenser)
|
8. [Publish Data NFT and a Datatoken with a dispenser](#-publish-data-nft-and-a-datatoken-with-a-dispenser)
|
||||||
|
|
||||||
/// ## 0. Prerequisites
|
## 0. Prerequisites
|
||||||
/// Before we start it is important that you have all of the necessary prerequisites installed on your computer.
|
Before we start it is important that you have all of the necessary prerequisites installed on your computer.
|
||||||
/// - **A Unix based operating system (Linux or Mac)**. If you are a Windows user you can try to run linux inside a virtual machine but this is outside of the scope of this article.
|
- **A Unix based operating system (Linux or Mac)**. If you are a Windows user you can try to run linux inside a virtual machine but this is outside of the scope of this article.
|
||||||
/// - **Git**. Instructions for installing Git can be found here: https://git-scm.com/book/en/v2/Getting-Started-Installing-Git
|
- **Git**. Instructions for installing Git can be found here: https://git-scm.com/book/en/v2/Getting-Started-Installing-Git
|
||||||
/// - **Node.js** can be downloaded from here: https://nodejs.org/en/download/
|
- **Node.js** can be downloaded from here: https://nodejs.org/en/download/
|
||||||
/// - **Docker** can be installed from here: https://docs.docker.com/get-docker/. Please note that Docker must run as a non-root user, you can set this up by following these instructions: https://docs.docker.com/engine/install/linux-postinstall/
|
- **Docker** can be installed from here: https://docs.docker.com/get-docker/. Please note that Docker must run as a non-root user, you can set this up by following these instructions: https://docs.docker.com/engine/install/linux-postinstall/
|
||||||
|
|
||||||
/// ## 1. Initialize services
|
## 1. Initialize services
|
||||||
|
|
||||||
/// Ocean.js uses off-chain services for metadata (Aquarius) and consuming datasets (Provider).
|
Ocean.js uses off-chain services for metadata (Aquarius) and consuming datasets (Provider).
|
||||||
|
|
||||||
/// We start by initializing the services. To do this, we clone the Barge repository and run it. This will run the current default versions of [Aquarius](https://github.com/oceanprotocol/aquarius), [Provider](https://github.com/oceanprotocol/provider), and [Ganache](https://github.com/trufflesuite/ganache) with [our contracts](https://github.com/oceanprotocol/contracts) deployed to it.
|
We start by initializing the services. To do this, we clone the Barge repository and run it. This will run the current default versions of [Aquarius](https://github.com/oceanprotocol/aquarius), [Provider](https://github.com/oceanprotocol/provider), and [Ganache](https://github.com/trufflesuite/ganache) with [our contracts](https://github.com/oceanprotocol/contracts) deployed to it.
|
||||||
|
|
||||||
/// ```bash
|
```bash
|
||||||
/// git clone https://github.com/oceanprotocol/barge.git
|
git clone https://github.com/oceanprotocol/barge.git
|
||||||
/// cd barge/
|
cd barge/
|
||||||
/// ./start_ocean.sh --with-provider2 --no-dashboard
|
./start_ocean.sh --with-provider2 --no-dashboard
|
||||||
/// ```
|
```
|
||||||
|
|
||||||
/// ## 2. Create a new node.js project
|
## 2. Create a new node.js project
|
||||||
|
|
||||||
/// Start by creating a new Node.js project. Open a new terminal and enter the following commands:
|
Start by creating a new Node.js project. Open a new terminal and enter the following commands:
|
||||||
|
|
||||||
/// ```bash
|
```bash
|
||||||
/// mkdir marketplace-quickstart
|
mkdir marketplace-quickstart
|
||||||
/// cd marketplace-quickstart
|
cd marketplace-quickstart
|
||||||
/// npm init
|
npm init
|
||||||
/// # Answer the questions in the command line prompt
|
# Answer the questions in the command line prompt
|
||||||
/// cat > marketplace.js
|
cat > marketplace.js
|
||||||
/// # On linux press CTRL + D to save
|
# On linux press CTRL + D to save
|
||||||
/// ```
|
```
|
||||||
|
|
||||||
/// ## 3. Install dependancies
|
## 3. Install dependancies
|
||||||
|
|
||||||
/// Open the package.json file in a text editor and update the dependancies to include the following:
|
Open the package.json file in a text editor and update the dependancies to include the following:
|
||||||
|
|
||||||
/// ```JSON
|
```JSON
|
||||||
/// "dependencies": {
|
"dependencies": {
|
||||||
/// "@oceanprotocol/contracts": "1.0.0-alpha.28",
|
"@oceanprotocol/contracts": "1.0.0-alpha.28",
|
||||||
/// "@oceanprotocol/lib": "1.0.0-next.37",
|
"@oceanprotocol/lib": "1.0.0-next.37",
|
||||||
/// "crypto-js": "^4.1.1",
|
"crypto-js": "^4.1.1",
|
||||||
/// "web3": "^1.7.3"
|
"web3": "^1.7.3"
|
||||||
/// }
|
}
|
||||||
/// ```
|
```
|
||||||
|
|
||||||
/// Now in your terminal run the following command:
|
Now in your terminal run the following command:
|
||||||
|
|
||||||
/// ```bash
|
```bash
|
||||||
/// npm install
|
npm install
|
||||||
/// ```
|
```
|
||||||
|
|
||||||
/// ## 4. Import dependencies and add variables and constants
|
## 4. Import dependencies and add variables and constants
|
||||||
|
|
||||||
/// Now open the `marketplace.js` file in your text editor.
|
Now open the `marketplace.js` file in your text editor.
|
||||||
|
|
||||||
/// Start by importing all of the necessary dependencies
|
Start by importing all of the necessary dependencies
|
||||||
|
|
||||||
|
```Typescript
|
||||||
|
|
||||||
/// ```Typescript
|
|
||||||
import { assert } from 'chai'
|
|
||||||
import { SHA256 } from 'crypto-js'
|
import { SHA256 } from 'crypto-js'
|
||||||
import {
|
import {
|
||||||
AmountsOutMaxFee,
|
AmountsOutMaxFee,
|
||||||
@ -113,15 +113,15 @@ import {
|
|||||||
ZERO_ADDRESS
|
ZERO_ADDRESS
|
||||||
} from '../../src'
|
} from '../../src'
|
||||||
import { getAddresses, getTestConfig, web3 } from '../config'
|
import { getAddresses, getTestConfig, web3 } from '../config'
|
||||||
/// ```
|
```
|
||||||
|
|
||||||
/// <!--
|
<!--
|
||||||
describe('Marketplace flow tests', async () => {
|
describe('Marketplace flow tests
|
||||||
/// -->
|
-->
|
||||||
|
|
||||||
/// Now we define the variables which we will need later
|
Now we define the variables which we will need later
|
||||||
|
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
let config: Config
|
let config: Config
|
||||||
let aquarius: Aquarius
|
let aquarius: Aquarius
|
||||||
let providerUrl: any
|
let providerUrl: any
|
||||||
@ -139,20 +139,20 @@ describe('Marketplace flow tests', async () => {
|
|||||||
let dispenserNftAddress: string
|
let dispenserNftAddress: string
|
||||||
let dispenserDatatokenAddress: string
|
let dispenserDatatokenAddress: string
|
||||||
let dispenserAddress: string
|
let dispenserAddress: string
|
||||||
/// ```
|
```
|
||||||
|
|
||||||
/// We also define some constants that we will use:
|
We also define some constants that we will use:
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
const POOL_NFT_NAME = 'Datatoken 1'
|
const POOL_NFT_NAME = 'Datatoken 1'
|
||||||
const POOL_NFT_SYMBOL = 'DT1'
|
const POOL_NFT_SYMBOL = 'DT1'
|
||||||
const FRE_NFT_NAME = 'Datatoken 2'
|
const FRE_NFT_NAME = 'Datatoken 2'
|
||||||
const FRE_NFT_SYMBOL = 'DT2'
|
const FRE_NFT_SYMBOL = 'DT2'
|
||||||
const DISP_NFT_NAME = 'Datatoken 3'
|
const DISP_NFT_NAME = 'Datatoken 3'
|
||||||
const DISP_NFT_SYMBOL = 'DT3'
|
const DISP_NFT_SYMBOL = 'DT3'
|
||||||
/// ```
|
```
|
||||||
|
|
||||||
/// We will need a file to publish, so here we define the file that we intend to publish.
|
We will need a file to publish, so here we define the file that we intend to publish.
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
const ASSET_URL = [
|
const ASSET_URL = [
|
||||||
{
|
{
|
||||||
type: 'url',
|
type: 'url',
|
||||||
@ -160,10 +160,10 @@ describe('Marketplace flow tests', async () => {
|
|||||||
method: 'GET'
|
method: 'GET'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
/// ```
|
```
|
||||||
|
|
||||||
/// Next, we define the metadata that will describe our data asset. This is what we call the DDO
|
Next, we define the metadata that will describe our data asset. This is what we call the DDO
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
const DDO = {
|
const DDO = {
|
||||||
'@context': ['https://w3id.org/did/v1'],
|
'@context': ['https://w3id.org/did/v1'],
|
||||||
id: '',
|
id: '',
|
||||||
@ -190,57 +190,57 @@ describe('Marketplace flow tests', async () => {
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
/// ```
|
```
|
||||||
|
|
||||||
/// We load the configuration:
|
We load the configuration:
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
before(async () => {
|
|
||||||
config = await getTestConfig(web3)
|
config = await getTestConfig(web3)
|
||||||
aquarius = new Aquarius(config.metadataCacheUri)
|
aquarius = new Aquarius(config.metadataCacheUri)
|
||||||
providerUrl = config.providerUri
|
providerUrl = config.providerUri
|
||||||
/// ```
|
```
|
||||||
/// As we go along it's a good idea to console log the values so that you check they are right
|
As we go along it's a good idea to console log the values so that you check they are right
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
console.log(`Aquarius URL: ${config.metadataCacheUri}`)
|
console.log(`Aquarius URL: ${config.metadataCacheUri}`)
|
||||||
console.log(`Provider URL: ${providerUrl}`)
|
console.log(`Provider URL: ${providerUrl}`)
|
||||||
}) ///
|
|
||||||
/// ```
|
```
|
||||||
|
|
||||||
/// ## 5. Initialize accounts and deploy contracts
|
## 5. Initialize accounts and deploy contracts
|
||||||
it('5.1 Initialize accounts', async () => {
|
### 5.1 Initialize accounts
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
const accounts = await web3.eth.getAccounts()
|
const accounts = await web3.eth.getAccounts()
|
||||||
publisherAccount = accounts[0]
|
publisherAccount = accounts[0]
|
||||||
consumerAccount = accounts[1]
|
consumerAccount = accounts[1]
|
||||||
stakerAccount = accounts[2]
|
stakerAccount = accounts[2]
|
||||||
/// ```
|
```
|
||||||
/// Again, lets console log the values so that we can check that they have been saved properly
|
Again, lets console log the values so that we can check that they have been saved properly
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
console.log(`Publisher account address: ${publisherAccount}`)
|
console.log(`Publisher account address: ${publisherAccount}`)
|
||||||
console.log(`Consumer account address: ${consumerAccount}`)
|
console.log(`Consumer account address: ${consumerAccount}`)
|
||||||
console.log(`Staker account address: ${stakerAccount}`)
|
console.log(`Staker account address: ${stakerAccount}`)
|
||||||
}) ///
|
|
||||||
/// ```
|
```
|
||||||
|
|
||||||
it('5.2 Next, lets get the address of the deployed contracts', async () => {
|
### 5.2 Next, lets get the address of the deployed contracts
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
addresses = getAddresses()
|
addresses = getAddresses()
|
||||||
}) ///
|
|
||||||
/// ```
|
```
|
||||||
|
|
||||||
it('5.3 We send some OCEAN to consumer and staker accounts', async () => {
|
### 5.3 We send some OCEAN to consumer and staker accounts
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
transfer(web3, publisherAccount, addresses.Ocean, consumerAccount, '100')
|
transfer(web3, publisherAccount, addresses.Ocean, consumerAccount, '100')
|
||||||
transfer(web3, publisherAccount, addresses.Ocean, stakerAccount, '100')
|
transfer(web3, publisherAccount, addresses.Ocean, stakerAccount, '100')
|
||||||
}) ///
|
|
||||||
/// ```
|
```
|
||||||
|
|
||||||
/// ## 6. Publish Data NFT and a Datatoken with a liquidity pool
|
## 6. Publish Data NFT and a Datatoken with a liquidity pool
|
||||||
|
|
||||||
/// For pool creation, the OCEAN token is used as the base token. The base token can be changed into something else, such as USDC, DAI etc., but it will require an extra fee.
|
For pool creation, the OCEAN token is used as the base token. The base token can be changed into something else, such as USDC, DAI etc., but it will require an extra fee.
|
||||||
|
|
||||||
it('6.1 Publish a dataset (create NFT + Datatoken) with a liquidity pool', async () => {
|
### 6.1 Publish a dataset (create NFT + Datatoken) with a liquidity pool
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
const factory = new NftFactory(addresses.ERC721Factory, web3)
|
const factory = new NftFactory(addresses.ERC721Factory, web3)
|
||||||
|
|
||||||
const nftParams: NftCreateData = {
|
const nftParams: NftCreateData = {
|
||||||
@ -277,9 +277,9 @@ describe('Marketplace flow tests', async () => {
|
|||||||
swapFeeLiquidityProvider: '0.001',
|
swapFeeLiquidityProvider: '0.001',
|
||||||
swapFeeMarketRunner: '0.001'
|
swapFeeMarketRunner: '0.001'
|
||||||
}
|
}
|
||||||
/// ```
|
```
|
||||||
/// Before we call the contract we have to call `approve` so that the contract can move our tokens. This is standard when using any ERC20 Datatokens
|
Before we call the contract we have to call `approve` so that the contract can move our tokens. This is standard when using any ERC20 Datatokens
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
await approve(
|
await approve(
|
||||||
web3,
|
web3,
|
||||||
publisherAccount,
|
publisherAccount,
|
||||||
@ -288,9 +288,9 @@ describe('Marketplace flow tests', async () => {
|
|||||||
poolParams.vestingAmount
|
poolParams.vestingAmount
|
||||||
)
|
)
|
||||||
|
|
||||||
/// ```
|
```
|
||||||
/// Now we can make the contract call
|
Now we can make the contract call
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
const tx = await factory.createNftWithDatatokenWithPool(
|
const tx = await factory.createNftWithDatatokenWithPool(
|
||||||
publisherAccount,
|
publisherAccount,
|
||||||
nftParams,
|
nftParams,
|
||||||
@ -301,35 +301,35 @@ describe('Marketplace flow tests', async () => {
|
|||||||
poolNftAddress = tx.events.NFTCreated.returnValues[0]
|
poolNftAddress = tx.events.NFTCreated.returnValues[0]
|
||||||
poolDatatokenAddress = tx.events.TokenCreated.returnValues[0]
|
poolDatatokenAddress = tx.events.TokenCreated.returnValues[0]
|
||||||
poolAddress = tx.events.NewPool.returnValues[0]
|
poolAddress = tx.events.NewPool.returnValues[0]
|
||||||
/// ```
|
```
|
||||||
/// Now, we did quite a few things there. Let's check that we successfully published a dataset (create NFT + Datatoken) with a liquidity pool
|
Now, we did quite a few things there. Let's check that we successfully published a dataset (create NFT + Datatoken) with a liquidity pool
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
console.log(`Pool NFT address: ${poolNftAddress}`)
|
console.log(`Pool NFT address: ${poolNftAddress}`)
|
||||||
console.log(`Pool Datatoken address: ${poolDatatokenAddress}`)
|
console.log(`Pool Datatoken address: ${poolDatatokenAddress}`)
|
||||||
console.log(`Pool address: ${poolAddress}`)
|
console.log(`Pool address: ${poolAddress}`)
|
||||||
}) ///
|
|
||||||
/// ```
|
```
|
||||||
|
|
||||||
it('6.2 Set metadata in the pool NFT', async () => {
|
### 6.2 Set metadata in the pool NFT
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
const nft = new Nft(web3)
|
const nft = new Nft(web3)
|
||||||
/// ```
|
```
|
||||||
/// Now we update the ddo and set the right did
|
Now we update the ddo and set the right did
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
DDO.chainId = await web3.eth.getChainId()
|
DDO.chainId = await web3.eth.getChainId()
|
||||||
DDO.id =
|
DDO.id =
|
||||||
'did:op:' +
|
'did:op:' +
|
||||||
SHA256(web3.utils.toChecksumAddress(poolNftAddress) + DDO.chainId.toString(10))
|
SHA256(web3.utils.toChecksumAddress(poolNftAddress) + DDO.chainId.toString(10))
|
||||||
DDO.nftAddress = poolNftAddress
|
DDO.nftAddress = poolNftAddress
|
||||||
/// ```
|
```
|
||||||
/// Next we encrypt the file or files using Ocean Provider. The provider is an off chain proxy built specifically for this task
|
Next we encrypt the file or files using Ocean Provider. The provider is an off chain proxy built specifically for this task
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
const encryptedFiles = await ProviderInstance.encrypt(ASSET_URL, providerUrl)
|
const encryptedFiles = await ProviderInstance.encrypt(ASSET_URL, providerUrl)
|
||||||
DDO.services[0].files = await encryptedFiles
|
DDO.services[0].files = await encryptedFiles
|
||||||
DDO.services[0].datatokenAddress = poolDatatokenAddress
|
DDO.services[0].datatokenAddress = poolDatatokenAddress
|
||||||
/// ```
|
```
|
||||||
/// Now let's console log the result to check everything is working
|
Now let's console log the result to check everything is working
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
console.log(`DID: ${DDO.id}`)
|
console.log(`DID: ${DDO.id}`)
|
||||||
|
|
||||||
const providerResponse = await ProviderInstance.encrypt(DDO, providerUrl)
|
const providerResponse = await ProviderInstance.encrypt(DDO, providerUrl)
|
||||||
@ -345,27 +345,27 @@ describe('Marketplace flow tests', async () => {
|
|||||||
encryptedDDO,
|
encryptedDDO,
|
||||||
'0x' + metadataHash
|
'0x' + metadataHash
|
||||||
)
|
)
|
||||||
}) ///
|
|
||||||
/// ```
|
```
|
||||||
|
|
||||||
it('6.3 User should add liquidity to the pool, receiving LP tokens', async () => {
|
### 6.3 User should add liquidity to the pool, receiving LP tokens
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
const pool = new Pool(web3)
|
const pool = new Pool(web3)
|
||||||
|
|
||||||
/// ```
|
```
|
||||||
/// Before we call the contract we have to call `approve` so that the contract can move our tokens. This is standard when using any ERC20 Datatokens
|
Before we call the contract we have to call `approve` so that the contract can move our tokens. This is standard when using any ERC20 Datatokens
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
await approve(web3, stakerAccount, addresses.Ocean, poolAddress, '5', true)
|
await approve(web3, stakerAccount, addresses.Ocean, poolAddress, '5', true)
|
||||||
|
|
||||||
/// ```
|
```
|
||||||
/// Now we can make the contract call
|
Now we can make the contract call
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
await pool.joinswapExternAmountIn(stakerAccount, poolAddress, '5', '0.1')
|
await pool.joinswapExternAmountIn(stakerAccount, poolAddress, '5', '0.1')
|
||||||
}) ///
|
|
||||||
/// ```
|
```
|
||||||
|
|
||||||
it('6.4 Marketplace displays pool asset for sale', async () => {
|
### 6.4 Marketplace displays pool asset for sale
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
const pool = new Pool(web3)
|
const pool = new Pool(web3)
|
||||||
const prices = await pool.getAmountInExactOut(
|
const prices = await pool.getAmountInExactOut(
|
||||||
poolAddress,
|
poolAddress,
|
||||||
@ -374,36 +374,36 @@ describe('Marketplace flow tests', async () => {
|
|||||||
'1',
|
'1',
|
||||||
'0.01'
|
'0.01'
|
||||||
)
|
)
|
||||||
/// ```
|
```
|
||||||
/// Now let's console log the result to check everything is working
|
Now let's console log the result to check everything is working
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
console.log(`Price of 1 ${POOL_NFT_SYMBOL} is ${prices.tokenAmount} OCEAN`)
|
console.log(`Price of 1 ${POOL_NFT_SYMBOL} is ${prices.tokenAmount} OCEAN`)
|
||||||
}) ///
|
|
||||||
/// ```
|
```
|
||||||
|
|
||||||
it('6.5 Consumer buys a pool data asset, and downloads it', async () => {
|
### 6.5 Consumer buys a pool data asset, and downloads it
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
const datatoken = new Datatoken(web3)
|
const datatoken = new Datatoken(web3)
|
||||||
|
|
||||||
const consumerETHBalance = await web3.eth.getBalance(consumerAccount)
|
const consumerETHBalance = await web3.eth.getBalance(consumerAccount)
|
||||||
/// ```
|
```
|
||||||
/// Now let's console log the result to check everything is working
|
Now let's console log the result to check everything is working
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
console.log(`Consumer ETH balance: ${consumerETHBalance}`)
|
console.log(`Consumer ETH balance: ${consumerETHBalance}`)
|
||||||
let consumerOCEANBalance = await balance(web3, addresses.Ocean, consumerAccount)
|
let consumerOCEANBalance = await balance(web3, addresses.Ocean, consumerAccount)
|
||||||
/// ```
|
```
|
||||||
/// Now let's console log consumerOCEANBalance to check everything is working
|
Now let's console log consumerOCEANBalance to check everything is working
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
console.log(`Consumer OCEAN balance before swap: ${consumerOCEANBalance}`)
|
console.log(`Consumer OCEAN balance before swap: ${consumerOCEANBalance}`)
|
||||||
let consumerDTBalance = await balance(web3, poolDatatokenAddress, consumerAccount)
|
let consumerDTBalance = await balance(web3, poolDatatokenAddress, consumerAccount)
|
||||||
/// ```
|
```
|
||||||
/// Now let's console log POOL_NFT_SYMBOL and consumerDTBalance to check everything is working
|
Now let's console log POOL_NFT_SYMBOL and consumerDTBalance to check everything is working
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
console.log(`Consumer ${POOL_NFT_SYMBOL} balance before swap: ${consumerDTBalance}`)
|
console.log(`Consumer ${POOL_NFT_SYMBOL} balance before swap: ${consumerDTBalance}`)
|
||||||
|
|
||||||
/// ```
|
```
|
||||||
/// Before we call the contract we have to call `approve` so that the contract can move our tokens. This is standard when using any ERC20 Datatokens
|
Before we call the contract we have to call `approve` so that the contract can move our tokens. This is standard when using any ERC20 Datatokens
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
await approve(web3, consumerAccount, addresses.Ocean, poolAddress, '100')
|
await approve(web3, consumerAccount, addresses.Ocean, poolAddress, '100')
|
||||||
|
|
||||||
const pool = new Pool(web3)
|
const pool = new Pool(web3)
|
||||||
@ -418,9 +418,9 @@ describe('Marketplace flow tests', async () => {
|
|||||||
swapMarketFee: '0.1'
|
swapMarketFee: '0.1'
|
||||||
}
|
}
|
||||||
|
|
||||||
/// ```
|
```
|
||||||
/// Now we can make the contract call
|
Now we can make the contract call
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
await pool.swapExactAmountOut(
|
await pool.swapExactAmountOut(
|
||||||
consumerAccount,
|
consumerAccount,
|
||||||
poolAddress,
|
poolAddress,
|
||||||
@ -429,22 +429,22 @@ describe('Marketplace flow tests', async () => {
|
|||||||
)
|
)
|
||||||
|
|
||||||
consumerOCEANBalance = await balance(web3, addresses.Ocean, consumerAccount)
|
consumerOCEANBalance = await balance(web3, addresses.Ocean, consumerAccount)
|
||||||
/// ```
|
```
|
||||||
/// Now let's console log the Consumer OCEAN balance after swap to check everything is working
|
Now let's console log the Consumer OCEAN balance after swap to check everything is working
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
console.log(`Consumer OCEAN balance after swap: ${consumerOCEANBalance}`)
|
console.log(`Consumer OCEAN balance after swap: ${consumerOCEANBalance}`)
|
||||||
consumerDTBalance = await balance(web3, poolDatatokenAddress, consumerAccount)
|
consumerDTBalance = await balance(web3, poolDatatokenAddress, consumerAccount)
|
||||||
/// ```
|
```
|
||||||
/// Next let's console log the POOL_NFT_SYMBOL and consumerDTBalance
|
Next let's console log the POOL_NFT_SYMBOL and consumerDTBalance
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
console.log(`Consumer ${POOL_NFT_SYMBOL} balance after swap: ${consumerDTBalance}`)
|
console.log(`Consumer ${POOL_NFT_SYMBOL} balance after swap: ${consumerDTBalance}`)
|
||||||
|
|
||||||
const resolvedDDO = await aquarius.waitForAqua(DDO.id)
|
const resolvedDDO = await aquarius.waitForAqua(DDO.id)
|
||||||
assert(resolvedDDO, 'Cannot fetch DDO from Aquarius')
|
assert(resolvedDDO, 'Cannot fetch DDO from Aquarius')
|
||||||
|
|
||||||
/// ```
|
```
|
||||||
/// The next step is to initialize the provider instance
|
The next step is to initialize the provider instance
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
const initializeData = await ProviderInstance.initialize(
|
const initializeData = await ProviderInstance.initialize(
|
||||||
resolvedDDO.id,
|
resolvedDDO.id,
|
||||||
resolvedDDO.services[0].id,
|
resolvedDDO.services[0].id,
|
||||||
@ -464,9 +464,9 @@ describe('Marketplace flow tests', async () => {
|
|||||||
validUntil: initializeData.providerFee.validUntil
|
validUntil: initializeData.providerFee.validUntil
|
||||||
}
|
}
|
||||||
|
|
||||||
/// ```
|
```
|
||||||
/// Now let's make a payment
|
Now let's make a payment
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
const tx = await datatoken.startOrder(
|
const tx = await datatoken.startOrder(
|
||||||
poolDatatokenAddress,
|
poolDatatokenAddress,
|
||||||
consumerAccount,
|
consumerAccount,
|
||||||
@ -475,9 +475,9 @@ describe('Marketplace flow tests', async () => {
|
|||||||
providerFees
|
providerFees
|
||||||
)
|
)
|
||||||
|
|
||||||
/// ```
|
```
|
||||||
/// Next up, let's get the URL
|
Next up, let's get the URL
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
const downloadURL = await ProviderInstance.getDownloadUrl(
|
const downloadURL = await ProviderInstance.getDownloadUrl(
|
||||||
DDO.id,
|
DDO.id,
|
||||||
consumerAccount,
|
consumerAccount,
|
||||||
@ -488,18 +488,18 @@ describe('Marketplace flow tests', async () => {
|
|||||||
web3
|
web3
|
||||||
)
|
)
|
||||||
|
|
||||||
/// ```
|
```
|
||||||
/// Now let's console log the Download URL to check everything is working
|
Now let's console log the Download URL to check everything is working
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
console.log(`Download URL: ${downloadURL}`)
|
console.log(`Download URL: ${downloadURL}`)
|
||||||
|
|
||||||
consumerOCEANBalance = await balance(web3, addresses.Ocean, consumerAccount)
|
consumerOCEANBalance = await balance(web3, addresses.Ocean, consumerAccount)
|
||||||
console.log(`Consumer OCEAN balance after order: ${consumerOCEANBalance}`)
|
console.log(`Consumer OCEAN balance after order: ${consumerOCEANBalance}`)
|
||||||
consumerDTBalance = await balance(web3, poolDatatokenAddress, consumerAccount)
|
consumerDTBalance = await balance(web3, poolDatatokenAddress, consumerAccount)
|
||||||
|
|
||||||
/// ```
|
```
|
||||||
/// Now let's console log the Consumer balance after order to check everything is working
|
Now let's console log the Consumer balance after order to check everything is working
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
console.log(`Consumer ${POOL_NFT_SYMBOL} balance after order: ${consumerDTBalance}`)
|
console.log(`Consumer ${POOL_NFT_SYMBOL} balance after order: ${consumerDTBalance}`)
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -508,13 +508,13 @@ describe('Marketplace flow tests', async () => {
|
|||||||
} catch (e) {
|
} catch (e) {
|
||||||
assert.fail('Download failed')
|
assert.fail('Download failed')
|
||||||
}
|
}
|
||||||
}) ///
|
|
||||||
/// ```
|
```
|
||||||
|
|
||||||
/// ## 7. Publish Data NFT and a Datatoken with a fixed rate exchange
|
## 7. Publish Data NFT and a Datatoken with a fixed rate exchange
|
||||||
|
|
||||||
it('7.1 Publish a dataset (create NFT + Datatoken) with a fixed rate exchange', async () => {
|
### 7.1 Publish a dataset (create NFT + Datatoken) with a fixed rate exchange
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
const factory = new NftFactory(addresses.ERC721Factory, web3)
|
const factory = new NftFactory(addresses.ERC721Factory, web3)
|
||||||
|
|
||||||
const nftParams: NftCreateData = {
|
const nftParams: NftCreateData = {
|
||||||
@ -561,39 +561,39 @@ describe('Marketplace flow tests', async () => {
|
|||||||
freAddress = tx.events.NewFixedRate.returnValues.exchangeContract
|
freAddress = tx.events.NewFixedRate.returnValues.exchangeContract
|
||||||
freId = tx.events.NewFixedRate.returnValues.exchangeId
|
freId = tx.events.NewFixedRate.returnValues.exchangeId
|
||||||
|
|
||||||
/// ```
|
```
|
||||||
/// Now let's console log each of those values to check everything is working
|
Now let's console log each of those values to check everything is working
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
console.log(`Fixed rate exchange NFT address: ${freNftAddress}`)
|
console.log(`Fixed rate exchange NFT address: ${freNftAddress}`)
|
||||||
console.log(`Fixed rate exchange Datatoken address: ${freDatatokenAddress}`)
|
console.log(`Fixed rate exchange Datatoken address: ${freDatatokenAddress}`)
|
||||||
console.log(`Fixed rate exchange address: ${freAddress}`)
|
console.log(`Fixed rate exchange address: ${freAddress}`)
|
||||||
console.log(`Fixed rate exchange Id: ${freId}`)
|
console.log(`Fixed rate exchange Id: ${freId}`)
|
||||||
}) ///
|
|
||||||
/// ```
|
```
|
||||||
|
|
||||||
it('7.2 Set metadata in the fixed rate exchange NFT', async () => {
|
### 7.2 Set metadata in the fixed rate exchange NFT
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
const nft = new Nft(web3)
|
const nft = new Nft(web3)
|
||||||
|
|
||||||
/// ```
|
```
|
||||||
/// Now we are going to update the ddo and set the did
|
Now we are going to update the ddo and set the did
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
DDO.chainId = await web3.eth.getChainId()
|
DDO.chainId = await web3.eth.getChainId()
|
||||||
DDO.id =
|
DDO.id =
|
||||||
'did:op:' +
|
'did:op:' +
|
||||||
SHA256(web3.utils.toChecksumAddress(freNftAddress) + DDO.chainId.toString(10))
|
SHA256(web3.utils.toChecksumAddress(freNftAddress) + DDO.chainId.toString(10))
|
||||||
DDO.nftAddress = freNftAddress
|
DDO.nftAddress = freNftAddress
|
||||||
|
|
||||||
/// ```
|
```
|
||||||
/// Next, let's encrypt the file(s) using provider
|
Next, let's encrypt the file(s) using provider
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
const encryptedFiles = await ProviderInstance.encrypt(ASSET_URL, providerUrl)
|
const encryptedFiles = await ProviderInstance.encrypt(ASSET_URL, providerUrl)
|
||||||
DDO.services[0].files = await encryptedFiles
|
DDO.services[0].files = await encryptedFiles
|
||||||
DDO.services[0].datatokenAddress = freDatatokenAddress
|
DDO.services[0].datatokenAddress = freDatatokenAddress
|
||||||
|
|
||||||
/// ```
|
```
|
||||||
/// Now let's console log the DID to check everything is working
|
Now let's console log the DID to check everything is working
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
console.log(`DID: ${DDO.id}`)
|
console.log(`DID: ${DDO.id}`)
|
||||||
|
|
||||||
const providerResponse = await ProviderInstance.encrypt(DDO, providerUrl)
|
const providerResponse = await ProviderInstance.encrypt(DDO, providerUrl)
|
||||||
@ -610,23 +610,23 @@ describe('Marketplace flow tests', async () => {
|
|||||||
'0x' + metadataHash
|
'0x' + metadataHash
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
/// ```
|
```
|
||||||
|
|
||||||
it('7.3 Marketplace displays fixed rate asset for sale', async () => {
|
### 7.3 Marketplace displays fixed rate asset for sale
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
const fixedRate = new FixedRateExchange(freAddress, web3)
|
const fixedRate = new FixedRateExchange(freAddress, web3)
|
||||||
const oceanAmount = await (
|
const oceanAmount = await (
|
||||||
await fixedRate.calcBaseInGivenOutDT(freId, '1')
|
await fixedRate.calcBaseInGivenDatatokensOut(freId, '1')
|
||||||
).baseTokenAmount
|
).baseTokenAmount
|
||||||
/// ```
|
```
|
||||||
/// Now that the market has fetched those values it can display the asset on the front end. In our case we will just console log the results:
|
Now that the market has fetched those values it can display the asset on the front end. In our case we will just console log the results:
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
console.log(`Price of 1 ${FRE_NFT_SYMBOL} is ${oceanAmount} OCEAN`)
|
console.log(`Price of 1 ${FRE_NFT_SYMBOL} is ${oceanAmount} OCEAN`)
|
||||||
}) ///
|
|
||||||
/// ```
|
```
|
||||||
|
|
||||||
it('7.4 Consumer buys a fixed rate asset data asset, and downloads it', async () => {
|
### 7.4 Consumer buys a fixed rate asset data asset, and downloads it
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
const datatoken = new Datatoken(web3)
|
const datatoken = new Datatoken(web3)
|
||||||
const DATATOKEN_AMOUNT = '10000'
|
const DATATOKEN_AMOUNT = '10000'
|
||||||
|
|
||||||
@ -634,18 +634,18 @@ describe('Marketplace flow tests', async () => {
|
|||||||
|
|
||||||
const consumerETHBalance = await web3.eth.getBalance(consumerAccount)
|
const consumerETHBalance = await web3.eth.getBalance(consumerAccount)
|
||||||
|
|
||||||
/// ```
|
```
|
||||||
/// Let's do a quick check of the consumer ETH balance before the swap
|
Let's do a quick check of the consumer ETH balance before the swap
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
console.log(`Consumer ETH balance: ${consumerETHBalance}`)
|
console.log(`Consumer ETH balance: ${consumerETHBalance}`)
|
||||||
let consumerOCEANBalance = await balance(web3, addresses.Ocean, consumerAccount)
|
let consumerOCEANBalance = await balance(web3, addresses.Ocean, consumerAccount)
|
||||||
console.log(`Consumer OCEAN balance before swap: ${consumerOCEANBalance}`)
|
console.log(`Consumer OCEAN balance before swap: ${consumerOCEANBalance}`)
|
||||||
let consumerDTBalance = await balance(web3, freDatatokenAddress, consumerAccount)
|
let consumerDTBalance = await balance(web3, freDatatokenAddress, consumerAccount)
|
||||||
console.log(`Consumer ${FRE_NFT_SYMBOL} balance before swap: ${consumerDTBalance}`)
|
console.log(`Consumer ${FRE_NFT_SYMBOL} balance before swap: ${consumerDTBalance}`)
|
||||||
|
|
||||||
/// ```
|
```
|
||||||
/// Before we call the contract we have to call `approve` so that the contract can move our tokens. This is standard when using any ERC20 Datatokens
|
Before we call the contract we have to call `approve` so that the contract can move our tokens. This is standard when using any ERC20 Datatokens
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
await approve(web3, consumerAccount, addresses.Ocean, freAddress, '100')
|
await approve(web3, consumerAccount, addresses.Ocean, freAddress, '100')
|
||||||
await approve(
|
await approve(
|
||||||
web3,
|
web3,
|
||||||
@ -656,10 +656,10 @@ describe('Marketplace flow tests', async () => {
|
|||||||
)
|
)
|
||||||
|
|
||||||
const fixedRate = new FixedRateExchange(freAddress, web3)
|
const fixedRate = new FixedRateExchange(freAddress, web3)
|
||||||
/// ```
|
```
|
||||||
/// Now we can make the contract call
|
Now we can make the contract call
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
await fixedRate.buyDT(consumerAccount, freId, '1', '2')
|
await fixedRate.buyDatatokens(consumerAccount, freId, '1', '2')
|
||||||
|
|
||||||
consumerOCEANBalance = await balance(web3, addresses.Ocean, consumerAccount)
|
consumerOCEANBalance = await balance(web3, addresses.Ocean, consumerAccount)
|
||||||
console.log(`Consumer OCEAN balance after swap: ${consumerOCEANBalance}`)
|
console.log(`Consumer OCEAN balance after swap: ${consumerOCEANBalance}`)
|
||||||
@ -669,9 +669,9 @@ describe('Marketplace flow tests', async () => {
|
|||||||
const resolvedDDO = await aquarius.waitForAqua(DDO.id)
|
const resolvedDDO = await aquarius.waitForAqua(DDO.id)
|
||||||
assert(resolvedDDO, 'Cannot fetch DDO from Aquarius')
|
assert(resolvedDDO, 'Cannot fetch DDO from Aquarius')
|
||||||
|
|
||||||
/// ```
|
```
|
||||||
/// Next, we need to initialize the provider
|
Next, we need to initialize the provider
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
const initializeData = await ProviderInstance.initialize(
|
const initializeData = await ProviderInstance.initialize(
|
||||||
resolvedDDO.id,
|
resolvedDDO.id,
|
||||||
resolvedDDO.services[0].id,
|
resolvedDDO.services[0].id,
|
||||||
@ -691,9 +691,9 @@ describe('Marketplace flow tests', async () => {
|
|||||||
validUntil: initializeData.providerFee.validUntil
|
validUntil: initializeData.providerFee.validUntil
|
||||||
}
|
}
|
||||||
|
|
||||||
/// ```
|
```
|
||||||
/// Lets now make the payment
|
Lets now make the payment
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
const tx = await datatoken.startOrder(
|
const tx = await datatoken.startOrder(
|
||||||
freDatatokenAddress,
|
freDatatokenAddress,
|
||||||
consumerAccount,
|
consumerAccount,
|
||||||
@ -701,9 +701,9 @@ describe('Marketplace flow tests', async () => {
|
|||||||
0,
|
0,
|
||||||
providerFees
|
providerFees
|
||||||
)
|
)
|
||||||
/// ```
|
```
|
||||||
/// Now we can get the url
|
Now we can get the url
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
const downloadURL = await ProviderInstance.getDownloadUrl(
|
const downloadURL = await ProviderInstance.getDownloadUrl(
|
||||||
DDO.id,
|
DDO.id,
|
||||||
consumerAccount,
|
consumerAccount,
|
||||||
@ -714,9 +714,9 @@ describe('Marketplace flow tests', async () => {
|
|||||||
web3
|
web3
|
||||||
)
|
)
|
||||||
|
|
||||||
/// ```
|
```
|
||||||
/// Lets check that the download URL was successfully received
|
Lets check that the download URL was successfully received
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
console.log(`Download URL: ${downloadURL}`)
|
console.log(`Download URL: ${downloadURL}`)
|
||||||
|
|
||||||
consumerOCEANBalance = await balance(web3, addresses.Ocean, consumerAccount)
|
consumerOCEANBalance = await balance(web3, addresses.Ocean, consumerAccount)
|
||||||
@ -730,13 +730,13 @@ describe('Marketplace flow tests', async () => {
|
|||||||
} catch (e) {
|
} catch (e) {
|
||||||
assert.fail('Download failed')
|
assert.fail('Download failed')
|
||||||
}
|
}
|
||||||
}) ///
|
|
||||||
/// ```
|
```
|
||||||
|
|
||||||
/// ## 8. Publish Data NFT and a Datatoken with a dispenser
|
## 8. Publish Data NFT and a Datatoken with a dispenser
|
||||||
|
|
||||||
it('8.1 Publish a dataset (create NFT + Datatoken) with a dispenser', async () => {
|
### 8.1 Publish a dataset (create NFT + Datatoken) with a dispenser
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
const factory = new NftFactory(addresses.ERC721Factory, web3)
|
const factory = new NftFactory(addresses.ERC721Factory, web3)
|
||||||
|
|
||||||
const nftParams: NftCreateData = {
|
const nftParams: NftCreateData = {
|
||||||
@ -776,31 +776,31 @@ describe('Marketplace flow tests', async () => {
|
|||||||
dispenserNftAddress = tx.events.NFTCreated.returnValues[0]
|
dispenserNftAddress = tx.events.NFTCreated.returnValues[0]
|
||||||
dispenserDatatokenAddress = tx.events.TokenCreated.returnValues[0]
|
dispenserDatatokenAddress = tx.events.TokenCreated.returnValues[0]
|
||||||
dispenserAddress = tx.events.DispenserCreated.returnValues[0]
|
dispenserAddress = tx.events.DispenserCreated.returnValues[0]
|
||||||
/// ```
|
```
|
||||||
/// Lets check that we managed to received all of those values without any problems
|
Lets check that we managed to received all of those values without any problems
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
console.log(`Dispenser NFT address: ${dispenserNftAddress}`)
|
console.log(`Dispenser NFT address: ${dispenserNftAddress}`)
|
||||||
console.log(`Dispenser Datatoken address: ${dispenserDatatokenAddress}`)
|
console.log(`Dispenser Datatoken address: ${dispenserDatatokenAddress}`)
|
||||||
console.log(`Dispenser address: ${dispenserAddress}`)
|
console.log(`Dispenser address: ${dispenserAddress}`)
|
||||||
}) ///
|
|
||||||
/// ```
|
```
|
||||||
|
|
||||||
it('8.2 Set metadata in the dispenser NFT', async () => {
|
### 8.2 Set metadata in the dispenser NFT
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
const nft = new Nft(web3)
|
const nft = new Nft(web3)
|
||||||
|
|
||||||
/// ```
|
```
|
||||||
/// Lets start by updating the ddo and setting the did
|
Lets start by updating the ddo and setting the did
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
DDO.chainId = await web3.eth.getChainId()
|
DDO.chainId = await web3.eth.getChainId()
|
||||||
DDO.id =
|
DDO.id =
|
||||||
'did:op:' +
|
'did:op:' +
|
||||||
SHA256(web3.utils.toChecksumAddress(dispenserNftAddress) + DDO.chainId.toString(10))
|
SHA256(web3.utils.toChecksumAddress(dispenserNftAddress) + DDO.chainId.toString(10))
|
||||||
DDO.nftAddress = dispenserNftAddress
|
DDO.nftAddress = dispenserNftAddress
|
||||||
|
|
||||||
/// ```
|
```
|
||||||
/// Now we need to encrypt file(s) using provider
|
Now we need to encrypt file(s) using provider
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
const encryptedFiles = await ProviderInstance.encrypt(ASSET_URL, providerUrl)
|
const encryptedFiles = await ProviderInstance.encrypt(ASSET_URL, providerUrl)
|
||||||
DDO.services[0].files = await encryptedFiles
|
DDO.services[0].files = await encryptedFiles
|
||||||
DDO.services[0].datatokenAddress = dispenserDatatokenAddress
|
DDO.services[0].datatokenAddress = dispenserDatatokenAddress
|
||||||
@ -820,11 +820,11 @@ describe('Marketplace flow tests', async () => {
|
|||||||
encryptedDDO,
|
encryptedDDO,
|
||||||
'0x' + metadataHash
|
'0x' + metadataHash
|
||||||
)
|
)
|
||||||
}) ///
|
|
||||||
/// ```
|
```
|
||||||
|
|
||||||
it('8.3 Consumer gets a dispenser data asset, and downloads it', async () => {
|
### 8.3 Consumer gets a dispenser data asset, and downloads it
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
const datatoken = new Datatoken(web3)
|
const datatoken = new Datatoken(web3)
|
||||||
const dispenser = new Dispenser(addresses.Dispenser, web3)
|
const dispenser = new Dispenser(addresses.Dispenser, web3)
|
||||||
|
|
||||||
@ -851,9 +851,9 @@ describe('Marketplace flow tests', async () => {
|
|||||||
|
|
||||||
const resolvedDDO = await aquarius.waitForAqua(DDO.id)
|
const resolvedDDO = await aquarius.waitForAqua(DDO.id)
|
||||||
assert(resolvedDDO, 'Cannot fetch DDO from Aquarius')
|
assert(resolvedDDO, 'Cannot fetch DDO from Aquarius')
|
||||||
/// ```
|
```
|
||||||
/// At this point we need to encrypt file(s) using provider
|
At this point we need to encrypt file(s) using provider
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
const initializeData = await ProviderInstance.initialize(
|
const initializeData = await ProviderInstance.initialize(
|
||||||
resolvedDDO.id,
|
resolvedDDO.id,
|
||||||
resolvedDDO.services[0].id,
|
resolvedDDO.services[0].id,
|
||||||
@ -872,9 +872,9 @@ describe('Marketplace flow tests', async () => {
|
|||||||
providerData: initializeData.providerFee.providerData,
|
providerData: initializeData.providerFee.providerData,
|
||||||
validUntil: initializeData.providerFee.validUntil
|
validUntil: initializeData.providerFee.validUntil
|
||||||
}
|
}
|
||||||
/// ```
|
```
|
||||||
/// Now we need to make the payment
|
Now we need to make the payment
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
const tx = await datatoken.startOrder(
|
const tx = await datatoken.startOrder(
|
||||||
dispenserDatatokenAddress,
|
dispenserDatatokenAddress,
|
||||||
consumerAccount,
|
consumerAccount,
|
||||||
@ -882,9 +882,9 @@ describe('Marketplace flow tests', async () => {
|
|||||||
0,
|
0,
|
||||||
providerFees
|
providerFees
|
||||||
)
|
)
|
||||||
/// ```
|
```
|
||||||
/// Now we can get the download URL
|
Now we can get the download URL
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
const downloadURL = await ProviderInstance.getDownloadUrl(
|
const downloadURL = await ProviderInstance.getDownloadUrl(
|
||||||
DDO.id,
|
DDO.id,
|
||||||
consumerAccount,
|
consumerAccount,
|
||||||
@ -894,9 +894,9 @@ describe('Marketplace flow tests', async () => {
|
|||||||
providerUrl,
|
providerUrl,
|
||||||
web3
|
web3
|
||||||
)
|
)
|
||||||
/// ```
|
```
|
||||||
/// Let's check we received the download URL ok
|
Let's check we received the download URL ok
|
||||||
/// ```Typescript
|
```Typescript
|
||||||
console.log(`Download URL: ${downloadURL}`)
|
console.log(`Download URL: ${downloadURL}`)
|
||||||
|
|
||||||
consumerDTBalance = await balance(web3, dispenserDatatokenAddress, consumerAccount)
|
consumerDTBalance = await balance(web3, dispenserDatatokenAddress, consumerAccount)
|
||||||
@ -908,11 +908,11 @@ describe('Marketplace flow tests', async () => {
|
|||||||
} catch (e) {
|
} catch (e) {
|
||||||
assert.fail('Download failed')
|
assert.fail('Download failed')
|
||||||
}
|
}
|
||||||
}) ///
|
|
||||||
/// ```
|
```
|
||||||
}) ///
|
|
||||||
|
|
||||||
/// ## Editing this file
|
|
||||||
/// Please note that CodeExamples.md is an autogenerated file, you should not edit it directly.
|
## Editing this file
|
||||||
/// Updates should be done in `test/integration/CodeExamples.test.ts` and all markdown should have three forward slashes before it
|
Please note that CodeExamples.md is an autogenerated file, you should not edit it directly.
|
||||||
/// e.g. `/// # H1 Title`
|
Updates should be done in `test/integration/CodeExamples.test.ts` and all markdown should have three forward slashes before it
|
||||||
|
e.g. `/// # H1 Title`
|
||||||
|
Loading…
x
Reference in New Issue
Block a user