Skip to content

Commit 68e05f5

Browse files
authored
feat: integrate-zod-validation (#431)
1 parent 693fb24 commit 68e05f5

File tree

8 files changed

+65
-19
lines changed

8 files changed

+65
-19
lines changed
Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,17 @@
11
# wallet used for transactions
22
WALLET_PRIVATE_KEY=...
33

4-
# environment to use for configuration (prod/staging)
4+
# environment to use for configuration (prod/staging). The default is prod.
55
ENV=...
66

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

1010
# DatasetRegistry contract address override (deploy script only)
1111
DATASET_REGISTRY_ADDRESS=...
12+
13+
## RPC URL for the network
14+
RPC_URL=
15+
16+
## Mnemonic for the network
17+
MNEMONIC=
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import 'dotenv/config.js';
2+
import { z } from 'zod';
3+
4+
const addressRegex = /(^|\b)(0x)?[0-9a-fA-F]{64}(\b|$)/;
5+
const privateKeyRegex = /(^|\b)(0x)?[0-9a-fA-F]{64}(\b|$)/;
6+
7+
const envSchema = z.object({
8+
// Private key of the wallet used for transactions
9+
WALLET_PRIVATE_KEY: z
10+
.string()
11+
.regex(privateKeyRegex, 'Invalid private key format')
12+
.optional()
13+
.or(z.literal('')),
14+
15+
// environment to use for configuration (prod/staging)
16+
ENV: z.enum(['prod', 'staging'], 'ENV must be either "prod" or "staging"').default('prod'),
17+
18+
// Address of the PoCo contract
19+
POCO_ADDRESS: z
20+
.string()
21+
.regex(addressRegex, 'Invalid Ethereum address format')
22+
.optional()
23+
.or(z.literal('')),
24+
25+
// Address of the DatasetRegistry
26+
DATASET_REGISTRY_ADDRESS: z
27+
.string()
28+
.regex(addressRegex, 'Invalid Ethereum address format')
29+
.optional()
30+
.or(z.literal('')),
31+
32+
// URL of the RPC used for network connection
33+
RPC_URL: z.string().url('RPC_URL must be a valid URL').optional().or(z.literal('')),
34+
35+
// Mnemonic for deployment or network interaction
36+
MNEMONIC: z.string().min(1, 'MNEMONIC cannot be empty').optional().or(z.literal('')),
37+
});
38+
39+
export const env = envSchema.parse(process.env);

packages/sharing-smart-contract/scripts/deploy.js

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import {
44
DATASET_REGISTRY_ADDRESS as defaultDatasetRegistryAddress,
55
POCO_ADDRESS as defaultPocoAddress,
66
} from '../config/config.js';
7+
import { env } from '../config/env.js';
78
import { saveDeployment } from '../utils/utils.js';
89

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

16-
const {
17-
POCO_ADDRESS = defaultPocoAddress,
18-
DATASET_REGISTRY_ADDRESS = defaultDatasetRegistryAddress,
19-
} = process.env;
17+
const pocoAddress = env.POCO_ADDRESS || defaultPocoAddress;
18+
const datasetRegistryAddress = env.DATASET_REGISTRY_ADDRESS || defaultDatasetRegistryAddress;
2019

21-
console.log(`Using poco at ${POCO_ADDRESS}`);
22-
console.log(`Using dataset registry at ${DATASET_REGISTRY_ADDRESS}`);
20+
console.log(`Using poco at ${pocoAddress}`);
21+
console.log(`Using dataset registry at ${datasetRegistryAddress}`);
2322

2423
const AddOnlyAppWhitelistRegistryFactory = await ethers.getContractFactory(
2524
'AddOnlyAppWhitelistRegistry',
@@ -47,8 +46,8 @@ async function main() {
4746
const DataProtectorSharingFactory = await ethers.getContractFactory('DataProtectorSharing');
4847

4948
const dataProtectorSharingConstructorArgs = [
50-
DATASET_REGISTRY_ADDRESS,
51-
POCO_ADDRESS,
49+
datasetRegistryAddress,
50+
pocoAddress,
5251
addOnlyAppWhitelistRegistryAddress,
5352
];
5453
const dataProtectorSharingContract = await upgrades.deployProxy(DataProtectorSharingFactory, {

packages/sharing-smart-contract/scripts/fillCollection.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
/* eslint-disable no-await-in-loop */
44
import { getEnvironment } from '@iexec/dataprotector-environments';
55
import pkg from 'hardhat';
6+
import { env } from '../config/env.js';
67
import { createAppFor } from './singleFunction/app.js';
78
import { createDatasetFor } from './singleFunction/dataset.js';
89
import { createWorkerpool, createWorkerpoolOrder } from './singleFunction/workerpool.js';
@@ -13,7 +14,7 @@ const { ethers } = pkg;
1314
const rpcURL = pkg.network.config.url;
1415

1516
async function main() {
16-
const { ENV } = process.env;
17+
const { ENV } = env;
1718
console.log(`using ENV: ${ENV}`);
1819
const { dataprotectorSharingContractAddress } = getEnvironment(ENV);
1920

packages/sharing-smart-contract/scripts/updateEnv.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
/* eslint-disable no-console */
22
import { getEnvironment } from '@iexec/dataprotector-environments';
33
import pkg from 'hardhat';
4-
4+
import { env } from '../config/env.js';
55
const { ethers } = pkg;
66

77
async function main() {
8-
const { ENV } = process.env;
8+
const { ENV } = env;
99
console.log(`using ENV: ${ENV}`);
1010
const { dataprotectorSharingContractAddress, resultProxyUrl } = getEnvironment(ENV);
1111

packages/sharing-smart-contract/scripts/upgrade-local-fork.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@
22
import { getEnvironment } from '@iexec/dataprotector-environments';
33
import hre from 'hardhat';
44
import { DATASET_REGISTRY_ADDRESS, POCO_ADDRESS } from '../config/config.js';
5+
import { env } from '../config/env.js';
56
import { impersonate, stopImpersonate } from './singleFunction/utils.js';
6-
77
const { ethers, upgrades } = hre;
88

99
async function main() {
10-
const { ENV } = process.env;
10+
const { ENV } = env;
1111
console.log(`using ENV: ${ENV}`);
1212

1313
const rpcUrl = hre.network.config.url;

packages/sharing-smart-contract/scripts/upgrade.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@
22
import { getEnvironment } from '@iexec/dataprotector-environments';
33
import hre from 'hardhat';
44
import { DATASET_REGISTRY_ADDRESS, POCO_ADDRESS } from '../config/config.js';
5+
import { env } from '../config/env.js';
56

67
const { ethers, upgrades } = hre;
78

89
async function main() {
9-
const { ENV } = process.env;
10+
const { ENV } = env;
1011
console.log(`Using ENV: ${ENV}`);
1112

1213
const { dataprotectorSharingContractAddress, addOnlyAppWhitelistRegistryContractAddress } =

packages/smart-contract/config/env.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,24 +5,24 @@ const addressRegex = /(^|\b)(0x)?[0-9a-fA-F]{64}(\b|$)/;
55
const privateKeyRegex = /(^|\b)(0x)?[0-9a-fA-F]{64}(\b|$)/;
66

77
const envSchema = z.object({
8-
// Clé privée du wallet utilisé pour les transactions
8+
// Private key of the wallet used for transactions
99
WALLET_PRIVATE_KEY: z
1010
.string()
1111
.regex(privateKeyRegex, 'Invalid private key format')
1212
.optional()
1313
.or(z.literal('')),
1414

15-
// Adresse du DatasetRegistry (override)
15+
// DatasetRegistry address (override)
1616
DATASET_REGISTRY_ADDRESS: z
1717
.string()
1818
.regex(addressRegex, 'Invalid Ethereum address format')
1919
.optional()
2020
.or(z.literal('')),
2121

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

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

2828
// Arbiscan API key

0 commit comments

Comments
 (0)