@ethernity-cloud/sdk-js 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +185 -0
  3. package/build.js +22 -0
  4. package/init.js +301 -0
  5. package/nodenithy/build/las/Dockerfile +5 -0
  6. package/nodenithy/build/securelock/Dockerfile.tmpl +65 -0
  7. package/nodenithy/build/securelock/scripts/binary-fs-build.sh +28 -0
  8. package/nodenithy/build/securelock/src/.env +3 -0
  9. package/nodenithy/build/securelock/src/etny_crypto.js +201 -0
  10. package/nodenithy/build/securelock/src/etny_exec.js +65 -0
  11. package/nodenithy/build/securelock/src/image_registry_abi.js +808 -0
  12. package/nodenithy/build/securelock/src/models.js +261 -0
  13. package/nodenithy/build/securelock/src/package.json +40 -0
  14. package/nodenithy/build/securelock/src/pox_abi.js +1491 -0
  15. package/nodenithy/build/securelock/src/securelock.js.tmpl +421 -0
  16. package/nodenithy/build/securelock/src/swift_stream_service.js +147 -0
  17. package/nodenithy/build/securelock/src/task_status.js +15 -0
  18. package/nodenithy/build/securelock/src/wallet.js +29 -0
  19. package/nodenithy/build/squash/Dockerfile +7 -0
  20. package/nodenithy/build/trustedzone/Dockerfile.tmpl +57 -0
  21. package/nodenithy/build/trustedzone/scripts/binary-fs-build.sh +22 -0
  22. package/nodenithy/build/trustedzone/src/.env +3 -0
  23. package/nodenithy/build/trustedzone/src/etny_crypto.js +202 -0
  24. package/nodenithy/build/trustedzone/src/etny_exec.js +54 -0
  25. package/nodenithy/build/trustedzone/src/image_registry_abi.js +808 -0
  26. package/nodenithy/build/trustedzone/src/models.js +261 -0
  27. package/nodenithy/build/trustedzone/src/package.json +40 -0
  28. package/nodenithy/build/trustedzone/src/pox_abi.js +1491 -0
  29. package/nodenithy/build/trustedzone/src/swift_stream_service.js +147 -0
  30. package/nodenithy/build/trustedzone/src/task_status.js +15 -0
  31. package/nodenithy/build/trustedzone/src/test.js +44 -0
  32. package/nodenithy/build/trustedzone/src/trustedzone.js.tmpl +508 -0
  33. package/nodenithy/build/trustedzone/src/wallet.js +28 -0
  34. package/nodenithy/build/validator/Dockerfile +58 -0
  35. package/nodenithy/build/validator/package-lock.json +6 -0
  36. package/nodenithy/build/validator/scripts/binary-fs-build.sh +19 -0
  37. package/nodenithy/build/validator/src/.env +3 -0
  38. package/nodenithy/build/validator/src/cert.pem +5 -0
  39. package/nodenithy/build/validator/src/etny_crypto.js +204 -0
  40. package/nodenithy/build/validator/src/etny_exec.js +52 -0
  41. package/nodenithy/build/validator/src/image_registry_abi.js +808 -0
  42. package/nodenithy/build/validator/src/key.pem +6 -0
  43. package/nodenithy/build/validator/src/models.js +261 -0
  44. package/nodenithy/build/validator/src/package-lock.json +2498 -0
  45. package/nodenithy/build/validator/src/package.json +40 -0
  46. package/nodenithy/build/validator/src/pox_abi.js +1491 -0
  47. package/nodenithy/build/validator/src/swift_stream_service.js +147 -0
  48. package/nodenithy/build/validator/src/task_status.js +15 -0
  49. package/nodenithy/build/validator/src/test.js +44 -0
  50. package/nodenithy/build/validator/src/trustedzone.js +613 -0
  51. package/nodenithy/build/validator/src/validator_abi.js +834 -0
  52. package/nodenithy/build/validator/src/wallet.js +28 -0
  53. package/nodenithy/build.js +184 -0
  54. package/nodenithy/build.mjs +179 -0
  55. package/nodenithy/build.sh +161 -0
  56. package/nodenithy/ipfs.js +135 -0
  57. package/nodenithy/ipfs.mjs +551 -0
  58. package/nodenithy/public/favicon.ico +0 -0
  59. package/nodenithy/public/index.html +43 -0
  60. package/nodenithy/public/logo192.png +0 -0
  61. package/nodenithy/public/logo512.png +0 -0
  62. package/nodenithy/public/manifest.json +25 -0
  63. package/nodenithy/public/robots.txt +3 -0
  64. package/nodenithy/run/__pycache__/swift_stream_service.cpython-312.pyc +0 -0
  65. package/nodenithy/run/app/input.txt +4 -0
  66. package/nodenithy/run/app/payload.js +4 -0
  67. package/nodenithy/run/docker-compose-final.yml.tmpl +65 -0
  68. package/nodenithy/run/docker-compose-swift-stream.yml +17 -0
  69. package/nodenithy/run/docker-compose.yml.tmpl +76 -0
  70. package/nodenithy/run/etny-securelock-test.yaml.tpl +46 -0
  71. package/nodenithy/run/etny-trustedzone-test.yaml.tpl +45 -0
  72. package/nodenithy/run/git.sh +22 -0
  73. package/nodenithy/run/image_registry.abi +1 -0
  74. package/nodenithy/run/image_registry.js +372 -0
  75. package/nodenithy/run/image_registry.py +327 -0
  76. package/nodenithy/run/image_registry_runner.py +71 -0
  77. package/nodenithy/run/ipfs.sh +58 -0
  78. package/nodenithy/run/ipfs_pre.sh +75 -0
  79. package/nodenithy/run/public_key_service.js +90 -0
  80. package/nodenithy/run/public_key_service.py +107 -0
  81. package/nodenithy/run/swift_stream_service.py +212 -0
  82. package/nodenithy/run/swiftstream.py +37 -0
  83. package/nodenithy/run/swiftstream1.py +27 -0
  84. package/nodenithy/run.js +538 -0
  85. package/nodenithy/run.sh +277 -0
  86. package/nodenithy/scripts/build-ipfs-upload.sh +23 -0
  87. package/nodenithy/scripts/build.sh +40 -0
  88. package/nodenithy/scripts/ipfs-daemon.sh +7 -0
  89. package/nodenithy/scripts/run.sh +50 -0
  90. package/nodenithy/src/App.css +57 -0
  91. package/nodenithy/src/ec_helloworld_example.js +64 -0
  92. package/nodenithy/src/index.css +13 -0
  93. package/nodenithy/src/index.js +17 -0
  94. package/nodenithy/src/preStart.js +45 -0
  95. package/nodenithy/src/preStart.mjs +57 -0
  96. package/nodenithy/src/reportWebVitals.js +13 -0
  97. package/nodenithy/src/serverless/backend.js +5 -0
  98. package/package.json +48 -0
  99. package/postinstall.js +34 -0
  100. package/publish.js +126 -0
  101. package/pynithy/build/docker-compose.yml +68 -0
  102. package/pynithy/build/las/Dockerfile +11 -0
  103. package/pynithy/build/las/src/etny_entrypoint.sh +6 -0
  104. package/pynithy/build/las/src/las_entrypoint.sh +26 -0
  105. package/pynithy/build/scripts/binary-fs-build.sh +28 -0
  106. package/pynithy/build/securelock/Dockerfile.tmpl +78 -0
  107. package/pynithy/build/securelock/scripts/binary-fs-build.sh +41 -0
  108. package/pynithy/build/securelock/src/app/.env +5 -0
  109. package/pynithy/build/securelock/src/app/cert1-ca1-clean.crt +10 -0
  110. package/pynithy/build/securelock/src/app/cert1-ca1-clean.key +6 -0
  111. package/pynithy/build/securelock/src/app/enclave_pub_cert.pem +10 -0
  112. package/pynithy/build/securelock/src/app/input.txt +1 -0
  113. package/pynithy/build/securelock/src/app/payload.py +25 -0
  114. package/pynithy/build/securelock/src/app/public-cert-clean.pem +10 -0
  115. package/pynithy/build/securelock/src/app/result.txt +1 -0
  116. package/pynithy/build/securelock/src/app/transaction.txt +1 -0
  117. package/pynithy/build/securelock/src/etny_crypto.py +167 -0
  118. package/pynithy/build/securelock/src/etny_exec.py +79 -0
  119. package/pynithy/build/securelock/src/image_registry.abi +1 -0
  120. package/pynithy/build/securelock/src/key_generation.py +17 -0
  121. package/pynithy/build/securelock/src/models.py +176 -0
  122. package/pynithy/build/securelock/src/pox.abi +1489 -0
  123. package/pynithy/build/securelock/src/securelock.py.tmpl +411 -0
  124. package/pynithy/build/securelock/src/swift_stream_service.py +186 -0
  125. package/pynithy/build/trustedzone/Dockerfile.tmpl +56 -0
  126. package/pynithy/build/trustedzone/scripts/binary-fs-build.sh +32 -0
  127. package/pynithy/build/trustedzone/src/app/.env +5 -0
  128. package/pynithy/build/trustedzone/src/app/cert1-ca1-clean.crt +10 -0
  129. package/pynithy/build/trustedzone/src/app/cert1-ca1-clean.key +6 -0
  130. package/pynithy/build/trustedzone/src/app/enclave_pub_cert.pem +10 -0
  131. package/pynithy/build/trustedzone/src/app/input.txt +1 -0
  132. package/pynithy/build/trustedzone/src/app/payload.py +25 -0
  133. package/pynithy/build/trustedzone/src/app/public-cert-clean.pem +10 -0
  134. package/pynithy/build/trustedzone/src/app/result.txt +1 -0
  135. package/pynithy/build/trustedzone/src/app/securelock.crt +10 -0
  136. package/pynithy/build/trustedzone/src/app/transaction.txt +1 -0
  137. package/pynithy/build/trustedzone/src/app/trustedzone.crt +10 -0
  138. package/pynithy/build/trustedzone/src/etny_crypto.py +188 -0
  139. package/pynithy/build/trustedzone/src/etny_exec.py +56 -0
  140. package/pynithy/build/trustedzone/src/formatter.py +42 -0
  141. package/pynithy/build/trustedzone/src/image_registry.abi +1 -0
  142. package/pynithy/build/trustedzone/src/key_generation.py +17 -0
  143. package/pynithy/build/trustedzone/src/models.py +176 -0
  144. package/pynithy/build/trustedzone/src/pox.abi +1489 -0
  145. package/pynithy/build/trustedzone/src/swift_stream_service.py +186 -0
  146. package/pynithy/build/trustedzone/src/trustedzone.py.tmpl +460 -0
  147. package/pynithy/build.mjs +179 -0
  148. package/pynithy/docker-compose.yml +0 -0
  149. package/pynithy/ipfs.mjs +244 -0
  150. package/pynithy/public/favicon.ico +0 -0
  151. package/pynithy/public/index.html +43 -0
  152. package/pynithy/public/logo192.png +0 -0
  153. package/pynithy/public/logo512.png +0 -0
  154. package/pynithy/public/manifest.json +25 -0
  155. package/pynithy/public/robots.txt +3 -0
  156. package/pynithy/run/certs/cert.pem +31 -0
  157. package/pynithy/run/certs/challenge.crt +10 -0
  158. package/pynithy/run/certs/key.pem +52 -0
  159. package/pynithy/run/docker-compose-final.yml +59 -0
  160. package/pynithy/run/docker-compose-final.yml.tmpl +59 -0
  161. package/pynithy/run/docker-compose-swift-stream.yml +27 -0
  162. package/pynithy/run/docker-compose-swift-stream.yml.tmpl +27 -0
  163. package/pynithy/run/docker-compose.yml +55 -0
  164. package/pynithy/run/docker-compose.yml.tmpl +55 -0
  165. package/pynithy/run/etny-pynity-test.yaml.tpl +46 -0
  166. package/pynithy/run/etny-securelock-test.yaml.tpl +46 -0
  167. package/pynithy/run/etny-trustedzone-test.yaml.tpl +46 -0
  168. package/pynithy/run/git.sh +22 -0
  169. package/pynithy/run/image_registry.abi +1 -0
  170. package/pynithy/run/image_registry.js +372 -0
  171. package/pynithy/run/image_registry.py +139 -0
  172. package/pynithy/run/image_registry_runner.py +45 -0
  173. package/pynithy/run/ipfs.sh +89 -0
  174. package/pynithy/run/public_key_service.js +90 -0
  175. package/pynithy/run/swiftstream.py +28 -0
  176. package/pynithy/run.js +538 -0
  177. package/pynithy/src/App.css +57 -0
  178. package/pynithy/src/ec_helloworld_example.js +64 -0
  179. package/pynithy/src/index.css +13 -0
  180. package/pynithy/src/index.js +17 -0
  181. package/pynithy/src/preStart.mjs +57 -0
  182. package/pynithy/src/reportWebVitals.js +13 -0
  183. package/pynithy/src/serverless/__init__.py +0 -0
  184. package/pynithy/src/serverless/backend.py +2 -0
