1
0
mirror of https://github.com/oceanprotocol/docs.git synced 2024-11-26 19:49:26 +01:00

update consume and configuration code example

This commit is contained in:
Bogdan Fazakas 2023-08-17 16:16:01 +03:00
parent 501d17d055
commit 862f0b0291
2 changed files with 136 additions and 117 deletions

View File

@ -26,6 +26,7 @@ The below tabs show partially filled `.env` file content for some of the support
{% tabs %}
{% tab title="Mainnet" %}
{% code title=".env" %}
```bash
# Mandatory environment variables
@ -38,11 +39,13 @@ PRIVATE_KEY=<secret>
AQUARIUS_URL=https://v4.aquarius.oceanprotocol.com/
PROVIDER_URL=https://v4.provider.oceanprotocol.com
```
{% endcode %}
{% endtab %}
{% tab title="Polygon" %}
{% code title=".env" %}
```bash
# Mandatory environment variables
@ -55,11 +58,13 @@ PRIVATE_KEY=<secret>
AQUARIUS_URL=https://v4.aquarius.oceanprotocol.com/
PROVIDER_URL=https://v4.provider.oceanprotocol.com
```
{% endcode %}
{% endtab %}
{% tab title="Local (using Barge)" %}
{% code title=".env" %}
```bash
# Mandatory environment variables
OCEAN_NETWORK=development
@ -70,6 +75,7 @@ PROVIDER_URL=http://172.15.0.4:8030
# Replace PRIVATE_KEY if needed
PRIVATE_KEY=0xc594c6e5def4bab63ac29eed19a134c130388f74f019bc74b8f4389df2837a58
```
{% endcode %}
{% endtab %}
{% endtabs %}
@ -87,10 +93,12 @@ Let's install Ocean.js library into your current project by running:
{% tabs %}
{% tab title="Terminal" %}
{% code overflow="wrap" %}
```bash
npm init
npm i @oceanprotocol/lib@latest dotenv crypto-js ethers@5.7.4 @truffle/hdwallet-provider
```
{% endcode %}
{% endtab %}
{% endtabs %}
@ -104,69 +112,66 @@ Create the configuration file in the working directory i.e. at the same path whe
{% tabs %}
{% tab title="config.js" %}
{% code title="config.js" %}
```javascript
require('dotenv').config();
const { Aquarius, ZERO_ADDRESS, ConfigHelper, configHelperNetworks } = require('@oceanprotocol/lib');
const { providers } = require('ethers')
const ethers = require('ethers');
async function oceanConfig(){
require("dotenv").config();
const {
Aquarius,
ConfigHelper,
configHelperNetworks,
} = require("@oceanprotocol/lib");
const ethers = require("ethers");
import fs from "fs";
import { homedir } from "os";
// Get configuration for the given network
const provider = new providers.JsonRpcProvider(
process.env.OCEAN_NETWORK_URL || configHelperNetworks[1].nodeUri
)
async function oceanConfig() {
const provider = new ethers.providers.JsonRpcProvider(
process.env.OCEAN_NETWORK_URL || configHelperNetworks[1].nodeUri
);
const publisherAccount = new ethers.Wallet(process.env.PRIVATE_KEY, provider);
const ethersProvider = new ethers.Wallet(
process.env.PRIVATE_KEY,
provider
);
const publisherAccount = wallet.connect(provider);
let oceanConfig = new ConfigHelper().getConfig(
parseInt(String((await publisherAccount.provider.getNetwork()).chainId))
);
const aquarius = new Aquarius(oceanConfig?.metadataCacheUri);
let oceanConfig = new ConfigHelper().getConfig(
parseInt(String((await publisherAccount.provider.getNetwork()).chainId))
)
const aquarius = new Aquarius(oceanConfig?.metadataCacheUri)
// If using local development environment, read the addresses from local file.
// The local deployment address file can be generated using barge.
if (process.env.OCEAN_NETWORK === "development") {
const addresses = JSON.parse(
// eslint-disable-next-line security/detect-non-literal-fs-filename
fs.readFileSync(
process.env.ADDRESS_FILE ||
`${homedir}/.ocean/ocean-contracts/artifacts/address.json`,
"utf8"
)
).development;
// If using local development environment, read the addresses from local file.
// The local deployment address file can be generated using barge.
if (process.env.OCEAN_NETWORK === 'development') {
const addresses = JSON.parse(
// eslint-disable-next-line security/detect-non-literal-fs-filename
fs.readFileSync(
process.env.ADDRESS_FILE ||
`${homedir}/.ocean/ocean-contracts/artifacts/address.json`,
'utf8'
)
).development
oceanConfig = {
...oceanConfig,
oceanTokenAddress: addresses.Ocean,
fixedRateExchangeAddress: addresses.FixedPrice,
dispenserAddress: addresses.Dispenser,
nftFactoryAddress: addresses.ERC721Factory,
opfCommunityFeeCollector: addresses.OPFCommunityFeeCollector,
};
}
oceanConfig = {
...oceanConfig,
oceanTokenAddress: addresses.Ocean,
poolTemplateAddress: addresses.poolTemplate,
fixedRateExchangeAddress: addresses.FixedPrice,
dispenserAddress: addresses.Dispenser,
nftFactoryAddress: addresses.ERC721Factory,
sideStakingAddress: addresses.Staking,
opfCommunityFeeCollector: addresses.OPFCommunityFeeCollector
};
}
oceanConfig = {
...oceanConfig,
publisherAccount: publisherAccount,
consumerAccount: publisherAccount,
aquarius: aquarius,
};
oceanConfig = {
...oceanConfig,
publisherAccount: publisherAccount,
consumerAccount: consumerAccount,
stakerAccount: stakerAccount,
aquarius: aquarius
};
return oceanConfig
};
return oceanConfig;
}
module.exports = {
oceanConfig
}
oceanConfig,
};
```
{% endcode %}
{% endtab %}
{% endtabs %}

