Skip to content

Commit d61094d

Browse files
feat: Scone prod
1 parent bcf0faa commit d61094d

File tree

11 files changed

+71
-42
lines changed

11 files changed

+71
-42
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
node_modules
44
api/.env
5+
api/sig
56
.tags
67

78
cli/dist

api/package.json

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@
44
"main": "index.js",
55
"type": "module",
66
"scripts": {
7-
"start": "tsx --env-file=.env ./src/index.js",
8-
"dev": "tsx --env-file=.env --watch ./src/index.js",
9-
"dev:pretty": "tsx --env-file=.env --watch ./src/index.js | pino-pretty -tc",
7+
"ensure-signing-key": "[ -e 'sig/enclave-key.pem' ] && echo 'using existing signing key' || (mkdir -p sig && openssl genrsa -3 -out sig/enclave-key.pem 3072 && echo 'generated new signing key')",
8+
"start": "npm run ensure-signing-key && tsx --env-file=.env ./src/index.js",
9+
"dev": "npm run ensure-signing-key && tsx --env-file=.env --watch ./src/index.js",
10+
"dev:pretty": "npm run ensure-signing-key && tsx --env-file=.env --watch ./src/index.js | pino-pretty -tc",
1011
"check-format": "prettier --check .",
1112
"check-types": "tsc --project tsconfig.json",
1213
"format": "prettier --write .",

api/src/sconify/sconifyBuild.handler.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ const bodySchema = z.object({
2828
.enum(Object.keys(TEMPLATE_CONFIG) as [TemplateName])
2929
.default('JavaScript'),
3030
sconeVersion: z.enum(['v5', 'v5.9']).default('v5'),
31+
sconeProd: z.boolean().default(false),
3132
});
3233

3334
async function handleSconifyRequest(requestObj: object) {
@@ -36,13 +37,15 @@ async function handleSconifyRequest(requestObj: object) {
3637
let dockerhubPushToken: string;
3738
let sconeVersion: SconeVersion;
3839
let template: TemplateName;
40+
let sconeProd: boolean;
3941
try {
4042
({
4143
yourWalletPublicAddress,
4244
dockerhubImageToSconify,
4345
dockerhubPushToken,
4446
sconeVersion,
4547
template,
48+
sconeProd,
4649
} = bodySchema.parse(requestObj));
4750
} catch (error) {
4851
throw fromError(error, {
@@ -58,6 +61,7 @@ async function handleSconifyRequest(requestObj: object) {
5861
userWalletPublicAddress: yourWalletPublicAddress,
5962
sconeVersion,
6063
templateLanguage: template,
64+
sconeProd,
6165
});
6266
return {
6367
dockerImage,

api/src/sconify/sconifyBuild.service.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ export async function sconify({
2323
pushToken,
2424
sconeVersion,
2525
templateLanguage,
26+
sconeProd = false,
2627
}: {
2728
/**
2829
* Examples of valid dockerImageToSconify:
@@ -39,6 +40,7 @@ export async function sconify({
3940
pushToken: string;
4041
templateLanguage: TemplateName;
4142
sconeVersion: SconeVersion;
43+
sconeProd?: boolean;
4244
}): Promise<{
4345
dockerImage: string;
4446
dockerImageDigest: string;
@@ -58,6 +60,7 @@ export async function sconify({
5860
templateLanguage,
5961
userWalletPublicAddress,
6062
wsEnabled,
63+
sconeProd,
6164
},
6265
'New sconify request'
6366
);
@@ -142,6 +145,7 @@ export async function sconify({
142145
sconifyVersion,
143146
entrypoint: appEntrypoint,
144147
binary: configTemplate.binary,
148+
prod: sconeProd,
145149
});
146150
logger.info({ sconifiedImageId }, 'Sconified successfully');
147151
} finally {
@@ -168,7 +172,7 @@ export async function sconify({
168172

169173
const imageRepo = `${dockerUserName}/${imageName}`;
170174
const sconifiedImageShortId = sconifiedImageId.substring(7, 7 + 12); // extract 12 first chars after the leading "sha256:"
171-
const sconifiedImageTag = `${imageTag}-tee-scone-${sconifyVersion}-debug-${sconifiedImageShortId}`; // add digest in tag to avoid replacing previous build
175+
const sconifiedImageTag = `${imageTag}-tee-scone-${sconifyVersion}-${sconeProd ? 'prod' : 'debug'}-${sconifiedImageShortId}`; // add digest in tag to avoid replacing previous build
172176
const sconifiedImage = `${imageRepo}:${sconifiedImageTag}`;
173177

174178
let pushed;

api/src/singleFunction/sconifyImage.ts

Lines changed: 37 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { join } from 'node:path';
12
import Docker from 'dockerode';
23
import { SCONIFY_IMAGE_NAME } from '../constants/constants.js';
34
import { logger } from '../utils/logger.js';
@@ -16,6 +17,7 @@ export async function sconifyImage({
1617
sconifyVersion,
1718
entrypoint,
1819
binary,
20+
prod = false,
1921
}: {
2022
/**
2123
* image to sconify
@@ -33,34 +35,52 @@ export async function sconifyImage({
3335
* whitelisted binary
3436
*/
3537
binary: string;
38+
/**
39+
* sconify production flag
40+
*/
41+
prod?: boolean;
3642
}): Promise<string> {
37-
logger.info({ fromImage, entrypoint }, 'Running sconify command...');
43+
logger.info(
44+
{ fromImage, entrypoint },
45+
`Running sconify command in ${prod ? 'prod' : 'debug'} mode...`
46+
);
3847
const sconifierImage = `${SCONIFY_IMAGE_NAME}:${sconifyVersion}`;
3948

4049
logger.info({ sconifierImage }, 'Pulling sconifier image...');
4150
await pullSconeImage(sconifierImage);
4251

4352
const toImage = `${fromImage}-tmp-sconified-${Date.now()}`; // create an unique temporary identifier for the target image
4453
logger.info({ fromImage, toImage }, 'Sconifying...');
54+
55+
const sconifyBaseCmd = [
56+
'sconify_iexec',
57+
`--from=${fromImage}`,
58+
`--to=${toImage}`,
59+
'--binary-fs',
60+
'--fs-dir=/app',
61+
'--host-path=/etc/hosts',
62+
'--host-path=/etc/resolv.conf',
63+
`--binary=${binary}`,
64+
'--heap=1G',
65+
'--dlopen=1',
66+
'--no-color',
67+
'--verbose',
68+
`--command=${entrypoint}`,
69+
];
70+
71+
const baseBinds = ['/var/run/docker.sock:/var/run/docker.sock'];
72+
4573
const sconifyContainer = await docker.createContainer({
4674
Image: sconifierImage,
47-
Cmd: [
48-
'sconify_iexec',
49-
`--from=${fromImage}`,
50-
`--to=${toImage}`,
51-
'--binary-fs',
52-
'--fs-dir=/app',
53-
'--host-path=/etc/hosts',
54-
'--host-path=/etc/resolv.conf',
55-
`--binary=${binary}`,
56-
'--heap=1G',
57-
'--dlopen=1',
58-
'--no-color',
59-
'--verbose',
60-
`--command=${entrypoint}`,
61-
],
75+
Cmd: prod
76+
? sconifyBaseCmd.concat('--scone-signer=/sig/enclave-key.pem')
77+
: sconifyBaseCmd,
6278
HostConfig: {
63-
Binds: ['/var/run/docker.sock:/var/run/docker.sock'],
79+
Binds: prod
80+
? baseBinds.concat(
81+
`${join(process.cwd(), 'sig/enclave-key.pem')}:/sig/enclave-key.pem`
82+
) // mount signing key
83+
: baseBinds,
6484
},
6585
});
6686

cli/src/cmd/debug.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { ethers } from 'ethers';
22
import { askForWallet } from '../cli-helpers/askForWallet.js';
3-
import { getIExecDebug } from '../utils/iexec.js';
3+
import { getIExec } from '../utils/iexec.js';
44
import { getSpinner } from '../cli-helpers/spinner.js';
55
import * as color from '../cli-helpers/color.js';
66
import { handleCliError } from '../cli-helpers/handleCliError.js';
@@ -26,7 +26,7 @@ export async function debug({
2626
const chainConfig = getChainConfig(chainName);
2727
spinner.info(`Using chain ${chainName}`);
2828
const signer = await askForWallet({ spinner });
29-
const iexec = getIExecDebug({
29+
const iexec = getIExec({
3030
...chainConfig,
3131
signer,
3232
});

cli/src/cmd/deploy.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import { handleCliError } from '../cli-helpers/handleCliError.js';
1515
import { getSpinner } from '../cli-helpers/spinner.js';
1616
import { askForAppSecret } from '../cli-helpers/askForAppSecret.js';
1717
import { askForWallet } from '../cli-helpers/askForWallet.js';
18-
import { getIExecDebug } from '../utils/iexec.js';
18+
import { getIExec } from '../utils/iexec.js';
1919
import { goToProjectRoot } from '../cli-helpers/goToProjectRoot.js';
2020
import * as color from '../cli-helpers/color.js';
2121
import { hintBox } from '../cli-helpers/box.js';
@@ -43,7 +43,7 @@ export async function deploy({ chain }: { chain?: string }) {
4343
if (useTdx) {
4444
iexec = getIExecTdx({ ...chainConfig, signer });
4545
} else {
46-
iexec = getIExecDebug({ ...chainConfig, signer });
46+
iexec = getIExec({ ...chainConfig, signer });
4747
}
4848

4949
await ensureBalances({ spinner, iexec });

cli/src/cmd/run.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import {
1111
import { addRunData } from '../utils/cacheExecutions.js';
1212
import { getSpinner, type Spinner } from '../cli-helpers/spinner.js';
1313
import { handleCliError } from '../cli-helpers/handleCliError.js';
14-
import { getIExecDebug } from '../utils/iexec.js';
14+
import { getIExec } from '../utils/iexec.js';
1515
import { extractZipToFolder } from '../utils/extractZipToFolder.js';
1616
import { askShowResult } from '../cli-helpers/askShowResult.js';
1717
import { goToProjectRoot } from '../cli-helpers/goToProjectRoot.js';
@@ -104,7 +104,7 @@ export async function runInDebug({
104104
if (useTdx) {
105105
iexec = getIExecTdx({ ...chainConfig, signer });
106106
} else {
107-
iexec = getIExecDebug({
107+
iexec = getIExec({
108108
...chainConfig,
109109
signer,
110110
});
@@ -151,7 +151,7 @@ export async function runInDebug({
151151
// Workerpool Order
152152
spinner.start('Fetching workerpool order...');
153153
const workerpoolOrderbook = await iexec.orderbook.fetchWorkerpoolOrderbook({
154-
workerpool: useTdx ? WORKERPOOL_TDX : chainConfig.workerpoolDebug,
154+
workerpool: useTdx ? WORKERPOOL_TDX : chainConfig.workerpool,
155155
app: iAppAddress,
156156
dataset: protectedData || ethers.ZeroAddress,
157157
minTag: SCONE_TAG,

cli/src/config/config.ts

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,12 @@ import { useExperimentalNetworks } from '../utils/featureFlags.js';
33
export const SCONE_TAG = ['tee', 'scone'];
44
export const DEFAULT_SCONE_VERSION = 'v5.9';
55

6-
export const SCONIFY_API_HTTP_URL = 'https://iapp-api.iex.ec';
7-
export const SCONIFY_API_WS_URL = 'wss://iapp-api.iex.ec';
6+
// export const SCONIFY_API_HTTP_URL = 'https://iapp-api.iex.ec';
7+
// export const SCONIFY_API_WS_URL = 'wss://iapp-api.iex.ec';
8+
9+
// TODO use local server for the POC
10+
export const SCONIFY_API_HTTP_URL = 'http://127.0.0.1:3000';
11+
export const SCONIFY_API_WS_URL = 'ws://127.0.0.1:3000';
812

913
export const CONFIG_FILE = 'iapp.config.json';
1014
export const TEST_INPUT_DIR = 'input';
@@ -71,36 +75,32 @@ export const WS_RECONNECTION_MAX_ATTEMPTS = Math.floor(
7175

7276
type ChainConfig = {
7377
rpcHostUrl: string;
74-
smsDebugUrl: string;
7578
ipfsGatewayUrl: string;
7679
iexecExplorerUrl: string;
77-
workerpoolDebug: string;
80+
workerpool: string;
7881
};
7982

8083
export const DEFAULT_CHAIN = 'bellecour';
8184

8285
export const CHAINS_CONFIGURATIONS: Record<string, ChainConfig> = {
8386
bellecour: {
8487
rpcHostUrl: 'https://bellecour.iex.ec',
85-
smsDebugUrl: 'https://sms.scone-debug.v8-bellecour.iex.ec',
8688
ipfsGatewayUrl: 'https://ipfs-gateway.v8-bellecour.iex.ec',
8789
iexecExplorerUrl: 'https://explorer.iex.ec/bellecour',
88-
workerpoolDebug: 'debug-v8-learn.main.pools.iexec.eth',
90+
workerpool: 'prod-v8-learn.main.pools.iexec.eth',
8991
},
9092
'arbitrum-mainnet': {
9193
rpcHostUrl: 'https://arb1.arbitrum.io/rpc',
92-
smsDebugUrl: 'https://sms-debug.arbitrum-mainnet.iex.ec',
9394
ipfsGatewayUrl: 'https://ipfs-gateway.arbitrum-mainnet.iex.ec',
9495
iexecExplorerUrl: 'https://explorer.iex.ec/arbitrum-mainnet',
95-
workerpoolDebug: '0xAaA90d37034fD1ea27D5eF2879f217fB6fD7F7Ca',
96+
workerpool: '0x2c06263943180cc024daffeee15612db6e5fd248',
9697
},
9798
...(useExperimentalNetworks && {
9899
'arbitrum-sepolia-testnet': {
99100
rpcHostUrl: 'https://sepolia-rollup.arbitrum.io/rpc',
100-
smsDebugUrl: 'https://sms.arbitrum-sepolia-testnet.iex.ec',
101101
ipfsGatewayUrl: 'https://ipfs-gateway.arbitrum-sepolia-testnet.iex.ec',
102102
iexecExplorerUrl: 'https://explorer.iex.ec/arbitrum-sepolia-testnet',
103-
workerpoolDebug: '0xB967057a21dc6A66A29721d96b8Aa7454B7c383F',
103+
workerpool: '0xB967057a21dc6A66A29721d96b8Aa7454B7c383F',
104104
},
105105
}),
106106
};

cli/src/utils/iexec.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,18 @@ import { AbstractSigner } from 'ethers';
33
import { IExec } from 'iexec';
44
import { useExperimentalNetworks } from './featureFlags.js';
55

6-
export function getIExecDebug({
6+
export function getIExec({
77
signer,
88
rpcHostUrl,
9-
smsDebugUrl,
109
}: {
1110
signer: AbstractSigner;
1211
rpcHostUrl: string;
13-
smsDebugUrl: string;
1412
}): IExec {
1513
return new IExec(
1614
{
1715
ethProvider: signer.connect(new JsonRpcProvider(rpcHostUrl)),
1816
},
1917
{
20-
smsURL: smsDebugUrl,
2118
allowExperimentalNetworks: useExperimentalNetworks,
2219
}
2320
);

0 commit comments

Comments
 (0)