Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion packages/sharing-smart-contract/.env.template
Original file line number Diff line number Diff line change
@@ -1,11 +1,17 @@
# wallet used for transactions
WALLET_PRIVATE_KEY=...

# environment to use for configuration (prod/staging)
# environment to use for configuration (prod/staging). The default is prod.
ENV=...

# IExec PoCo contract address override (deploy script only)
POCO_ADDRESS=...

# DatasetRegistry contract address override (deploy script only)
DATASET_REGISTRY_ADDRESS=...

## RPC URL for the network
RPC_URL=

## Mnemonic for the network
MNEMONIC=
39 changes: 39 additions & 0 deletions packages/sharing-smart-contract/config/env.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import 'dotenv/config.js';
import { z } from 'zod';

const addressRegex = /(^|\b)(0x)?[0-9a-fA-F]{64}(\b|$)/;
const privateKeyRegex = /(^|\b)(0x)?[0-9a-fA-F]{64}(\b|$)/;

const envSchema = z.object({
// Private key of the wallet used for transactions
WALLET_PRIVATE_KEY: z
.string()
.regex(privateKeyRegex, 'Invalid private key format')
.optional()
.or(z.literal('')),

// environment to use for configuration (prod/staging)
ENV: z.enum(['prod', 'staging'], 'ENV must be either "prod" or "staging"').default('prod'),

// Address of the PoCo contract
POCO_ADDRESS: z
.string()
.regex(addressRegex, 'Invalid Ethereum address format')
.optional()
.or(z.literal('')),

// Address of the DatasetRegistry
DATASET_REGISTRY_ADDRESS: z
.string()
.regex(addressRegex, 'Invalid Ethereum address format')
.optional()
.or(z.literal('')),

// URL of the RPC used for network connection
RPC_URL: z.string().url('RPC_URL must be a valid URL').optional().or(z.literal('')),

// Mnemonic for deployment or network interaction
MNEMONIC: z.string().min(1, 'MNEMONIC cannot be empty').optional().or(z.literal('')),
});

export const env = envSchema.parse(process.env);
15 changes: 7 additions & 8 deletions packages/sharing-smart-contract/scripts/deploy.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import {
DATASET_REGISTRY_ADDRESS as defaultDatasetRegistryAddress,
POCO_ADDRESS as defaultPocoAddress,
} from '../config/config.js';
import { env } from '../config/env.js';
import { saveDeployment } from '../utils/utils.js';