@@ -0,0 +1,5 @@
1
+ function hello(msg='World') {
2
+ return "Hello "+msg;
3
+ }
4
+
5
+ module.exports = { hello };
package/package.json ADDED
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "@ethernity-cloud/sdk-js",
3
+ "version": "1.1.0",
4
+ "description": "A package to run ethernity cloud build scripts",
5
+ "scripts": {
6
+ "ecld-build": "cross-env node ./node_modules/@ethernity-cloud/sdk-js/build.js",
7
+ "ecld-publish": "cross-env node ./node_modules/@ethernity-cloud/sdk-js/publish.js",
8
+ "ecld-init": "cross-env node ./node_modules/@ethernity-cloud/sdk-js/init.js",
9
+ "ecld-run": "cross-env ecld-run",
10
+ "postinstall": "node postinstall.js"
11
+ },
12
+ "bin": {
13
+ "ecld-build": "./build.js",
14
+ "ecld-publish": "./publish.js",
15
+ "ecld-init": "./init.js",
16
+ "postinstall": "./postinstall.js"
17
+ },
18
+ "files": [
19
+ "nodenithy/*",
20
+ "pynithy/*",
21
+ "build.js",
22
+ "init.js",
23
+ "publish.js",
24
+ "postinstall.js"
25
+ ],
26
+ "dependencies": {
27
+ "@ethernity-cloud/runner": "^0.0.26",
28
+ "axios": "^1.7.2",
29
+ "commander": "^12.1.0",
30
+ "dotenv": "^16.4.5",
31
+ "eth-lib": "^0.1.29",
32
+ "ethers": "^5.5.4",
33
+ "kubo-rpc-client": "^4.1.1",
34
+ "web3": "^4.9.0",
35
+ "cross-env": "^7.0.3",
36
+ "shelljs": "^0.8.5",
37
+ "shx": "^0.3.4",
38
+ "node-forge": "^1.3.1",
39
+ "cli-progress": "^3.12.0",
40
+ "react": "^18.3.1",
41
+ "react-dom": "^18.3.1",
42
+ "react-scripts": "^5.0.1",
43
+ "web-vitals": "^2.1.4",
44
+ "adm-zip": "^0.5.14"
45
+ },
46
+ "author": "Alexandru Luca",
47
+ "license": "AGPL-3.0"
48
+ }
package/postinstall.js ADDED
@@ -0,0 +1,34 @@
1
+ // console.log("Running postinstall script...");
2
+ const fs = require('fs');
3
+ const path = require('path');
4
+
5
+ // Path to the package.json file
6
+ // should be the package.json file from the root of the project
7
+ const packageJsonPath = path.join(__dirname, '../..', 'package.json');
8
+
9
+ // console.log("packageJsonPath: ", packageJsonPath);
10
+
11
+ // Read the package.json file
12
+ // if it does not exist, create an empty object
13
+ const packageJson = fs.existsSync(packageJsonPath) ? JSON.parse(fs.readFileSync(packageJsonPath, 'utf8')) : {};
14
+
15
+ // Default scripts to add
16
+ const defaultScripts = {
17
+ "ecld-build": "cross-env node ./node_modules/@ethernity-cloud/sdk-js/build.js",
18
+ "ecld-publish": "cross-env node ./node_modules/@ethernity-cloud/sdk-js/publish.js",
19
+ "ecld-init": "cross-env node ./node_modules/@ethernity-cloud/sdk-js/init.js",
20
+ "ecld-run": "cross-env ecld-run",
21
+ "start": "node src/preStart.mjs && react-scripts start"
22
+ };
23
+
24
+ // Add default scripts to the package.json scripts section
25
+ packageJson.scripts = {
26
+ ...packageJson.scripts,
27
+ ...defaultScripts
28
+ };
29
+
30
+ // Write the updated package.json back to the file
31
+ fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2), 'utf8');
32
+
33
+ // console.log('Default scripts added to package.json');
34
+ process.stdout.write("Installation complete! Please run `npm run ecld-init` to initialize the project.\n");
package/publish.js ADDED
@@ -0,0 +1,126 @@
1
+ const fs = require('fs');
2
+ const readline = require('readline');
3
+ const { execSync, spawn } = require('child_process');
4
+ const path = require('path');
5
+ require('dotenv').config();
6
+
7
+ // Function to write to .env file
8
+ const writeEnv = (key, value) => {
9
+ try {
10
+ const envFile = '.env';
11
+ let envContent = '';
12
+
13
+ if (fs.existsSync(envFile)) {
14
+ envContent = fs.readFileSync(envFile, 'utf8');
15
+ const regex = new RegExp(`^${key}=.*`, 'm');
16
+ if (regex.test(envContent)) {
17
+ envContent = envContent.replace(regex, `${key}=${value}`);
18
+ } else {
19
+ envContent += `\n${key}=${value}`;
20
+ }
21
+ } else {
22
+ envContent = `${key}=${value}`;
23
+ }
24
+
25
+ fs.writeFileSync(envFile, envContent, 'utf8');
26
+ } catch (error) {
27
+ console.log(error);
28
+ }
29
+ };
30
+
31
+ // Function to prompt user input
32
+ async function prompt(question) {
33
+ const rl = readline.createInterface({
34
+ input: process.stdin,
35
+ output: process.stdout
36
+ });
37
+
38
+ return new Promise(resolve => rl.question(question, answer => {
39
+ rl.close();
40
+ resolve(answer);
41
+ }));
42
+ }
43
+
44
+ (async () => {
45
+ const { PROJECT_NAME, BLOCKCHAIN_NETWORK, PRIVATE_KEY, DEVELOPER_FEE, SERVICE_TYPE } = process.env;
46
+ const scriptPath = path.resolve(__dirname, 'nodenithy/run/image_registry.js');
47
+ process.env.NODE_NO_WARNINGS = 1
48
+ let result = '';
49
+ if (!PROJECT_NAME || !BLOCKCHAIN_NETWORK || !PRIVATE_KEY || !DEVELOPER_FEE) {
50
+ const hasWallet = await prompt('Do you have an existing wallet? (yes/no) (default value: no) ') || 'no';
51
+ console.log()
52
+ if (hasWallet.toLowerCase() !== 'yes') {
53
+ console.log('Without a wallet, you will not be able to publish.');
54
+ console.log('Please refer to Blockchain Wallets Documentation (https://docs.ethernity.cloud/ethernity-node/prerequisites-ethernity-node/blockchain-wallets).');
55
+ process.exit(1);
56
+ }
57
+
58
+ let privateKey = await prompt('Enter your private key: ');
59
+ result = execSync(`node ${scriptPath} "" "" "" "${privateKey}" "validateAddress"`).toString().trim();
60
+
61
+ while (result !== 'OK') {
62
+ console.log(result);
63
+ privateKey = await prompt('Invalid private key. Please enter a valid private key: ');
64
+ result = execSync(`node ${scriptPath} "" "" "" "${privateKey}" "validateAddress"`).toString().trim();
65
+ }
66
+
67
+ console.log('Inputted Private key is valid.');
68
+ writeEnv('PRIVATE_KEY', privateKey);
69
+ console.log()
70
+ console.log('Checking blockchain for required funds...');
71
+
72
+ result = execSync(`node ${scriptPath} "" "" "" "" "checkBalance"`).toString().trim();
73
+
74
+ console.log(`Available funds: ${result}`);
75
+ console.log()
76
+ console.log(`Checking if project name is available on ${BLOCKCHAIN_NETWORK} network and ownership...`);
77
+ result = execSync(`node ${scriptPath} ${BLOCKCHAIN_NETWORK} ${process.env.PROJECT_NAME} ${process.env.VERSION} ${process.env.PRIVATE_KEY}`,).toString().trim();
78
+ console.log(result);
79
+ console.log()
80
+
81
+ const taskPercentage = await prompt('Please specify the % of a task which will be transferred to your wallet upon successful execution (default 10%): ') || '10';
82
+ writeEnv('DEVELOPER_FEE', taskPercentage);
83
+ } else {
84
+ console.log('Using PROJECT_NAME, BLOCKCHAIN_NETWORK, PRIVATE_KEY, DEVELOPER_FEE from .env');
85
+ console.log('Checking blockchain for required funds...');
86
+ result = result = execSync(`node ${scriptPath} "" "" "" "" "checkBalance"`).toString().trim();
87
+
88
+ console.log(`Available funds: ${result}`);
89
+ console.log()
90
+ let privateKey = PRIVATE_KEY;
91
+ result = execSync(`node ${scriptPath} "" "" "" "${privateKey}" "validateAddress"`).toString().trim();
92
+
93
+ while (result !== 'OK') {
94
+ console.log(result);
95
+ privateKey = await prompt('Invalid private key. Please enter a valid private key: ');
96
+ result = execSync(`node ${scriptPath} "" "" "" "${privateKey}" "validateAddress"`).toString().trim();
97
+ }
98
+ writeEnv('PRIVATE_KEY', privateKey);
99
+ }
100
+
101
+ if (SERVICE_TYPE === 'Nodenithy') {
102
+ console.log('Adding prerequisites for Nodenithy...');
103
+ // the current process can be exited 'cross-env node ./node_modules/@ethernity-cloud/sdk-js/nodenithy/run.js'
104
+ const run = spawn('node', ['./node_modules/@ethernity-cloud/sdk-js/nodenithy/run.js'], {
105
+ stdio: 'inherit'
106
+ });
107
+
108
+ run.on('exit', code => {
109
+ console.log('Exit code:', code);
110
+ process.exit(code);
111
+ });
112
+ } else if (SERVICE_TYPE === 'Pynithy') {
113
+ console.log('Adding prerequisites for Pynithy...');
114
+ const run = spawn('node', ['./node_modules/@ethernity-cloud/sdk-js/pynithy/run.js'], {
115
+ stdio: 'inherit'
116
+ });
117
+
118
+ run.on('exit', code => {
119
+ console.log('Exit code:', code);
120
+ process.exit(code);
121
+ });
122
+ } else {
123
+ console.log('Something went wrong');
124
+ process.exit(1);
125
+ }
126
+ })();
@@ -0,0 +1,68 @@
1
+ version: '3.2'
2
+ services:
3
+ las:
4
+ container_name: las
5
+ privileged: true
6
+ image: etny-las
7
+ entrypoint: "/las_entrypoint.sh"
8
+ command: "/usr/local/bin/las"
9
+ devices:
10
+ - "/dev/sgx_enclave:/dev/sgx_enclave"
11
+ restart: on-failure
12
+ networks:
13
+ - ethernity
14
+ ports:
15
+ - target: 18766
16
+ published: 18766
17
+ protocol: tcp
18
+ mode: host
19
+
20
+ etny-securelock:
21
+ container_name: etny-securelock
22
+ privileged: true
23
+ image: etny-securelock
24
+ entrypoint: ""
25
+ command: [ "/usr/local/bin/python", "/etny-securelock/securelock.py" ]
26
+ environment:
27
+ - SCONE_CAS_ADDR=scone-cas.cf
28
+ - SCONE_LAS_ADDR=las
29
+ - SCONE_CONFIG_ID=etny-pynity-test-0.0.18/application
30
+ - SCONE_HEAP=128M
31
+ - SCONE_LOG=DEBUG
32
+ - SCONE_MODE=SIM
33
+ - SCONE_ALLOW_DLOPEN=2
34
+ - SCONE_EXTENSIONS_PATH=/lib/libbinary-fs.so
35
+ restart: on-failure
36
+ networks:
37
+ - ethernity
38
+ devices:
39
+ - "/dev/sgx_enclave:/dev/sgx_enclave"
40
+ depends_on:
41
+ - las
42
+
43
+ etny-trustedzone:
44
+ container_name: etny-trustedzone
45
+ privileged: true
46
+ image: etny-trustedzone
47
+ entrypoint: ""
48
+ command: [ "/usr/local/bin/python", "/etny-trustedzone/trustedzone.py" ]
49
+ environment:
50
+ - SCONE_CAS_ADDR=scone-cas.cf
51
+ - SCONE_LAS_ADDR=las
52
+ - SCONE_CONFIG_ID=etny-pynity-trustedzone-0.0.18/application
53
+ - SCONE_HEAP=128M
54
+ - SCONE_LOG=DEBUG
55
+ - SCONE_MODE=SIM
56
+ - SCONE_ALLOW_DLOPEN=2
57
+ - SCONE_EXTENSIONS_PATH=/lib/libbinary-fs.so
58
+ restart: on-failure
59
+ networks:
60
+ - ethernity
61
+ devices:
62
+ - "/dev/sgx_enclave:/dev/sgx_enclave"
63
+ depends_on:
64
+ - las
65
+
66
+ networks:
67
+ ethernity:
68
+ external: true
@@ -0,0 +1,11 @@
1
+ FROM registry.scontain.com:5050/sconecuratedimages/services:las as initial
2
+
3
+ FROM scratch
4
+
5
+ COPY --from=initial / /
6
+
7
+ RUN apt-get update
8
+ RUN apt-get install psmisc
9
+
10
+ COPY src/* /
11
+
@@ -0,0 +1,6 @@
1
+
2
+ #!/bin/bash
3
+
4
+ ( tail -f -n0 /var/log/las.log & ) | grep -q "Sign request failed with Enclave lost after power transition or used in child process created by"
5
+
6
+ killall -9 las
@@ -0,0 +1,26 @@
1
+ #!/bin/bash
2
+
3
+ set -e
4
+
5
+ SOCKET="/var/run/aesmd/aesm.socket"
6
+
7
+ # Try to connect to the socket
8
+ # Previously we merely checked that the socket file exists. However, the
9
+ # file is not removed when the container stops and, thus, when we restart
10
+ # the file still exists and we assume that we are supposed to use an
11
+ # outside AESM.
12
+ if socat -u OPEN:/dev/null UNIX-CONNECT:${SOCKET}; then
13
+ # An AESM socket was already mounted into the container, don't start a local AESM service, start LAS directly
14
+ echo "${SOCKET} exists - Will use mounted AESM socket; the local in-container AESM service will not be started!"
15
+ exec "$@"
16
+ else
17
+ # No AESM socket present, delegate execution to the local AESM service
18
+ echo "${SOCKET} not found or unable to connect - Starting local in-container AESM service"
19
+ if [ -e ${SOCKET} ]; then
20
+ # Ensure the socket file does not exist - AESM won't start if it does...
21
+ rm ${SOCKET}
22
+ fi
23
+ exec /entrypoint.sh "$@"
24
+ fi
25
+
26
+ /etny_entrypoint.sh &
@@ -0,0 +1,28 @@
1
+ #!/bin/bash -v
2
+
3
+ pip3 install pyinstaller
4
+ apk add binutils
5
+
6
+ cd /etny-securelock
7
+ pyinstaller etny_result.py
8
+
9
+ EXEC=(scone binaryfs / /binary-fs-dir -v \
10
+ --include '/usr/local/lib/python3.10/*' \
11
+ --include '/etny-securelock/*' \
12
+ --host-path=/etc/resolv.conf \
13
+ --host-path=/etc/hosts)
14
+
15
+
16
+ for FILE in `cat ./build/etny_result/COLLECT-00.toc | grep '.so' | grep BINARY | awk -F "'" '{print $4}'`
17
+ do
18
+ EXEC+=(--include "${FILE}"'*')
19
+ done
20
+
21
+ rm -rf build dist etny_result.spec
22
+
23
+ echo "${EXEC[@]}"
24
+
25
+ SCONE_MODE=auto
26
+ exec "${EXEC[@]}"
27
+
28
+ exit
@@ -0,0 +1,78 @@
1
+ # FROM registry.scontain.com:5050/sconecuratedimages/apps:python3.10.5-alpine3.15-scone5.8-pre-release as release
2
+ FROM registry.ethernity.cloud:443/debuggingdelight/ethernity-cloud-sdk-registry/sconecuratedimages/apps:python3.10.5-alpine3.15-scone5.8-pre-release as release
3
+
4
+
5
+
6
+ RUN apk update
7
+
8
+ RUN cd /
9
+ RUN apk add bash openrc bind-tools sudo npm binutils curl
10
+ RUN pip3 install --upgrade pip
11
+ RUN pip3 install --upgrade setuptools
12
+ RUN pip3 install python-dotenv
13
+ RUN pip3 install web3==5.31.0
14
+ RUN pip3 install cryptography==42.0.7
15
+ RUN pip3 install ecdsa
16
+ RUN pip3 install pyasn1
17
+ RUN pip3 install tinyec
18
+ RUN pip3 install pyinstaller
19
+ RUN pip3 install minio
20
+ RUN pip3 install pynacl
21
+ RUN pip3 install pytest
22
+ RUN pip3 install numpy
23
+ RUN pip3 install scipy
24
+ RUN pip3 install hypothesis
25
+ RUN pip3 install pooch
26
+ RUN pip3 install ipywidgets
27
+
28
+ #RUN pip3 install requests
29
+ #RUN pip3 install beautifulsoup4
30
+ #RUN pip3 install tokenizers
31
+ #RUN pip3 install transformers
32
+ #RUN pip3 install tensorflow
33
+
34
+
35
+ ENV ENCLAVE_NAME_SECURELOCK=__ENCLAVE_NAME_SECURELOCK__
36
+ ENV BUCKET_NAME=__BUCKET_NAME__
37
+ ENV SMART_CONTRACT_ADDRESS=__SMART_CONTRACT_ADDRESS__
38
+ ENV IMAGE_REGISTRY_ADDRESS=__IMAGE_REGISTRY_ADDRESS__
39
+ ENV RPC_URL=__RPC_URL__
40
+ ENV CHAIN_ID=__CHAIN_ID__
41
+ ENV TRUSTED_ZONE_IMAGE=__TRUSTED_ZONE_IMAGE__
42
+
43
+
44
+ RUN mkdir binary-fs-dir
45
+
46
+ COPY ./src /etny-securelock/
47
+ COPY ./scripts/* /etny-securelock/
48
+
49
+ RUN etny-securelock/binary-fs-build.sh
50
+
51
+ FROM registry.ethernity.cloud:443/debuggingdelight/ethernity-cloud-sdk-registry/sconecuratedimages/crosscompilers as build
52
+
53
+ COPY --from=release /binary-fs-dir /.
54
+
55
+ RUN scone gcc ./binary_fs_blob.s ./libbinary_fs_template.a -shared -o /libbinary-fs.so
56
+
57
+ FROM registry.ethernity.cloud:443/debuggingdelight/ethernity-cloud-sdk-registry/sconecuratedimages/apps:python3.10.5-alpine3.15-scone5.8-pre-release
58
+
59
+ COPY --from=build /usr/local/bin/scone /usr/local/bin/scone
60
+
61
+ #RUN scone cas attest scone-cas.cf 3061b9feb7fa67f3815336a085f629a13f04b0a1667c93b14ff35581dc8271e4 -GCS --only_for_testing-debug --only_for_testing-ignore-signer
62
+
63
+ COPY --from=build /libbinary-fs.so /lib/libbinary-fs.so
64
+
65
+ RUN openssl genrsa -3 -out /enclave-key.pem 3072
66
+
67
+ ENV SCONE_LOG=INFO
68
+ ENV SCONE_HEAP=1024M
69
+ ENV SCONE_ALLOW_DLOPEN=1
70
+ ENV SCONE_EXTENSIONS_PATH=/lib/libbinary-fs.so
71
+
72
+ # Disabled production mode for testnet
73
+ # RUN scone-signer sign --key=/enclave-key.pem --env --production /usr/local/bin/python3
74
+
75
+ RUN rm -rf /enclave-key.pem
76
+
77
+
78
+ ENTRYPOINT ["/usr/local/bin/python", "/etny-securelock/securelock.py"]
@@ -0,0 +1,41 @@
1
+ #!/bin/bash -v
2
+
3
+
4
+ pip3 install pyinstaller
5
+ apk add binutils
6
+
7
+ cd /etny-securelock
8
+
9
+ echo "ENCLAVE_NAME_SECURE_LOCK = ${ENCLAVE_NAME_SECURELOCK}"
10
+
11
+ cat securelock.py.tmpl | sed s/"__ENCLAVE_NAME_SECURELOCK__"/"${ENCLAVE_NAME_SECURELOCK}"/g > securelock.py.tmp
12
+ sed -i "s/__BUCKET_NAME__/${BUCKET_NAME}/g" securelock.py.tmp
13
+ sed -i "s/__SMART_CONTRACT_ADDRESS__/${SMART_CONTRACT_ADDRESS}/g" securelock.py.tmp
14
+ sed -i "s/__IMAGE_REGISTRY_ADDRESS__/${IMAGE_REGISTRY_ADDRESS}/g" securelock.py.tmp
15
+ sed -i "s/__RPC_URL__/${RPC_URL}/g" securelock.py.tmp
16
+ sed -i "s/__CHAIN_ID__/${CHAIN_ID}/g" securelock.py.tmp
17
+ sed -i "s/__TRUSTED_ZONE_IMAGE__/${TRUSTED_ZONE_IMAGE}/g" securelock.py.tmp
18
+ mv securelock.py.tmp securelock.py
19
+
20
+ pyinstaller securelock.py
21
+
22
+ EXEC=(scone binaryfs / /binary-fs-dir -v \
23
+ --include '/usr/local/lib/python3.10/*' \
24
+ --include '/etny-securelock/*' \
25
+ --host-path=/etc/resolv.conf \
26
+ --host-path=/etc/hosts)
27
+
28
+
29
+ for FILE in `cat ./build/securelock/COLLECT-00.toc | grep '.so' | grep BINARY | awk -F "'" '{print $4}'`
30
+ do
31
+ EXEC+=(--include "${FILE}"'*')
32
+ done
33
+
34
+ rm -rf build dist securelock.spec
35
+
36
+ echo "${EXEC[@]}"
37
+
38
+ SCONE_MODE=auto
39
+ exec "${EXEC[@]}"
40
+
41
+ exit
@@ -0,0 +1,5 @@
1
+ ETNY_CHAIN_ID=8995
2
+ ETNY_SMART_CONTRACT_ADDRESS=0x549A6E06BB2084100148D50F51CF77a3436C3Ae7
3
+ ETNY_WEB3_PROVIDER=https://bloxberg.ethernity.cloud
4
+ ETNY_CLIENT_CHALLENGE=eyJjaXBoZXJ0ZXh0IjogImNjMDQ4Y2NjNzUxZDkwNjE2N2M3YTliNjZkZWZiYjVlMjE3N2E2NTU0MzYxNWEwNTYzYTBmMzViMzkiLCAibm9uY2UiOiAiMTZmYTk5MzRmNDcxMTczZTVmMjg5NDNlY2U4NjZiMzgiLCAiYXV0aFRhZyI6ICJmZTlmY2QyMDk5MzI1NTY2MTRlZTZmMTMwNzIwNzk0ZiIsICJ4IjogIjB4ZDU1ZjgwOWI5MGI0ZGQxYjk4YmJlYmYxYmQzNzlhYzEwNTU1MzFkMjYxMzBhYWU1MGI3MjA3ZGM0N2RlZjNkZWYzYTc1NTliYjkwMWQ1MmE1MWQ1YjNmNDNkODMyZmY5IiwgInkiOiAiMHgyYmMzYmE4ZjA2N2U3YjhiMGQ5NDM0ZWI4NjY2ZjA2ZGIxNjZhMjQ2M2YyNTE4NzcyYmVkYmUxMWM0ZTExNjIzZmIxODMzN2ZiNjRmNjE0OGY3YjEwZDgzMWE1NjYyZDgifQ==
5
+ ETNY_ORDER_ID=5602
@@ -0,0 +1,10 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIBczCB+qADAgECAgh7c9xYZiMrNDAKBggqhkjOPQQDAzASMRAwDgYDVQQDDAdD
3
+ QV9DRVJUMCAXDTIyMTIxNTEyNTczNVoYDzQwOTYwMTAxMDAwMDAwWjAWMRQwEgYD
4
+ VQQDDAtTRVJWRVJfQ0VSVDB2MBAGByqGSM49AgEGBSuBBAAiA2IABP8MVsw/zCoO
5
+ SH1Hi/jdGfD6w9zWWKs/Z1dm6RBzmeKdJ8g37kGT35mMHiZw4QZEsnaDtTl2dEmM
6
+ 0b8vePjERUaiwv4kMQ4r/r54KiM9dmeKViP+qwMrNsO5KNBsOR6t2aMXMBUwEwYD
7
+ VR0lBAwwCgYIKwYBBQUHAwEwCgYIKoZIzj0EAwMDaAAwZQIxAMlYmEz4z6e34Ui/
8
+ l5GNmChI3NUYc5MTL4Zu9X8b/tK82xI2XCv9XWYPHo/gNyA/oAIwDdhKVmDPZjGN
9
+ rU1rl8/+lPT/O1+4mrnyyEB2Vx7Ku1s2MoPf5bS0S/hofEJRmixM
10
+ -----END CERTIFICATE-----
@@ -0,0 +1,6 @@
1
+ -----BEGIN PRIVATE KEY-----
2
+ MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDD7xfiPdY+Du8Cn0/yT
3
+ WsYqBPVo7e271N0dZ5Rs9Mur8+M/VyH4g/nDReh3l0mzP4ihZANiAAT/DFbMP8wq
4
+ Dkh9R4v43Rnw+sPc1lirP2dXZukQc5ninSfIN+5Bk9+ZjB4mcOEGRLJ2g7U5dnRJ
5
+ jNG/L3j4xEVGosL+JDEOK/6+eCojPXZnilYj/qsDKzbDuSjQbDkerdk=
6
+ -----END PRIVATE KEY-----
@@ -0,0 +1,10 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIBczCB+qADAgECAgh7c9xYZiMrNDAKBggqhkjOPQQDAzASMRAwDgYDVQQDDAdD
3
+ QV9DRVJUMCAXDTIyMTIxNTEyNTczNVoYDzQwOTYwMTAxMDAwMDAwWjAWMRQwEgYD
4
+ VQQDDAtTRVJWRVJfQ0VSVDB2MBAGByqGSM49AgEGBSuBBAAiA2IABP8MVsw/zCoO
5
+ SH1Hi/jdGfD6w9zWWKs/Z1dm6RBzmeKdJ8g37kGT35mMHiZw4QZEsnaDtTl2dEmM
6
+ 0b8vePjERUaiwv4kMQ4r/r54KiM9dmeKViP+qwMrNsO5KNBsOR6t2aMXMBUwEwYD
7
+ VR0lBAwwCgYIKwYBBQUHAwEwCgYIKoZIzj0EAwMDaAAwZQIxAMlYmEz4z6e34Ui/
8
+ l5GNmChI3NUYc5MTL4Zu9X8b/tK82xI2XCv9XWYPHo/gNyA/oAIwDdhKVmDPZjGN
9
+ rU1rl8/+lPT/O1+4mrnyyEB2Vx7Ku1s2MoPf5bS0S/hofEJRmixM
10
+ -----END CERTIFICATE-----
@@ -0,0 +1 @@
1
+ sample input data
@@ -0,0 +1,25 @@
1
+ import time
2
+ from decimal import Decimal, getcontext
3
+
4
+ def compute(n):
5
+ getcontext().prec = n
6
+ res = Decimal(0)
7
+ for i in range(n):
8
+ a = Decimal(1)/(16**i)
9
+ b = Decimal(4)/(8*i+1)
10
+ c = Decimal(2)/(8*i+4)
11
+ d = Decimal(1)/(8*i+5)
12
+ e = Decimal(1)/(8*i+6)
13
+ r = a*(b-c-d-e)
14
+ res += r
15
+ return res
16
+
17
+
18
+ t1 = time.time()
19
+ res = compute(2000)
20
+ dt = time.time()-t1
21
+
22
+ ___etny_result___(str(res))
23
+
24
+
25
+
@@ -0,0 +1,10 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIBczCB+qADAgECAghVH/dYKMPvcjAKBggqhkjOPQQDAzASMRAwDgYDVQQDDAdD
3
+ QV9DRVJUMCAXDTIyMTIyMzE2NTY0NVoYDzQwOTYwMTAxMDAwMDAwWjAWMRQwEgYD
4
+ VQQDDAtTRVJWRVJfQ0VSVDB2MBAGByqGSM49AgEGBSuBBAAiA2IABJswHiJ0gxgS
5
+ Z5UuIWpbgsZGl6K6iEucllY7z64mulQaI2gpBqa2SvRjmXPAzpVeBgyRMxWlj7/c
6
+ vpIpSaaHWxmo1H0IXILtykxS+icwdtsBc/VNdQga/Af4Kvb1g0Cgo6MXMBUwEwYD
7
+ VR0lBAwwCgYIKwYBBQUHAwEwCgYIKoZIzj0EAwMDaAAwZQIxALpMDGNogbZ/fYGP
8
+ nMsr7iAX5ereCqErg6BISUEaIC4kjVHaCbaRQpFFyl4A16cW6AIwSmAY5M8O4nAD
9
+ Ow4YZQBfOv1MySqCQOuLPmMhp84AU7gxQCjRJiWEKQuBlH/aH6Zc
10
+ -----END CERTIFICATE-----
@@ -0,0 +1 @@
1
+ 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632788659361533818279682303019520353018529689957736225994138912497217752834791315155748572424541506959508295331168617278558890750983817546374649393192550604009277016711390098488240128583616035637076601047101819429555961989467678374494482553797747268471040475346462080466842590694912933136770289891521047521620569660240580381501935112533824300355876402474964732639141992726042699227967823547816360093417216412199245863150302861829745557067498385054945885869269956909272107975093029553211653449872027559602364806654991198818347977535663698074265425278625518184175746728909777727938000816470600161452491921732172147723501414419735685481613611573525521334757418494684385233239073941433345477624168625189835694855620992192221842725502542568876717904946016534668049886272327917860857843838279679766814541009538837863609506800642251252051173929848960841284886269456042419652850222106611863067442786220391949450471237137869609563643719172874677646575739624138908658326459958133904780275910
@@ -0,0 +1 @@
1
+ f9012a80830f4240830f424094549a6e06bb2084100148d50f51cf77a3436c3ae780b8c414e9f38400000000000000000000000000000000000000000000000000000000000015e20000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000005b76313a303a626563353065616630323933623439633761653461393932656137383436336661306539653165376165386332626330653733336435343234383832303764363a726172616a676d7a686c626f736978717a6272793a0000000000824669a0304b2c4abee5a3c945dda995926b0c2fe72fde420468cfbc24eaccd5b8cdab87a0328656248b926043795515c05bc4cf90a1bb3e112818f6116d00a7cfc9bb3215