1
0
mirror of https://github.com/oceanprotocol/docs.git synced 2024-11-01 15:55:34 +01:00
docs/building-with-ocean/using-ocean-libraries/configuration.md
Akshay 328ebe837f
Update building-with-ocean/using-ocean-libraries/configuration.md
Co-authored-by: Jamie Hewitt <jamie.hewitt15@gmail.com>
2022-08-03 12:32:40 +02:00

7.0 KiB

Configuration

Obtaining API key for Ethereum node provider

Ocean libraries need an Ethereum node provider API key to send transactions to the Ocean Protocol's Smart contracts. See this guide on getting an API key to interact with EVM compatible networks. The supported networks are listed here.

Create a directory

Let's start with creating a working directory where we store the environment variable file, configuration files and the scripts.

mkdir my-ocean-project
cd my-ocean-project

Create a .env file

In the working directory create a .env file. The content of this file will store the values for following variables:

Variable name Description Required
OCEAN_NETWORK Name of the network where the Ocean Protocol's smart contracts are deployed. Yes
OCEAN_NETWORK_URL The URL of the Ethereum node (along with API key for non-local networks) Yes
PRIVATE_KEY The private key of the account which you want to use. A private key is made up of 64 hex characters. Make sure you have sufficient balance to pay for the transaction fees. Yes
AQUARIUS_URL The URL of the Aquarius. This value is needed when reading an asset from off-chain store. No
PROVIDER_URL The URL of the Provider. This value is needed when publishing a new asset or update an existing asset. No

{% hint style="info" %} Treat this file as a secret and do not commit this file to git or share the content publicly. {% endhint %}

The below tabs show partially filled .env file content for some of the supported networks.

{% tabs %} {% tab title="Mainnet" %} {% code title=".env" %}

# Mandatory environment variables

OCEAN_NETWORK=mainnet
OCEAN_NETWORK_URL=<replace this>
PRIVATE_KEY=<secret>

# Optional environment variables

AQUARIUS_URL=https://v4.aquarius.oceanprotocol.com/
PROVIDER_URL=https://v4.provider.mainnet.oceanprotocol.com

{% endcode %} {% endtab %}

{% tab title="Polygon" %} {% code title=".env" %}

# Mandatory environment variables

OCEAN_NETWORK=polygon
OCEAN_NETWORK_URL=<replace this>
PRIVATE_KEY=<secret>

# Optional environment variables

AQUARIUS_URL=https://v4.aquarius.oceanprotocol.com/
PROVIDER_URL=https://v4.provider.polygon.oceanprotocol.com

{% endcode %} {% endtab %}

{% tab title="Local (using Barge)" %} {% code title=".env" %}

# Mandatory environment variables
OCEAN_NETWORK=development
OCEAN_NETWORK_URL=http://172.15.0.3:8545/
AQUARIUS_URL=http://172.15.0.5:5000
PROVIDER_URL=http://172.15.0.4:8030

# Replace PRIVATE_KEY if needed
PRIVATE_KEY=0xc594c6e5def4bab63ac29eed19a134c130388f74f019bc74b8f4389df2837a58

{% endcode %} {% endtab %} {% endtabs %}

NOTE: If using ocean.py, additionally specify ADDRESS_FILE variable in the .env file. Copy the content of this link locally and set the ADDRESS_FILE so that its value is a correct file path.

Setup dependencies

In this step the required dependencies will be installed.

{% tabs %} {% tab title="ocean.js" %}

npm init
npm install @oceanprotocol/lib@latest dotenv web3 @truffle/hdwallet-provider

{% endtab %}

{% tab title="ocean.py" %}

python3 -m venv venv
source venv/bin/activate
pip3 install wheel

# Install Ocean library. Allow pre-releases to get the latest v4 version.
pip3 install ocean-lib python-dotenv web3

{% endtab %} {% endtabs %}

Create a configuration file

A configuration file will read the content of the .env file and initialize the required configuration objects which will be used in the further tutorials. The below scripts creates a Web3 wallet instance and a Ocean's configuration object.

Create the configuration file in the working directory i.e. at the same path where the .env is located.

{% tabs %} {% tab title="ocean.js" %} {% code title="config.js" %}

// Import dependencies
require('dotenv').config();
const HDWalletProvider = require('@truffle/hdwallet-provider');
const fs = require('fs');
const { homedir } = require('os');
const { ConfigHelper } = require('@oceanprotocol/lib');

// Get configuration for the given network
let oceanConfig = new ConfigHelper().getConfig(process.env.OCEAN_NETWORK);

// 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 addressData = JSON.parse(
    fs.readFileSync(
      process.env.ADDRESS_FILE
        || `${homedir}/.ocean/ocean-contracts/artifacts/address.json`,
      'utf8'
    )
  );
  const addresses = addressData[process.env.OCEAN_NETWORK];

  oceanConfig = {
    ...oceanConfig,
    oceanTokenAddress: addresses.Ocean,
    poolTemplateAddress: addresses.poolTemplate,
    fixedRateExchangeAddress: addresses.FixedPrice,
    dispenserAddress: addresses.Dispenser,
    erc721FactoryAddress: addresses.ERC721Factory,
    sideStakingAddress: addresses.Staking,
    opfCommunityFeeCollector: addresses.OPFCommunityFeeCollector
  };
}

oceanConfig = {
  ...oceanConfig,
  nodeUri: process.env.OCEAN_NETWORK_URL,
  // Set optional properties - Provider URL and Aquarius URL
  metadataCacheUri: process.env.AQUARIUS_URL || oceanConfig.metadataCacheUri,
  providerUri: process.env.PROVIDER_URL || oceanConfig.providerUri
};

const web3Provider = new HDWalletProvider(
  process.env.PRIVATE_KEY,
  oceanConfig.nodeUri
);

module.exports = {
  web3Provider,
  oceanConfig
};

{% endcode %} {% endtab %}

{% tab title="ocean.py" %} {% code title="config.py" %}

import os
from dotenv import load_dotenv
from ocean_lib.ocean.ocean import Ocean
from ocean_lib.web3_internal.wallet import Wallet
from ocean_lib.example_config import ExampleConfig, get_config_dict
from ocean_lib.ocean.ocean import Ocean
from ocean_lib.ocean.util import get_web3

load_dotenv()

config = ExampleConfig.get_config()
ocean = Ocean(config)

user_private_key = os.getenv('PRIVATE_KEY')
web3_wallet = Wallet(ocean.web3, user_private_key, ocean.config.block_confirmations, ocean.config.transaction_timeout)

{% endcode %} {% endtab %} {% endtabs %}

Now, all the dependencies are ready and you can proceed with interacting with Ocean infrastructure using Ocean libraries.