const { ethers, upgrades } = hre;
Expand All @@ -13,13 +14,11 @@ async function main() {
const [deployer] = await ethers.getSigners();
console.log('Deploying contracts with the account:', deployer.address);

const {
POCO_ADDRESS = defaultPocoAddress,
DATASET_REGISTRY_ADDRESS = defaultDatasetRegistryAddress,
} = process.env;
const pocoAddress = env.POCO_ADDRESS || defaultPocoAddress;
const datasetRegistryAddress = env.DATASET_REGISTRY_ADDRESS || defaultDatasetRegistryAddress;

console.log(`Using poco at ${POCO_ADDRESS}`);
console.log(`Using dataset registry at ${DATASET_REGISTRY_ADDRESS}`);
console.log(`Using poco at ${pocoAddress}`);
console.log(`Using dataset registry at ${datasetRegistryAddress}`);

const AddOnlyAppWhitelistRegistryFactory = await ethers.getContractFactory(
'AddOnlyAppWhitelistRegistry',
Expand Down Expand Up @@ -47,8 +46,8 @@ async function main() {
const DataProtectorSharingFactory = await ethers.getContractFactory('DataProtectorSharing');

const dataProtectorSharingConstructorArgs = [
DATASET_REGISTRY_ADDRESS,
POCO_ADDRESS,
datasetRegistryAddress,
pocoAddress,
addOnlyAppWhitelistRegistryAddress,
];
const dataProtectorSharingContract = await upgrades.deployProxy(DataProtectorSharingFactory, {
Expand Down
3 changes: 2 additions & 1 deletion packages/sharing-smart-contract/scripts/fillCollection.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
/* eslint-disable no-await-in-loop */
import { getEnvironment } from '@iexec/dataprotector-environments';
import pkg from 'hardhat';
import { env } from '../config/env.js';
import { createAppFor } from './singleFunction/app.js';
import { createDatasetFor } from './singleFunction/dataset.js';
import { createWorkerpool, createWorkerpoolOrder } from './singleFunction/workerpool.js';
Expand All @@ -13,7 +14,7 @@ const { ethers } = pkg;
const rpcURL = pkg.network.config.url;

async function main() {
const { ENV } = process.env;
const { ENV } = env;
console.log(`using ENV: ${ENV}`);
const { dataprotectorSharingContractAddress } = getEnvironment(ENV);

Expand Down
4 changes: 2 additions & 2 deletions packages/sharing-smart-contract/scripts/updateEnv.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
/* eslint-disable no-console */
import { getEnvironment } from '@iexec/dataprotector-environments';
import pkg from 'hardhat';

import { env } from '../config/env.js';
const { ethers } = pkg;

async function main() {
const { ENV } = process.env;
const { ENV } = env;
console.log(`using ENV: ${ENV}`);
const { dataprotectorSharingContractAddress, resultProxyUrl } = getEnvironment(ENV);

Expand Down
4 changes: 2 additions & 2 deletions packages/sharing-smart-contract/scripts/upgrade-local-fork.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@
import { getEnvironment } from '@iexec/dataprotector-environments';
import hre from 'hardhat';
import { DATASET_REGISTRY_ADDRESS, POCO_ADDRESS } from '../config/config.js';
import { env } from '../config/env.js';
import { impersonate, stopImpersonate } from './singleFunction/utils.js';

const { ethers, upgrades } = hre;

async function main() {
const { ENV } = process.env;
const { ENV } = env;
console.log(`using ENV: ${ENV}`);

const rpcUrl = hre.network.config.url;
Expand Down
3 changes: 2 additions & 1 deletion packages/sharing-smart-contract/scripts/upgrade.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,12 @@
import { getEnvironment } from '@iexec/dataprotector-environments';
import hre from 'hardhat';
import { DATASET_REGISTRY_ADDRESS, POCO_ADDRESS } from '../config/config.js';
import { env } from '../config/env.js';

const { ethers, upgrades } = hre;

async function main() {
const { ENV } = process.env;
const { ENV } = env;
console.log(`Using ENV: ${ENV}`);

const { dataprotectorSharingContractAddress, addOnlyAppWhitelistRegistryContractAddress } =
Expand Down
8 changes: 4 additions & 4 deletions packages/smart-contract/config/env.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,24 +5,24 @@ const addressRegex = /(^|\b)(0x)?[0-9a-fA-F]{64}(\b|$)/;
const privateKeyRegex = /(^|\b)(0x)?[0-9a-fA-F]{64}(\b|$)/;

const envSchema = z.object({
// Clé privée du wallet utilisé pour les transactions
// Private key of the wallet used for transactions
WALLET_PRIVATE_KEY: z
.string()
.regex(privateKeyRegex, 'Invalid private key format')
.optional()
.or(z.literal('')),

// Adresse du DatasetRegistry (override)
// DatasetRegistry address (override)
DATASET_REGISTRY_ADDRESS: z
.string()
.regex(addressRegex, 'Invalid Ethereum address format')
.optional()
.or(z.literal('')),

// URL du RPC utilisé pour la connexion réseau
// RPC URL used for network connection
RPC_URL: z.string().url('RPC_URL must be a valid URL').optional().or(z.literal('')),

// Mnemonic de déploiement ou interaction réseau
// Mnemonic for deployment or network interaction
MNEMONIC: z.string().min(1, 'MNEMONIC cannot be empty').optional().or(z.literal('')),

// Arbiscan API key
Expand Down
Loading