@ethernity-cloud/runner
Version:
367 lines (345 loc) • 12.7 kB
JavaScript
export const ECStatus = {
ERROR: 'Error',
SUCCESS: 'Success',
DEFAULT: 'Running'
};
export const ECEvent = {
INIT: 'Encrypting task',
SENDING: "Sending task",
CREATED: 'Waiting for network',
ORDER_PLACED: 'Approving',
IN_PROGRESS: 'In Progress',
DOWNLOADING: 'Downloading result',
VERIFYING: 'Decrypting result',
FINISHED: 'Finished'
};
export const ECOrderTaskStatus = {
0: 'SUCCESS',
1: 'SYSTEM_ERROR',
2: 'KEY_ERROR',
3: 'SYNTAX_WARNING',
4: 'BASE_EXCEPTION',
5: 'PAYLOAD_NOT_DEFINED',
6: 'PAYLOAD_CHECKSUM_ERROR',
7: 'INPUT_CHECKSUM_ERROR'
};
export const ECOrderTaskStatusCode = {
SUCCESS: 'SUCCESS',
SYSTEM_ERROR: 'SYSTEM_ERROR',
KEY_ERROR: 'KEY_ERROR',
SYNTAX_WARNING: 'SYNTAX_WARNING',
BASE_EXCEPTION: 'BASE_EXCEPTION',
PAYLOAD_NOT_DEFINED: 'PAYLOAD_NOT_DEFINED',
PAYLOAD_CHECKSUM_ERROR: 'PAYLOAD_CHECKSUM_ERROR',
INPUT_CHECKSUM_ERROR: 'INPUT_CHECKSUM_ERROR'
};
export const ECNetworkByChainId = {
BLOXBERG: {
TESTNET: 8995,
MAINNET: 8995
},
POLYGON: {
TESTNET: 80002,
MAINNET: 137
},
IOTEX: {
TESTNET: 4690
},
SEPOLIA: {
TESTNET: 11155111
},
LITVM: {
TESTNET: 4441
}
};
export const ECNetworkByChainIdDictionary = {
8995: 'bloxberg',
80002: 'amoy',
137: 'matic',
4690: 'iotex',
11155111: 'sepolia',
4441: 'litvm'
};
export const ECNetwork = {
BLOXBERG: {
TESTNET: 'Bloxberg TESTNET',
MAINNET: 'Bloxberg MAINNET'
},
POLYGON: {
TESTNET: 'Polygon TESTNET',
MAINNET: 'Polygon MAINNET'
},
IOTEX: {
TESTNET: 'IoTeX TESTNET'
},
SEPOLIA: {
TESTNET: 'Sepolia TESTNET'
},
LITVM: {
TESTNET: 'LitVM TESTNET'
}
};
export const ECRunner = {
BLOXBERG: {
PYNITHY_RUNNER_TESTNET: 'etny-pynithy-testnet',
NODENITHY_RUNNER_TESTNET: 'etny-nodenithy-testnet',
PYNITHY_RUNNER: 'etny-pynithy',
NODENITHY_RUNNER: 'etny-nodenithy'
},
POLYGON: {
PYNITHY_RUNNER_TESTNET: 'ecld-pynithy-amoy',
NODENITHY_RUNNER_TESTNET: 'ecld-nodenithy-amoy',
PYNITHY_RUNNER: 'ecld-pynithy',
NODENITHY_RUNNER: 'ecld-nodenithy'
},
IOTEX: {
PYNITHY_RUNNER_TESTNET: 'ecld-pynithy-iotex-testnet',
NODENITHY_RUNNER_TESTNET: 'ecld-nodenithy-iotex-testnet'
},
SEPOLIA: {
PYNITHY_RUNNER_TESTNET: 'ecld-pynithy-ethereum-sepolia',
NODENITHY_RUNNER_TESTNET: 'ecld-nodenithy-ethereum-sepolia'
},
LITVM: {
PYNITHY_RUNNER_TESTNET: 'ecld-pynithy-litvm-testnet',
NODENITHY_RUNNER_TESTNET: 'ecld-nodenithy-litvm-testnet'
}
};
// Shared image-registry contract for the whole ECLD family (Polygon + all
// EVM testnets deployed from pox-smart-contract). Bloxberg keeps its own.
const ECLD_IMAGE_REGISTRY = '0x689f3806874d3c8A973f419a4eB24e6fBA7E830F';
export const ECAddress = {
BLOXBERG: {
TESTNET_ADDRESS: '0x02882F03097fE8cD31afbdFbB5D72a498B41112c',
MAINNET_ADDRESS: '0x549A6E06BB2084100148D50F51CF77a3436C3Ae7',
IMAGE_REGISTRY: {
PYNITHY: {
TESTNET_ADDRESS: '0x15D73a742529C3fb11f3FA32EF7f0CC3870ACA31',
MAINNET_ADDRESS: '0x15D73a742529C3fb11f3FA32EF7f0CC3870ACA31'
},
NODENITHY: {
TESTNET_ADDRESS: '0x15D73a742529C3fb11f3FA32EF7f0CC3870ACA31',
MAINNET_ADDRESS: '0x15D73a742529C3fb11f3FA32EF7f0CC3870ACA31'
}
}
},
POLYGON: {
// TESTNET_ADDRESS is the ERC-20 token (ECLD) contract; TESTNET_PROTOCOL_ADDRESS
// is the PoX protocol contract. Testnet = Polygon Amoy (Mumbai is sunset).
// Token verified on-chain via the Amoy PoX contract's erc20Address().
TESTNET_ADDRESS: '0x9927809B61122B2af3f3b3A3303875e0687b8eE3',
TESTNET_PROTOCOL_ADDRESS: '0x1579b37C5a69ae02dDd23263A2b1318DE66a27C3',
MAINNET_ADDRESS: '0xc6920888988cAcEeA7ACCA0c96f2D65b05eE22Ba',
MAINNET_PROTOCOL_ADDRESS: '0x439945BE73fD86fcC172179021991E96Beff3Cc4',
IMAGE_REGISTRY: {
PYNITHY: {
TESTNET_ADDRESS: '0xeFA33c3976f31961285Ae4f5D10188616C912728',
MAINNET_ADDRESS: ECLD_IMAGE_REGISTRY
},
NODENITHY: {
TESTNET_ADDRESS: '0xeFA33c3976f31961285Ae4f5D10188616C912728',
MAINNET_ADDRESS: ECLD_IMAGE_REGISTRY
}
}
},
IOTEX: {
// ECLD-family token shared across the EVM testnets.
TESTNET_ADDRESS: '0x95Aa17fCFaAB75e8ed7d7DF218045795dCeB9c50',
TESTNET_PROTOCOL_ADDRESS: '0xD56385A97413Ed80E28B1b54A193b98F2C49c975',
IMAGE_REGISTRY: {
PYNITHY: { TESTNET_ADDRESS: '0xa7467A6391816be9367a1cC52E0ef0c15FfE3cCC' },
NODENITHY: { TESTNET_ADDRESS: '0xa7467A6391816be9367a1cC52E0ef0c15FfE3cCC' }
}
},
SEPOLIA: {
TESTNET_ADDRESS: '0x95Aa17fCFaAB75e8ed7d7DF218045795dCeB9c50',
TESTNET_PROTOCOL_ADDRESS: '0x29D3eC870565B6A1510232bd950A8Bc8336f0EB2',
IMAGE_REGISTRY: {
PYNITHY: { TESTNET_ADDRESS: '0x55e0ad455Be85162b71a790f00Fc305680E3CE53' },
NODENITHY: { TESTNET_ADDRESS: '0x55e0ad455Be85162b71a790f00Fc305680E3CE53' }
}
},
LITVM: {
// LitVM LiteForge reuses the Sepolia-family protocol + registry contracts.
TESTNET_ADDRESS: '0x95Aa17fCFaAB75e8ed7d7DF218045795dCeB9c50',
TESTNET_PROTOCOL_ADDRESS: '0x29D3eC870565B6A1510232bd950A8Bc8336f0EB2',
IMAGE_REGISTRY: {
PYNITHY: { TESTNET_ADDRESS: '0x55e0ad455Be85162b71a790f00Fc305680E3CE53' },
NODENITHY: { TESTNET_ADDRESS: '0x55e0ad455Be85162b71a790f00Fc305680E3CE53' }
}
}
};
export const ECNetworkName = {
BLOXBERG: 'bloxberg',
MUMBAI: 'maticmum',
AMOY: 'amoy',
POLYGON: 'matic',
IOTEX: 'iotex',
SEPOLIA: 'sepolia',
LITVM: 'litvm',
OTHER: 'other'
};
export const ECNetworkNameDictionary = {
[]: 'bloxberg',
[]: 'bloxberg',
[]: 'matic',
[]: 'amoy',
[]: 'iotex',
[]: 'sepolia',
[]: 'litvm'
};
export const ECNetworkName1Dictionary = {
[]: 'BLOXBERG',
[]: 'BLOXBERG',
[]: 'POLYGON',
[]: 'AMOY',
[]: 'IOTEX',
[]: 'SEPOLIA',
[]: 'LITVM'
};
// ---------------------------------------------------------------------------
// Network resolver
//
// Historically the runner branched on `networkAddress` (the ERC-20 token
// address) with 2-network switch statements (Bloxberg / Polygon). Adding the
// ECLD-family EVM testnets (Amoy / IoTeX / Sepolia / LitVM) makes that
// unmaintainable, so every network is described once, here, keyed by its token
// address. `resolveNetworkConfig(networkAddress)` returns that descriptor and
// the runner/contracts consume it instead of hardcoding pairs.
//
// family: 'bloxberg' (ETNY token, Bloxberg protocol/ABI) or
// 'ecld' (ECLD token, Polygon protocol/ABI) — the two
// contract families the runner knows how to talk to.
// protocolAddress: PoX protocol contract (for the ecld family this differs
// from the token address; for bloxberg it IS the token
// address, matching the legacy EtnyContract behaviour).
// imageRegistry: { PYNITHY, NODENITHY } on-chain Image Registry addresses.
// isMainnet: production network (CAS attestation, real funds).
// networkName: short name returned by getNetworkName() (chain-id dict).
// ---------------------------------------------------------------------------
export const ECNetworkConfig = {
[]: {
family: 'bloxberg',
protocolAddress: ECAddress.BLOXBERG.TESTNET_ADDRESS,
imageRegistry: {
PYNITHY: ECAddress.BLOXBERG.IMAGE_REGISTRY.PYNITHY.TESTNET_ADDRESS,
NODENITHY: ECAddress.BLOXBERG.IMAGE_REGISTRY.NODENITHY.TESTNET_ADDRESS
},
isMainnet: false,
networkName: 'bloxberg',
networkKey: 'BLOXBERG'
},
[]: {
family: 'bloxberg',
protocolAddress: ECAddress.BLOXBERG.MAINNET_ADDRESS,
imageRegistry: {
PYNITHY: ECAddress.BLOXBERG.IMAGE_REGISTRY.PYNITHY.MAINNET_ADDRESS,
NODENITHY: ECAddress.BLOXBERG.IMAGE_REGISTRY.NODENITHY.MAINNET_ADDRESS
},
isMainnet: true,
networkName: 'bloxberg',
networkKey: 'BLOXBERG'
},
[]: {
family: 'ecld',
protocolAddress: ECAddress.POLYGON.MAINNET_PROTOCOL_ADDRESS,
imageRegistry: {
PYNITHY: ECAddress.POLYGON.IMAGE_REGISTRY.PYNITHY.MAINNET_ADDRESS,
NODENITHY: ECAddress.POLYGON.IMAGE_REGISTRY.NODENITHY.MAINNET_ADDRESS
},
isMainnet: true,
networkName: 'matic',
networkKey: 'POLYGON'
},
[]: {
family: 'ecld',
protocolAddress: ECAddress.POLYGON.TESTNET_PROTOCOL_ADDRESS,
imageRegistry: {
PYNITHY: ECAddress.POLYGON.IMAGE_REGISTRY.PYNITHY.TESTNET_ADDRESS,
NODENITHY: ECAddress.POLYGON.IMAGE_REGISTRY.NODENITHY.TESTNET_ADDRESS
},
isMainnet: false,
networkName: 'amoy',
networkKey: 'POLYGON'
}
};
// IOTEX / SEPOLIA / LITVM all share the same ECLD token address, so they cannot
// be keyed by token address alone. They are resolved by (chainId) at runtime;
// see resolveNetworkConfig. Their descriptors:
export const ECEcldTestnetConfig = {
4690: {
family: 'ecld',
protocolAddress: ECAddress.IOTEX.TESTNET_PROTOCOL_ADDRESS,
imageRegistry: {
PYNITHY: ECAddress.IOTEX.IMAGE_REGISTRY.PYNITHY.TESTNET_ADDRESS,
NODENITHY: ECAddress.IOTEX.IMAGE_REGISTRY.NODENITHY.TESTNET_ADDRESS
},
isMainnet: false,
networkName: 'iotex',
networkKey: 'IOTEX'
},
11155111: {
family: 'ecld',
protocolAddress: ECAddress.SEPOLIA.TESTNET_PROTOCOL_ADDRESS,
imageRegistry: {
PYNITHY: ECAddress.SEPOLIA.IMAGE_REGISTRY.PYNITHY.TESTNET_ADDRESS,
NODENITHY: ECAddress.SEPOLIA.IMAGE_REGISTRY.NODENITHY.TESTNET_ADDRESS
},
isMainnet: false,
networkName: 'sepolia',
networkKey: 'SEPOLIA'
},
4441: {
family: 'ecld',
protocolAddress: ECAddress.LITVM.TESTNET_PROTOCOL_ADDRESS,
imageRegistry: {
PYNITHY: ECAddress.LITVM.IMAGE_REGISTRY.PYNITHY.TESTNET_ADDRESS,
NODENITHY: ECAddress.LITVM.IMAGE_REGISTRY.NODENITHY.TESTNET_ADDRESS
},
isMainnet: false,
networkName: 'litvm',
networkKey: 'LITVM'
}
};
// The ERC-20 token address shared by every ECLD-family testnet deployed from
// pox-smart-contract (IoTeX / Sepolia / LitVM). It cannot be mapped to a single
// network, so it resolves to a provisional descriptor until a chainId is known.
export const ECLD_SHARED_TESTNET_TOKEN = ECAddress.IOTEX.TESTNET_ADDRESS;
// Provisional descriptor for the shared-token ECLD testnets before the chainId
// is known. Enough to build the token contract (EcldContract) in the sync
// constructor; the protocol/registry are finalised by resolveNetworkContext().
const ECLD_PROVISIONAL_CONFIG = {
family: 'ecld',
protocolAddress: undefined,
imageRegistry: { PYNITHY: undefined, NODENITHY: undefined },
isMainnet: false,
networkName: undefined,
networkKey: undefined,
provisional: true
};
/**
* Resolve a network descriptor from the token `networkAddress`, optionally
* disambiguated by `chainId` for the ECLD-family testnets that share a token
* address (IoTeX / Sepolia / LitVM). When the shared token is used without a
* chainId, returns a provisional ECLD descriptor (protocol/registry unresolved)
* so the token contract can still be built; call again with a chainId to get the
* full descriptor. Returns undefined for genuinely unknown networks.
*/
export function resolveNetworkConfig(networkAddress, chainId) {
if (chainId && ECEcldTestnetConfig[chainId]) return ECEcldTestnetConfig[chainId];
const direct = ECNetworkConfig[networkAddress];
if (direct) return direct;
if (networkAddress === ECLD_SHARED_TESTNET_TOKEN) return ECLD_PROVISIONAL_CONFIG;
return undefined;
}
export const ZERO_CHECKSUM = 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855';
export const ECError = {
PARSE_ERROR: 'EtnyParseError',
IPFS_DOWNLOAD_ERROR: 'ECIPFSDownloadError'
};
export const ECLog = {
ERROR: 1,
WARNING: 2,
INFO: 3,
DEBUG: 4,
};