@ethernity-cloud/sdk-js 1.7.10 → 1.7.11
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.
- package/README.md +14 -7
- package/cas/config.js +10 -1
- package/info.js +8 -0
- package/init.js +2 -0
- package/network.js +1 -0
- package/nodenithy/run/image_registry.js +11 -0
- package/package.json +2 -2
- package/pynithy/run/image_registry.js +11 -0
- package/run.js +1 -1
package/README.md
CHANGED
|
@@ -59,20 +59,26 @@ The sdk has been tested on the following operating systems:
|
|
|
59
59
|
validator set (SessionRegistry `0xfA70B5Df...`, ValidatorRegistry
|
|
60
60
|
`0xbE3759f3...`).
|
|
61
61
|
- LiteForge Unsafe - the unsafe network beside LiteForge (see below).
|
|
62
|
+
- Ethereum:
|
|
63
|
+
- Sepolia - CAS-attested the same way, by Sepolia's own ethernity-cas
|
|
64
|
+
validator set (SessionRegistry `0xDbB249E1...`, ValidatorRegistry
|
|
65
|
+
`0x8ad24b3F...`), on the PoX family of 2026-10-14.
|
|
66
|
+
- Sepolia Unsafe - the unsafe network beside Sepolia (see below).
|
|
62
67
|
- Polyhon:
|
|
63
68
|
- Amoy Testnet - to be provided during the following updates
|
|
64
69
|
- Mainnet - to be provided during the following updates
|
|
65
70
|
|
|
66
|
-
The remaining testnets (Amoy, IoTeX
|
|
71
|
+
The remaining testnets (Amoy, IoTeX) have no ethernity-cas
|
|
67
72
|
deployment: their enclaves are debug-signed and sign their own certificates
|
|
68
73
|
from their measurement, and `ecld-publish` registers no CAS session for them.
|
|
69
74
|
|
|
70
75
|
### The testnets and their unsafe networks
|
|
71
|
-
`Bloxberg Testnet` and `
|
|
76
|
+
`Bloxberg Testnet`, `LitVM LiteForge` and `Ethereum Sepolia` run your securelock in an enclave
|
|
72
77
|
attested through that chain's ethernity-cas validator set, on nodes whose
|
|
73
78
|
platform the CAS can attest (DCAP). Each has an unsafe network beside it,
|
|
74
|
-
`Bloxberg Testnet Unsafe` (`Bloxberg_Testnet_Unsafe`)
|
|
75
|
-
Unsafe` (`LitVM_LiteForge_Unsafe`)
|
|
79
|
+
`Bloxberg Testnet Unsafe` (`Bloxberg_Testnet_Unsafe`), `LitVM LiteForge
|
|
80
|
+
Unsafe` (`LitVM_LiteForge_Unsafe`) and `Ethereum Sepolia Unsafe`
|
|
81
|
+
(`Ethereum_Sepolia_Unsafe`): the same chain and contracts, for hardware
|
|
76
82
|
SGX platforms the CAS cannot attest (EPID-only, SGX1). No CAS and no LAS: the
|
|
77
83
|
enclaves are debug-signed and sign their own certificates from their
|
|
78
84
|
measurement, so a result proves which image ran but not that an enclave ran
|
|
@@ -82,7 +88,8 @@ always says so in the network it names. A dApp publishes one securelock per
|
|
|
82
88
|
network from two project directories with the same project name: the unsafe
|
|
83
89
|
one is registered as `<project>-unsafe` and runs on the
|
|
84
90
|
`etny-<nodenithy|pynithy>-testnet-unsafe`
|
|
85
|
-
(`ecld-<nodenithy|pynithy>-litvm-testnet-unsafe
|
|
91
|
+
(`ecld-<nodenithy|pynithy>-litvm-testnet-unsafe`,
|
|
92
|
+
`ecld-<nodenithy|pynithy>-ethereum-sepolia-unsafe`) trustedzone. Both dApp types
|
|
86
93
|
build for both networks. Mainnet has no unsafe network.
|
|
87
94
|
|
|
88
95
|
### Pynithy dApps
|
|
@@ -176,8 +183,8 @@ sets the enclave heap (default `1024M`).
|
|
|
176
183
|
that IPFS RPC API instead, with `ECLD_IPFS_TOKEN` (or `IPFS_TOKEN`) as its
|
|
177
184
|
Authorization header, and a URL naming the public API is refused without one.
|
|
178
185
|
The intake serves the networks the bootnode's agent runs, today the bloxberg
|
|
179
|
-
testnet and
|
|
180
|
-
network (Bloxberg mainnet, Polygon, IoTeX
|
|
186
|
+
testnet, LitVM LiteForge and Ethereum Sepolia, each with its unsafe twin: a dApp on any other
|
|
187
|
+
network (Bloxberg mainnet, Polygon, IoTeX) needs an IPFS API of its
|
|
181
188
|
own (`IPFS_ENDPOINT` for the Hello World template, `--ipfs <url>` for `ecld-run`).
|
|
182
189
|
Exit code 0 on a `SUCCESS` task result, 1 otherwise. `--unsafe` runs the
|
|
183
190
|
network's unsafe variant; on an unsafe network the securelock and
|
package/cas/config.js
CHANGED
|
@@ -18,6 +18,8 @@ const VALIDATOR_REGISTRY = {
|
|
|
18
18
|
'etny-nodenithy-testnet': '0x0014aB102FEa6b02e3D793FF4b9a0Af309fB4E14',
|
|
19
19
|
'ecld-pynithy-litvm-testnet': '0xbE3759f327e8643fC5A1717fb2072A0dAcBAD29E',
|
|
20
20
|
'ecld-nodenithy-litvm-testnet': '0xbE3759f327e8643fC5A1717fb2072A0dAcBAD29E',
|
|
21
|
+
'ecld-pynithy-ethereum-sepolia': '0x8ad24b3F406A41a0F8D3440021792EB203957F43',
|
|
22
|
+
'ecld-nodenithy-ethereum-sepolia': '0x8ad24b3F406A41a0F8D3440021792EB203957F43',
|
|
21
23
|
};
|
|
22
24
|
|
|
23
25
|
const SESSION_REGISTRY = {
|
|
@@ -25,14 +27,20 @@ const SESSION_REGISTRY = {
|
|
|
25
27
|
'etny-nodenithy-testnet': '0x444429681fCb26470Cb12B5436E48402cF7478A3',
|
|
26
28
|
'ecld-pynithy-litvm-testnet': '0xfA70B5Df7C773A21164cAc5413704117e4dEaB76',
|
|
27
29
|
'ecld-nodenithy-litvm-testnet': '0xfA70B5Df7C773A21164cAc5413704117e4dEaB76',
|
|
30
|
+
// Bound to Sepolia's ECImageRegistryV3 of 2026-10-14.
|
|
31
|
+
'ecld-pynithy-ethereum-sepolia': '0xDbB249E108d19fC1691483Bf897bA8BA0dA99c06',
|
|
32
|
+
'ecld-nodenithy-ethereum-sepolia': '0xDbB249E108d19fC1691483Bf897bA8BA0dA99c06',
|
|
28
33
|
};
|
|
29
34
|
|
|
30
|
-
// The chain the registries above live on.
|
|
35
|
+
// The chain the registries above live on. Sepolia's RPC is Tenderly's gateway:
|
|
36
|
+
// publicnode caps eth_getLogs at 50,000 blocks and prunes older ranges.
|
|
31
37
|
const CHAIN = {
|
|
32
38
|
'etny-pynithy-testnet': { rpcUrl: 'https://bloxberg.ethernity.cloud', chainId: 8995 },
|
|
33
39
|
'etny-nodenithy-testnet': { rpcUrl: 'https://bloxberg.ethernity.cloud', chainId: 8995 },
|
|
34
40
|
'ecld-pynithy-litvm-testnet': { rpcUrl: 'https://liteforge.rpc.caldera.xyz/infra-partner-http', chainId: 4441 },
|
|
35
41
|
'ecld-nodenithy-litvm-testnet': { rpcUrl: 'https://liteforge.rpc.caldera.xyz/infra-partner-http', chainId: 4441 },
|
|
42
|
+
'ecld-pynithy-ethereum-sepolia': { rpcUrl: 'https://sepolia.gateway.tenderly.co', chainId: 11155111 },
|
|
43
|
+
'ecld-nodenithy-ethereum-sepolia': { rpcUrl: 'https://sepolia.gateway.tenderly.co', chainId: 11155111 },
|
|
36
44
|
};
|
|
37
45
|
|
|
38
46
|
// Whether the securelock takes its certificate from a CAS session: mainnet
|
|
@@ -55,6 +63,7 @@ const isMainnetNetwork = (network) =>
|
|
|
55
63
|
const UNSAFE_NETWORKS = {
|
|
56
64
|
Bloxberg_Testnet_Unsafe: 'Bloxberg_Testnet',
|
|
57
65
|
LitVM_LiteForge_Unsafe: 'LitVM_LiteForge',
|
|
66
|
+
Ethereum_Sepolia_Unsafe: 'Ethereum_Sepolia',
|
|
58
67
|
};
|
|
59
68
|
|
|
60
69
|
// Case-insensitive: ecld-init writes Bloxberg_Testnet_Unsafe, a --network
|
package/info.js
CHANGED
|
@@ -55,6 +55,14 @@ const NETWORKS = {
|
|
|
55
55
|
imageRegistry: '0xAf8Ce29103E1f59feDD49688ff070Ffc2346AF1D',
|
|
56
56
|
esr: '0x709052Fe77Af543d3d9FE2Ac06a15c635c8D4Be5',
|
|
57
57
|
},
|
|
58
|
+
// The family of 2026-10-14, owned by 0xA247...; the previous PoX 0x29D3eC87...
|
|
59
|
+
// and V1 registry 0x55e0ad45... are abandoned.
|
|
60
|
+
ETHEREUM_SEPOLIA: {
|
|
61
|
+
type: 'testnet', chainId: 11155111, rpc: 'https://sepolia.gateway.tenderly.co',
|
|
62
|
+
protocol: '0x798975F9FdD90A21Cb11Ac26F1377e1542c58f9c',
|
|
63
|
+
imageRegistry: '0xa7E43a269E3307cf9d246b07df2B89CAA1b4C42F',
|
|
64
|
+
esr: '0x9927809B61122B2af3f3b3A3303875e0687b8eE3',
|
|
65
|
+
},
|
|
58
66
|
};
|
|
59
67
|
// The -unsafe networks: the chain and contracts of the network each is the
|
|
60
68
|
// unsafe variant of, without a CAS.
|
package/init.js
CHANGED
|
@@ -214,6 +214,7 @@ const main = async () => {
|
|
|
214
214
|
"LitVM LiteForge",
|
|
215
215
|
"Bloxberg Testnet Unsafe",
|
|
216
216
|
"LitVM LiteForge Unsafe",
|
|
217
|
+
"Ethereum Sepolia Unsafe",
|
|
217
218
|
];
|
|
218
219
|
const blockchainNetwork = await promptOptions(
|
|
219
220
|
"On which Blockchain network do you want to have the app set up, as a starting point? (default is Bloxberg Testnet): ",
|
|
@@ -390,6 +391,7 @@ const main = async () => {
|
|
|
390
391
|
"LitVM LiteForge": `ecld-${svc}-litvm-testnet`,
|
|
391
392
|
"Bloxberg Testnet Unsafe": `etny-${svc}-testnet-unsafe`,
|
|
392
393
|
"LitVM LiteForge Unsafe": `ecld-${svc}-litvm-testnet-unsafe`,
|
|
394
|
+
"Ethereum Sepolia Unsafe": `ecld-${svc}-ethereum-sepolia-unsafe`,
|
|
393
395
|
};
|
|
394
396
|
const trustedZoneImage = imageByNetwork[blockchainNetwork] || `etny-${svc}-testnet`;
|
|
395
397
|
writeEnv("TRUSTED_ZONE_IMAGE", trustedZoneImage);
|
package/network.js
CHANGED
|
@@ -31,6 +31,7 @@ function networkFor({ ECAddress, ECNetworkByChainId }, raw) {
|
|
|
31
31
|
IOTEX_TESTNET: { address: ECAddress.IOTEX.TESTNET_ADDRESS, chainId: ECNetworkByChainId.IOTEX.TESTNET },
|
|
32
32
|
ETHEREUM_SEPOLIA: sepolia,
|
|
33
33
|
SEPOLIA: sepolia,
|
|
34
|
+
ETHEREUM_SEPOLIA_UNSAFE: { ...sepolia, unsafe: ['SEPOLIA', 'TESTNET_UNSAFE'] },
|
|
34
35
|
LITVM_LITEFORGE: litvm,
|
|
35
36
|
LITVM: litvm,
|
|
36
37
|
LITVM_LITEFORGE_UNSAFE: { ...litvm, unsafe: ['LITVM', 'TESTNET_UNSAFE'] },
|
|
@@ -41,6 +41,17 @@ function setVars(network = "") {
|
|
|
41
41
|
NETWORK_RPC = "https://liteforge.rpc.caldera.xyz/infra-partner-http";
|
|
42
42
|
IMAGE_REGISTRY_ADDRESS = "0xAf8Ce29103E1f59feDD49688ff070Ffc2346AF1D";
|
|
43
43
|
CHAIN_ID = 4441;
|
|
44
|
+
} else if (BLOCKCHAIN_NETWORK.includes("Sepolia")) {
|
|
45
|
+
// Sepolia's ECImageRegistryV3 of 2026-10-14; Tenderly's gateway serves
|
|
46
|
+
// the log ranges publicnode prunes.
|
|
47
|
+
NETWORK_RPC = "https://sepolia.gateway.tenderly.co";
|
|
48
|
+
IMAGE_REGISTRY_ADDRESS = "0xa7E43a269E3307cf9d246b07df2B89CAA1b4C42F";
|
|
49
|
+
CHAIN_ID = 11155111;
|
|
50
|
+
// Sepolia's EVM charges storage-heavy calls several times the local
|
|
51
|
+
// EVM's gas (a contract creation about seven times); the base fee is
|
|
52
|
+
// under 0.0001 gwei, so 0.1 gwei is paid in full as the tip.
|
|
53
|
+
GAS = 20000000;
|
|
54
|
+
GAS_PRICE = 100000000;
|
|
44
55
|
}
|
|
45
56
|
}
|
|
46
57
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ethernity-cloud/sdk-js",
|
|
3
|
-
"version": "1.7.
|
|
3
|
+
"version": "1.7.11",
|
|
4
4
|
"description": "A package to run ethernity cloud build scripts",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"test": "node --test \"test/**/*.test.js\"",
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"!**/*.pyc"
|
|
40
40
|
],
|
|
41
41
|
"dependencies": {
|
|
42
|
-
"@ethernity-cloud/runner": "^0.6.
|
|
42
|
+
"@ethernity-cloud/runner": "^0.6.6",
|
|
43
43
|
"acorn": "^8.11.0",
|
|
44
44
|
"adm-zip": "^0.5.14",
|
|
45
45
|
"axios": "^1.7.2",
|
|
@@ -41,6 +41,17 @@ function setVars(network = "") {
|
|
|
41
41
|
NETWORK_RPC = "https://liteforge.rpc.caldera.xyz/infra-partner-http";
|
|
42
42
|
IMAGE_REGISTRY_ADDRESS = "0xAf8Ce29103E1f59feDD49688ff070Ffc2346AF1D";
|
|
43
43
|
CHAIN_ID = 4441;
|
|
44
|
+
} else if (BLOCKCHAIN_NETWORK.includes("Sepolia")) {
|
|
45
|
+
// Sepolia's ECImageRegistryV3 of 2026-10-14; Tenderly's gateway serves
|
|
46
|
+
// the log ranges publicnode prunes.
|
|
47
|
+
NETWORK_RPC = "https://sepolia.gateway.tenderly.co";
|
|
48
|
+
IMAGE_REGISTRY_ADDRESS = "0xa7E43a269E3307cf9d246b07df2B89CAA1b4C42F";
|
|
49
|
+
CHAIN_ID = 11155111;
|
|
50
|
+
// Sepolia's EVM charges storage-heavy calls several times the local
|
|
51
|
+
// EVM's gas (a contract creation about seven times); the base fee is
|
|
52
|
+
// under 0.0001 gwei, so 0.1 gwei is paid in full as the tip.
|
|
53
|
+
GAS = 20000000;
|
|
54
|
+
GAS_PRICE = 100000000;
|
|
44
55
|
}
|
|
45
56
|
}
|
|
46
57
|
|
package/run.js
CHANGED
|
@@ -90,7 +90,7 @@ usage: ecld-run 'hello("World")' | ecld-run --file payload.js | ecld-run --input
|
|
|
90
90
|
payload: a code string, or --file <path>; input via --input <file> / --input-text <str>
|
|
91
91
|
network: --network BLOXBERG_TESTNET (default: BLOCKCHAIN_NETWORK from .env)
|
|
92
92
|
--unsafe: the network's -unsafe variant, which runs without a CAS
|
|
93
|
-
(BLOXBERG_TESTNET_UNSAFE, LITVM_LITEFORGE_UNSAFE)
|
|
93
|
+
(BLOXBERG_TESTNET_UNSAFE, LITVM_LITEFORGE_UNSAFE, ETHEREUM_SEPOLIA_UNSAFE)
|
|
94
94
|
enclaves: --securelock <name> (default PROJECT_NAME), --trustedzone <name> (default TRUSTED_ZONE_IMAGE);
|
|
95
95
|
on an -unsafe network the default is each one's -unsafe variant
|
|
96
96
|
key: PRIVATE_KEY (a funded 0x key) from .env / env, or ECLD_PRIVATE_KEY
|