View File

@ -18,13 +18,13 @@ Later on, when working with the ocean.js library, you can use this order transac
#### Prerequisites
* [Obtain an API key](../get-api-keys-for-blockchain-access.md)
* [Set up the .env file](configuration.md#create-a-env-file)
* [Install the dependencies](configuration.md#setup-dependencies)
* [Create a configuration file](configuration.md#create-a-configuration-file)
- [Obtain an API key](../get-api-keys-for-blockchain-access.md)
- [Set up the .env file](configuration.md#create-a-env-file)
- [Install the dependencies](configuration.md#setup-dependencies)
- [Create a configuration file](configuration.md#create-a-configuration-file)
{% hint style="info" %}
The variables **AQUARIUS\_URL** and **PROVIDER\_URL** should be set correctly in `.env` file
The variables **AQUARIUS_URL** and **PROVIDER_URL** should be set correctly in `.env` file
{% endhint %}
#### Create a script to consume an asset
@ -32,76 +32,90 @@ The variables **AQUARIUS\_URL** and **PROVIDER\_URL** should be set correctly in
Create a new file in the same working directory where the configuration file (`config.js`) and `.env` files are present, and copy the code as listed below.
<pre class="language-javascript" data-overflow="wrap"><code class="lang-javascript">// Note: Make sure .env file and config.js are created and setup correctly
const { oceanConfig } = require('./config.js');
const { ZERO_ADDRESS, NftFactory, getHash, Nft } = require ('@oceanprotocol/lib');
const { oceanConfig } = require("./config.js");
const {
ZERO_ADDRESS,
NftFactory,
getHash,
ProviderFees,
Datatoken,
ProviderInstance,
Nft,
FixedRateExchange,
approve
} = require("@oceanprotocol/lib");
// replace the did here
const did = "did:op:a419f07306d71f3357f8df74807d5d12bddd6bcd738eb0b461470c64859d6f0f";
// This function takes did as a parameter and updates the data NFT information
const consumeAsset = async (did) => {
const consumer = await oceanConfig.consumerAccount.getAddress();
// Fetch ddo from Aquarius
const asset = await await oceanConfig.aquarius.resolve(did);
const consumer = await oceanConfig.consumerAccount.getAddress();
const nft = new Nft(oceanConfig.consumerAccount);
await approve(
consumerAccount,
config,
await consumerAccount.getAddress(),
addresses.Ocean,
freAddress,
'1'
)
const fixedRate = new FixedRateExchange(fixedRateExchangeAddress, consumerAccount)
const tx = await fixedRate.buyDatatokens(fixedRateId, '1', '2')
<strong> const initializeData = await ProviderInstance.initialize(
</strong> resolvedDDO.id,
resolvedDDO.services[0].id,
0,
await consumerAccount.getAddress(),
providerUrl
)
// Fetch ddo from Aquarius
const asset = await await oceanConfig.aquarius.resolve(did);
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 nft = new Nft(consumer);
datatoken = new Datatoken(consumerAccount)
const tx = await datatoken.startOrder(
freDatatokenAddress,
await consumerAccount.getAddress(),
0,
providerFees
)
const orderTx = await tx.wait()
const orderStartedTx = getEventFromTx(orderTx, 'OrderStarted')
await approve(
Error,
oceanConfig,
await consumer.getAddress(),
oceanConfig.Ocean,
oceanConfig.fixedRateExchangeAddress,
"1"
);
const downloadURL = await ProviderInstance.getDownloadUrl(
fixedDDO.id,
fixedDDO.services[0].id,
0,
orderStartedTx.transactionHash,
providerUrl,
consumerAccount
<strong> )
</strong> console.log(`Resolved asset did [${updatedAsset.id}]from aquarius.`);
console.log(`Updated asset state: [${updatedAsset.nft.state}].`);
const fixedRate = new FixedRateExchange(
oceanConfig.fixedRateExchangeAddress,
consumer
);
const txBuyDt = await fixedRate.buyDatatokens(
oceanConfig.fixedRateId,
"1",
"2"
);
const initializeData = await ProviderInstance.initialize(
asset.id,
asset.services[0].id,
0,
await consumer.getAddress(),
oceanConfig.providerUri
);
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 datatoken = new Datatoken(consumer);
const tx = await datatoken.startOrder(
oceanConfig.fixedRateExchangeAddress,
await consumer.getAddress(),
0,
providerFees
);
const orderTx = await tx.wait();
const orderStartedTx = getEventFromTx(orderTx, "OrderStarted");
const downloadURL = await ProviderInstance.getDownloadUrl(
asset.id,
asset.services[0].id,
0,
orderTx.transactionHash,
oceanConfig.providerUri,
consumer
);
};
// Call setMetadata(...) function defined above