14 lines
56 KiB
YAML
14 lines
56 KiB
YAML
apiVersion: v1
|
|
data:
|
|
cchain.json: '{"networkUpgradeOverrides": {"evmTimestamp": 0, "durangoTimestamp": 0, "quasarTimestamp": 0, "fortunaTimestamp": 0, "graniteTimestamp": 0}, "precompileUpgrades": [{"aiMiningConfig": {"blockTimestamp": 1766708400}}, {"blake3Config": {"blockTimestamp": 1766708400}}, {"cggmp21Verify": {"blockTimestamp": 1766708400}}, {"deadZeroConfig": {"blockTimestamp": 1766708400}}, {"deadConfig": {"blockTimestamp": 1766708400}}, {"deadFullConfig": {"blockTimestamp": 1766708400}}, {"routerConfig": {"blockTimestamp": 1766708400, "v3QuoterAddress": "0x0000000000000000000000000000000000000000", "v3FactoryAddress": "0x0000000000000000000000000000000000000000", "v2RouterAddress": "0x0000000000000000000000000000000000000000", "v2FactoryAddress": "0x0000000000000000000000000000000000000000"}}, {"fheConfig": {"blockTimestamp": 1766708400}}, {"frostVerify": {"blockTimestamp": 1766708400}}, {"graphConfig": {"blockTimestamp": 1766708400}}, {"hpkeConfig": {"blockTimestamp": 1766708400}}, {"mldsaVerify": {"blockTimestamp": 1766708400}}, {"mlkemConfig": {"blockTimestamp": 1766708400}}, {"ringConfig": {"blockTimestamp": 1766708400}}, {"slhdsaVerify": {"blockTimestamp": 1766708400}}, {"zkConfig": {"blockTimestamp": 1766708400}}, {"bls12381G1AddConfig": {"blockTimestamp": 1766708400}}, {"bls12381G1MulConfig": {"blockTimestamp": 1766708400}}, {"bls12381G1MSMConfig": {"blockTimestamp": 1766708400}}, {"bls12381G2AddConfig": {"blockTimestamp": 1766708400}}, {"bls12381G2MulConfig": {"blockTimestamp": 1766708400}}, {"bls12381G2MSMConfig": {"blockTimestamp": 1766708400}}, {"bls12381PairingConfig": {"blockTimestamp": 1766708400}}, {"dexPositionManagerConfig": {"blockTimestamp": 1766708400}}, {"dexStateViewConfig": {"blockTimestamp": 1766708400}}, {"dexQuoterConfig": {"blockTimestamp": 1766708400}}, {"dexSettleConfig": {"blockTimestamp": 1766708400}}, {"pulsarVerify": {"blockTimestamp": 1766708400}}, {"magnetarVerify": {"blockTimestamp": 1766708400}}, {"p3qVerify": {"blockTimestamp": 1766708400}}, {"coronaThreshold": {"blockTimestamp": 1766708400}}, {"hqcEncapsulate": {"blockTimestamp": 1766708400}}, {"curve25519Config": {"blockTimestamp": 1766708400}}, {"x25519Config": {"blockTimestamp": 1766708400}}, {"sr25519Verify": {"blockTimestamp": 1766708400}}, {"babyjubjubConfig": {"blockTimestamp": 1766708400}}, {"pedersenConfig": {"blockTimestamp": 1766708400}}, {"poseidonConfig": {"blockTimestamp": 1766708400}}, {"pastaConfig": {"blockTimestamp": 1766708400}}, {"xwingConfig": {"blockTimestamp": 1766708400}}, {"computeMarketConfig": {"blockTimestamp": 1766708400}}, {"bridgeRegistrarConfig": {"blockTimestamp": 1766708400}}, {"stableSwapConfig": {"blockTimestamp": 1766708400}}, {"vrfConfig": {"blockTimestamp": 1766708400}}, {"attestationConfig": {"blockTimestamp": 1766708400}}, {"anchorConfig": {"blockTimestamp": 1766708400}}, {"fixedPointMathConfig": {"blockTimestamp": 1766708400}}, {"rewardManagerConfig": {"blockTimestamp": 1766708400, "adminAddresses": ["0x9011E888251AB053B7bD1cdB598Db4f9DEd94714"], "initialRewardConfig": {"rewardAddress": "0x8E29b816c6C35b13cE1ff68D33E245C2bda8ac3D"}}}], "stateUpgrades": [{"blockTimestamp": 1766708400, "accounts": {"0x80bBc7C4C7a59C899D1B37BC14539A22D5830a84": {"storage": {"0x0000000000000000000000000000000000000000000000000000000000000003": "0x00000000000000000000000051284dc2133e8d3a8e213dca6a6fa768cfdfcce2"}}, "0xD173926A10A0C4eCd3A51B1422270b65Df0551c1": {"storage": {"0x0000000000000000000000000000000000000000000000000000000000000001": "0x00000000000000000000000051284dc2133e8d3a8e213dca6a6fa768cfdfcce2"}}, "0xeac0a50112b5ee20cc18e42ba4d37777012afd0d": {"storage": {"0x0000000000000000000000000000000000000000000000000000000000000001": "0x00000000000000000000000051284dc2133e8d3a8e213dca6a6fa768cfdfcce2"}}, "0xaa6a41cacb18bed5b98059a5fa30f9dbabe0cc64": {"storage": {"0x0000000000000000000000000000000000000000000000000000000000000001": "0x00000000000000000000000051284dc2133e8d3a8e213dca6a6fa768cfdfcce2"}}, "0xdf1de693c31e2a5eb869c329529623556b20abf3": {"storage": {"0x0000000000000000000000000000000000000000000000000000000000000005": "0x000000000000000000000051284dc2133e8d3a8e213dca6a6fa768cfdfcce212"}}, "0x8031e9b0d02a792cfefaa2bdca6e1289d385426f": {"storage": {"0x0000000000000000000000000000000000000000000000000000000000000005": "0x000000000000000000000051284dc2133e8d3a8e213dca6a6fa768cfdfcce212"}}, "0x79608e442d046ea6d3125931a33ce971ad99c6f9": {"storage": {"0x0000000000000000000000000000000000000000000000000000000000000005": "0x000000000000000000000051284dc2133e8d3a8e213dca6a6fa768cfdfcce212"}}, "0xa85eb8e163f4d70bfc43a4f3fcc9a8dfc42b1ae4": {"storage": {"0x0000000000000000000000000000000000000000000000000000000000000005": "0x000000000000000000000051284dc2133e8d3a8e213dca6a6fa768cfdfcce212"}}, "0x724f4ef0400386fc8c1011788af733bd367ac00f": {"storage": {"0x0000000000000000000000000000000000000000000000000000000000000005": "0x000000000000000000000051284dc2133e8d3a8e213dca6a6fa768cfdfcce212"}}, "0x3569c06a80c148d7b4b67f8a06125f6d59774243": {"storage": {"0x0000000000000000000000000000000000000000000000000000000000000005": "0x000000000000000000000051284dc2133e8d3a8e213dca6a6fa768cfdfcce212"}}, "0x60E0a8167FC13dE89348978860466C9ceC24B9ba": {"storage": {"0x0000000000000000000000000000000000000000000000000000000000000005": "0x00000000000000000000000051284dc2133e8d3a8e213dca6a6fa768cfdfcce2"}}, "0x1E48D32a4F5e9f08DB9aE4959163300FaF8A6C8e": {"storage": {"0x0000000000000000000000000000000000000000000000000000000000000005": "0x00000000000000000000000051284dc2133e8d3a8e213dca6a6fa768cfdfcce2"}}, "0x848Cff46eb323f323b6Bbe1Df274E40793d7f2c2": {"storage": {"0x0000000000000000000000000000000000000000000000000000000000000005": "0x00000000000000000000000051284dc2133e8d3a8e213dca6a6fa768cfdfcce2"}}, "0x5E5290f350352768bD2bfC59c2DA15DD04A7cB88": {"storage": {"0x0000000000000000000000000000000000000000000000000000000000000005": "0x00000000000000000000000051284dc2133e8d3a8e213dca6a6fa768cfdfcce2"}}, "0x26B40f650156C7EbF9e087Dd0dca181Fe87625B7": {"storage": {"0x0000000000000000000000000000000000000000000000000000000000000005": "0x00000000000000000000000051284dc2133e8d3a8e213dca6a6fa768cfdfcce2"}}, "0x6EdcF3645DeF09DB45050638c41157D8B9FEa1cf": {"storage": {"0x0000000000000000000000000000000000000000000000000000000000000005": "0x00000000000000000000000051284dc2133e8d3a8e213dca6a6fa768cfdfcce2"}}, "0x28BfC5DD4B7E15659e41190983e5fE3df1132bB9": {"storage": {"0x0000000000000000000000000000000000000000000000000000000000000005": "0x00000000000000000000000051284dc2133e8d3a8e213dca6a6fa768cfdfcce2"}}, "0x3078847F879A33994cDa2Ec1540ca52b5E0eE2e5": {"storage": {"0x0000000000000000000000000000000000000000000000000000000000000005": "0x00000000000000000000000051284dc2133e8d3a8e213dca6a6fa768cfdfcce2"}}, "0x8B982132d639527E8a0eAAD385f97719af8f5e04": {"storage": {"0x0000000000000000000000000000000000000000000000000000000000000005": "0x00000000000000000000000051284dc2133e8d3a8e213dca6a6fa768cfdfcce2"}}, "0x3141b94b89691009b950c96e97Bff48e0C543E3C": {"storage": {"0x0000000000000000000000000000000000000000000000000000000000000005": "0x00000000000000000000000051284dc2133e8d3a8e213dca6a6fa768cfdfcce2"}}, "0x0e4bd0dd67c15DECFbBBDBbE07Fc9d51D737693D": {"storage": {"0x0000000000000000000000000000000000000000000000000000000000000005": "0x00000000000000000000000051284dc2133e8d3a8e213dca6a6fa768cfdfcce2"}}, "0xf5a313885832d4fc71d1ef80115197c4479b58c8": {"storage": {"0x0000000000000000000000000000000000000000000000000000000000000005": "0x00000000000000000000000051284dc2133e8d3a8e213dca6a6fa768cfdfcce2"}}, "0x1af00a2590a834d14f4a8a26d1b03ebba8cf7961": {"storage": {"0x0000000000000000000000000000000000000000000000000000000000000005": "0x00000000000000000000000051284dc2133e8d3a8e213dca6a6fa768cfdfcce2"}}}}]}'
|
|
hanzo.json: '{"networkUpgradeOverrides": {"evmTimestamp": 0, "durangoTimestamp": 0, "quasarTimestamp": 1766708400, "fortunaTimestamp": 1766708400, "graniteTimestamp": 1766708400}, "precompileUpgrades": [{"warpConfig": {"blockTimestamp": 1766708400, "disable": true}}, {"aiMiningConfig": {"blockTimestamp": 1766708400}}, {"blake3Config": {"blockTimestamp": 1766708400}}, {"cggmp21Verify": {"blockTimestamp": 1766708400}}, {"deadZeroConfig": {"blockTimestamp": 1766708400}}, {"deadConfig": {"blockTimestamp": 1766708400}}, {"deadFullConfig": {"blockTimestamp": 1766708400}}, {"routerConfig": {"blockTimestamp": 1766708400, "v3QuoterAddress": "0x0000000000000000000000000000000000000000", "v3FactoryAddress": "0x0000000000000000000000000000000000000000", "v2RouterAddress": "0x0000000000000000000000000000000000000000", "v2FactoryAddress": "0x0000000000000000000000000000000000000000"}}, {"fheConfig": {"blockTimestamp": 1766708400}}, {"frostVerify": {"blockTimestamp": 1766708400}}, {"graphConfig": {"blockTimestamp": 1766708400}}, {"hpkeConfig": {"blockTimestamp": 1766708400}}, {"mldsaVerify": {"blockTimestamp": 1766708400}}, {"mlkemConfig": {"blockTimestamp": 1766708400}}, {"ringConfig": {"blockTimestamp": 1766708400}}, {"slhdsaVerify": {"blockTimestamp": 1766708400}}, {"zkConfig": {"blockTimestamp": 1766708400}}, {"bls12381G1AddConfig": {"blockTimestamp": 1766708400}}, {"bls12381G1MulConfig": {"blockTimestamp": 1766708400}}, {"bls12381G1MSMConfig": {"blockTimestamp": 1766708400}}, {"bls12381G2AddConfig": {"blockTimestamp": 1766708400}}, {"bls12381G2MulConfig": {"blockTimestamp": 1766708400}}, {"bls12381G2MSMConfig": {"blockTimestamp": 1766708400}}, {"bls12381PairingConfig": {"blockTimestamp": 1766708400}}, {"pulsarVerify": {"blockTimestamp": 1766708400}}, {"magnetarVerify": {"blockTimestamp": 1766708400}}, {"p3qVerify": {"blockTimestamp": 1766708400}}, {"coronaThreshold": {"blockTimestamp": 1766708400}}, {"hqcEncapsulate": {"blockTimestamp": 1766708400}}, {"curve25519Config": {"blockTimestamp": 1766708400}}, {"x25519Config": {"blockTimestamp": 1766708400}}, {"sr25519Verify": {"blockTimestamp": 1766708400}}, {"babyjubjubConfig": {"blockTimestamp": 1766708400}}, {"pedersenConfig": {"blockTimestamp": 1766708400}}, {"poseidonConfig": {"blockTimestamp": 1766708400}}, {"pastaConfig": {"blockTimestamp": 1766708400}}, {"xwingConfig": {"blockTimestamp": 1766708400}}, {"computeMarketConfig": {"blockTimestamp": 1766708400}}, {"bridgeRegistrarConfig": {"blockTimestamp": 1766708400}}, {"stableSwapConfig": {"blockTimestamp": 1766708400}}, {"vrfConfig": {"blockTimestamp": 1766708400}}, {"attestationConfig": {"blockTimestamp": 1766708400}}, {"anchorConfig": {"blockTimestamp": 1766708400}}, {"fixedPointMathConfig": {"blockTimestamp": 1766708400}}, {"dexPositionManagerConfig": {"blockTimestamp": 1766708400}}, {"dexStateViewConfig": {"blockTimestamp": 1766708400}}, {"dexQuoterConfig": {"blockTimestamp": 1766708400}}, {"dexSettleConfig": {"blockTimestamp": 1766708400}}], "stateUpgrades": []}'
|
|
osage.json: '{"networkUpgradeOverrides": {"evmTimestamp": 0, "durangoTimestamp": 0, "quasarTimestamp": 1766708400, "fortunaTimestamp": 1766708400, "graniteTimestamp": 1766708400}, "precompileUpgrades": [{"warpConfig": {"blockTimestamp": 1766708400, "disable": true}}, {"aiMiningConfig": {"blockTimestamp": 1766708400}}, {"blake3Config": {"blockTimestamp": 1766708400}}, {"cggmp21Verify": {"blockTimestamp": 1766708400}}, {"deadZeroConfig": {"blockTimestamp": 1766708400}}, {"deadConfig": {"blockTimestamp": 1766708400}}, {"deadFullConfig": {"blockTimestamp": 1766708400}}, {"routerConfig": {"blockTimestamp": 1766708400, "v3QuoterAddress": "0x0000000000000000000000000000000000000000", "v3FactoryAddress": "0x0000000000000000000000000000000000000000", "v2RouterAddress": "0x0000000000000000000000000000000000000000", "v2FactoryAddress": "0x0000000000000000000000000000000000000000"}}, {"fheConfig": {"blockTimestamp": 1766708400}}, {"frostVerify": {"blockTimestamp": 1766708400}}, {"graphConfig": {"blockTimestamp": 1766708400}}, {"hpkeConfig": {"blockTimestamp": 1766708400}}, {"mldsaVerify": {"blockTimestamp": 1766708400}}, {"mlkemConfig": {"blockTimestamp": 1766708400}}, {"ringConfig": {"blockTimestamp": 1766708400}}, {"slhdsaVerify": {"blockTimestamp": 1766708400}}, {"zkConfig": {"blockTimestamp": 1766708400}}, {"bls12381G1AddConfig": {"blockTimestamp": 1766708400}}, {"bls12381G1MulConfig": {"blockTimestamp": 1766708400}}, {"bls12381G1MSMConfig": {"blockTimestamp": 1766708400}}, {"bls12381G2AddConfig": {"blockTimestamp": 1766708400}}, {"bls12381G2MulConfig": {"blockTimestamp": 1766708400}}, {"bls12381G2MSMConfig": {"blockTimestamp": 1766708400}}, {"bls12381PairingConfig": {"blockTimestamp": 1766708400}}, {"pulsarVerify": {"blockTimestamp": 1766708400}}, {"magnetarVerify": {"blockTimestamp": 1766708400}}, {"p3qVerify": {"blockTimestamp": 1766708400}}, {"coronaThreshold": {"blockTimestamp": 1766708400}}, {"hqcEncapsulate": {"blockTimestamp": 1766708400}}, {"curve25519Config": {"blockTimestamp": 1766708400}}, {"x25519Config": {"blockTimestamp": 1766708400}}, {"sr25519Verify": {"blockTimestamp": 1766708400}}, {"babyjubjubConfig": {"blockTimestamp": 1766708400}}, {"pedersenConfig": {"blockTimestamp": 1766708400}}, {"poseidonConfig": {"blockTimestamp": 1766708400}}, {"pastaConfig": {"blockTimestamp": 1766708400}}, {"xwingConfig": {"blockTimestamp": 1766708400}}, {"computeMarketConfig": {"blockTimestamp": 1766708400}}, {"bridgeRegistrarConfig": {"blockTimestamp": 1766708400}}, {"stableSwapConfig": {"blockTimestamp": 1766708400}}, {"vrfConfig": {"blockTimestamp": 1766708400}}, {"attestationConfig": {"blockTimestamp": 1766708400}}, {"anchorConfig": {"blockTimestamp": 1766708400}}, {"fixedPointMathConfig": {"blockTimestamp": 1766708400}}, {"dexPositionManagerConfig": {"blockTimestamp": 1766708400}}, {"dexStateViewConfig": {"blockTimestamp": 1766708400}}, {"dexQuoterConfig": {"blockTimestamp": 1766708400}}, {"dexSettleConfig": {"blockTimestamp": 1766708400}}], "stateUpgrades": []}'
|
|
pars.json: '{"networkUpgradeOverrides": {"evmTimestamp": 0, "durangoTimestamp": 0, "quasarTimestamp": 1766708400, "fortunaTimestamp": 1766708400, "graniteTimestamp": 1766708400}, "precompileUpgrades": [{"warpConfig": {"blockTimestamp": 1766708400, "disable": true}}, {"aiMiningConfig": {"blockTimestamp": 1766708400}}, {"blake3Config": {"blockTimestamp": 1766708400}}, {"cggmp21Verify": {"blockTimestamp": 1766708400}}, {"deadZeroConfig": {"blockTimestamp": 1766708400}}, {"deadConfig": {"blockTimestamp": 1766708400}}, {"deadFullConfig": {"blockTimestamp": 1766708400}}, {"routerConfig": {"blockTimestamp": 1766708400, "v3QuoterAddress": "0x0000000000000000000000000000000000000000", "v3FactoryAddress": "0x0000000000000000000000000000000000000000", "v2RouterAddress": "0x0000000000000000000000000000000000000000", "v2FactoryAddress": "0x0000000000000000000000000000000000000000"}}, {"fheConfig": {"blockTimestamp": 1766708400}}, {"frostVerify": {"blockTimestamp": 1766708400}}, {"graphConfig": {"blockTimestamp": 1766708400}}, {"hpkeConfig": {"blockTimestamp": 1766708400}}, {"mldsaVerify": {"blockTimestamp": 1766708400}}, {"mlkemConfig": {"blockTimestamp": 1766708400}}, {"ringConfig": {"blockTimestamp": 1766708400}}, {"slhdsaVerify": {"blockTimestamp": 1766708400}}, {"zkConfig": {"blockTimestamp": 1766708400}}, {"bls12381G1AddConfig": {"blockTimestamp": 1766708400}}, {"bls12381G1MulConfig": {"blockTimestamp": 1766708400}}, {"bls12381G1MSMConfig": {"blockTimestamp": 1766708400}}, {"bls12381G2AddConfig": {"blockTimestamp": 1766708400}}, {"bls12381G2MulConfig": {"blockTimestamp": 1766708400}}, {"bls12381G2MSMConfig": {"blockTimestamp": 1766708400}}, {"bls12381PairingConfig": {"blockTimestamp": 1766708400}}, {"pulsarVerify": {"blockTimestamp": 1766708400}}, {"magnetarVerify": {"blockTimestamp": 1766708400}}, {"p3qVerify": {"blockTimestamp": 1766708400}}, {"coronaThreshold": {"blockTimestamp": 1766708400}}, {"hqcEncapsulate": {"blockTimestamp": 1766708400}}, {"curve25519Config": {"blockTimestamp": 1766708400}}, {"x25519Config": {"blockTimestamp": 1766708400}}, {"sr25519Verify": {"blockTimestamp": 1766708400}}, {"babyjubjubConfig": {"blockTimestamp": 1766708400}}, {"pedersenConfig": {"blockTimestamp": 1766708400}}, {"poseidonConfig": {"blockTimestamp": 1766708400}}, {"pastaConfig": {"blockTimestamp": 1766708400}}, {"xwingConfig": {"blockTimestamp": 1766708400}}, {"computeMarketConfig": {"blockTimestamp": 1766708400}}, {"bridgeRegistrarConfig": {"blockTimestamp": 1766708400}}, {"stableSwapConfig": {"blockTimestamp": 1766708400}}, {"vrfConfig": {"blockTimestamp": 1766708400}}, {"attestationConfig": {"blockTimestamp": 1766708400}}, {"anchorConfig": {"blockTimestamp": 1766708400}}, {"fixedPointMathConfig": {"blockTimestamp": 1766708400}}, {"dexPositionManagerConfig": {"blockTimestamp": 1766708400}}, {"dexStateViewConfig": {"blockTimestamp": 1766708400}}, {"dexQuoterConfig": {"blockTimestamp": 1766708400}}, {"dexSettleConfig": {"blockTimestamp": 1766708400}}], "stateUpgrades": []}'
|
|
spc.json: '{"networkUpgradeOverrides": {"evmTimestamp": 0, "durangoTimestamp": 0, "quasarTimestamp": 1766708400, "fortunaTimestamp": 1766708400, "graniteTimestamp": 1766708400}, "precompileUpgrades": [{"warpConfig": {"blockTimestamp": 1766708400, "disable": true}}, {"aiMiningConfig": {"blockTimestamp": 1766708400}}, {"blake3Config": {"blockTimestamp": 1766708400}}, {"cggmp21Verify": {"blockTimestamp": 1766708400}}, {"deadZeroConfig": {"blockTimestamp": 1766708400}}, {"deadConfig": {"blockTimestamp": 1766708400}}, {"deadFullConfig": {"blockTimestamp": 1766708400}}, {"routerConfig": {"blockTimestamp": 1766708400, "v3QuoterAddress": "0x0000000000000000000000000000000000000000", "v3FactoryAddress": "0x0000000000000000000000000000000000000000", "v2RouterAddress": "0x0000000000000000000000000000000000000000", "v2FactoryAddress": "0x0000000000000000000000000000000000000000"}}, {"fheConfig": {"blockTimestamp": 1766708400}}, {"frostVerify": {"blockTimestamp": 1766708400}}, {"graphConfig": {"blockTimestamp": 1766708400}}, {"hpkeConfig": {"blockTimestamp": 1766708400}}, {"mldsaVerify": {"blockTimestamp": 1766708400}}, {"mlkemConfig": {"blockTimestamp": 1766708400}}, {"ringConfig": {"blockTimestamp": 1766708400}}, {"slhdsaVerify": {"blockTimestamp": 1766708400}}, {"zkConfig": {"blockTimestamp": 1766708400}}, {"bls12381G1AddConfig": {"blockTimestamp": 1766708400}}, {"bls12381G1MulConfig": {"blockTimestamp": 1766708400}}, {"bls12381G1MSMConfig": {"blockTimestamp": 1766708400}}, {"bls12381G2AddConfig": {"blockTimestamp": 1766708400}}, {"bls12381G2MulConfig": {"blockTimestamp": 1766708400}}, {"bls12381G2MSMConfig": {"blockTimestamp": 1766708400}}, {"bls12381PairingConfig": {"blockTimestamp": 1766708400}}, {"pulsarVerify": {"blockTimestamp": 1766708400}}, {"magnetarVerify": {"blockTimestamp": 1766708400}}, {"p3qVerify": {"blockTimestamp": 1766708400}}, {"coronaThreshold": {"blockTimestamp": 1766708400}}, {"hqcEncapsulate": {"blockTimestamp": 1766708400}}, {"curve25519Config": {"blockTimestamp": 1766708400}}, {"x25519Config": {"blockTimestamp": 1766708400}}, {"sr25519Verify": {"blockTimestamp": 1766708400}}, {"babyjubjubConfig": {"blockTimestamp": 1766708400}}, {"pedersenConfig": {"blockTimestamp": 1766708400}}, {"poseidonConfig": {"blockTimestamp": 1766708400}}, {"pastaConfig": {"blockTimestamp": 1766708400}}, {"xwingConfig": {"blockTimestamp": 1766708400}}, {"computeMarketConfig": {"blockTimestamp": 1766708400}}, {"bridgeRegistrarConfig": {"blockTimestamp": 1766708400}}, {"stableSwapConfig": {"blockTimestamp": 1766708400}}, {"vrfConfig": {"blockTimestamp": 1766708400}}, {"attestationConfig": {"blockTimestamp": 1766708400}}, {"anchorConfig": {"blockTimestamp": 1766708400}}, {"fixedPointMathConfig": {"blockTimestamp": 1766708400}}, {"dexPositionManagerConfig": {"blockTimestamp": 1766708400}}, {"dexStateViewConfig": {"blockTimestamp": 1766708400}}, {"dexQuoterConfig": {"blockTimestamp": 1766708400}}, {"dexSettleConfig": {"blockTimestamp": 1766708400}}], "stateUpgrades": []}'
|
|
startup.sh: "#!/bin/sh\nset -e\nexport HOME=/data\n\nPOD_INDEX=${HOSTNAME##*-}\necho \"=== luxd startup for $HOSTNAME (network-id=1) ===\"\n\n# Tenant RLP imports are owned by the operator's tenant-import init\n# container; the wipe + download + JSON marker drop happen before this\n# script runs. Below we only:\n# 1. detect whether any request markers are pending,\n# 2. enable --api-admin-enabled if so (luxd needs the admin API to\n# service admin_importChain),\n# 3. after luxd is healthy, loop over pending markers, call\n# admin_importChain via /v1/chain/<chainAlias>/rpc, then write the\n# operator-named sentinel and remove the marker.\n# Re-firing after a spec fix is automatic \u2014 the operator's content-hash\n# addressing emits a new request marker on the next reconcile.\nTENANT_REQ_GLOB=\"/data/db/.tenant-import-request-*.json\"\nif ls $TENANT_REQ_GLOB >/dev/null 2>&1; then\n ADMIN_NEEDED=\"true\"\n echo \"[IMPORT] Pending tenant-import request markers found; admin API will be enabled.\"\nelse\n ADMIN_NEEDED=\"false\"\n echo \"[IMPORT] No pending tenant-import request markers.\"\nfi\n\n# DB wipe disabled - preserve chain state across pod restarts.\n\n# \u2500\u2500 One-shot vote-guard compaction to the CERTIFIED floor \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n# `.guard-reset` holds a base64 vote-guard blob. Applied HERE, before luxd\n# starts, so a graceful shutdown cannot overwrite it and no SIGKILL/torn-write\n# is needed to install it.\n#\n# WHY THIS EXISTS. The guard binds this validator to ONE block per height and\n# refuses to sign a different one there. That is correct and must not be\n# weakened. But the fleet deadlocked at 1098192: each node was bound to a\nif [ -f /data/db/.guard-reset ]; then\n for VG in /data/chainData/*/*/vote-guard; do\n [ -f \"$VG\" ] || continue\n cp -p \"$VG\" \"$VG.pre-reset\"\n if base64 -d < /data/db/.guard-reset > \"$VG.tmp\" && [ -s \"$VG.tmp\" ]; then\n mv \"$VG.tmp\" \"$VG\"\n echo \"[GUARD-RESET] compacted $VG to $(stat -c%s \"$VG\") bytes; prior guard kept at $VG.pre-reset\"\n else\n rm -f \"$VG.tmp\"\n echo \"[GUARD-RESET] ERROR decoding blob; left $VG untouched\" >&2\n fi\n done\n mv /data/db/.guard-reset /data/db/.guard-reset.done\n echo \"[GUARD-RESET] marker consumed -> .guard-reset.done\"\nfi\n\n# Write genesis from base64; translate legacy alloc field names\necho \"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\" | base64 -d | gunzip > /data/genesis.json\nsed -i 's/\"ethAddr\":/\"evmAddr\":/g; s/\"luxAddr\":/\"utxoAddr\":/g' /data/genesis.json\necho \"[GENESIS] Written genesis.json (alloc field names translated to v1.12.19+)\"\n\n# Copy staking keys (skip if already on PVC and secret is empty)\nIDX=${HOSTNAME##*-}\nmkdir -p /data/staking\nif [ -f \"/staking-keys/staker-${IDX}.crt\" ]; then\n cp /staking-keys/staker-${IDX}.crt /data/staking/staker.crt\n cp /staking-keys/staker-${IDX}.key /data/staking/staker.key\n if [ -f \"/staking-keys/signer-${IDX}.key\" ]; then\n cp /staking-keys/signer-${IDX}.key /data/staking/signer.key\n else\n rm -f /data/staking/signer.key\n fi\n echo \"[STAKING] Keys copied from secret for index ${IDX}\"\nelif [ -f /data/staking/staker.crt ] && [ -f /data/staking/staker.key ]; then\n echo \"[STAKING] Using existing keys on PVC for index ${IDX}\"\nelse\n echo \"[STAKING] ERROR: No staking keys available!\" >&2\n exit 1\nfi\n\n# Copy plugins from image (always overwrite \u2014 image builds from source with full precompile registry)\nmkdir -p /data/plugins\nif [ -d /luxd/build/plugins ] && ls /luxd/build/plugins/* >/dev/null 2>&1; then\n for f in /luxd/build/plugins/*; do\n dest=\"/data/plugins/$(basename $f)\"\n # Compare CONTENT, not size. The DexVM plugin differs from the image copy\n # at an IDENTICAL 15917218 bytes, so the size test reported \"unchanged\"\n # and never refreshed it: the PVC kept a build that dies in the ZAP init\n # handshake, D-Chain was never created, and health stayed false forever\n # on a chain rebuilt from genesis.\n if ! cmp -s \"$f\" \"$dest\"; then\n cp \"$f\" \"$dest\"\n chmod +x \"$dest\"\n echo \"[PLUGINS] Updated $(basename $f) from image\"\n else\n echo \"[PLUGINS] $(basename $f) unchanged\"\n fi\n done\nelse\n echo \"[PLUGINS] No plugins in image, using existing PVC plugins\"\nfi\nls -la /data/plugins/ 2>/dev/null || echo \"[PLUGINS] No plugins directory\"\n\n# Bootstrap nodes (exclude self)\nDNS_PREFIX=\"luxd\"\nDNS_SUFFIX=\"luxd-headless.lux-mainnet.svc.cluster.local\"\n# Every peer but self. A node names the frontier by a supermajority of them.\nBOOTSTRAP_IDX=\"0 1 2 3 4\"\nBOOTSTRAP_NODES=\"\"\nfor j in $BOOTSTRAP_IDX; do\n if [ \"$POD_INDEX\" != \"$j\" ]; then\n EP=\"${DNS_PREFIX}-${j}.${DNS_SUFFIX}:9631\"\n BOOTSTRAP_NODES=\"${BOOTSTRAP_NODES:+$BOOTSTRAP_NODES,}$EP\"\n fi\ndone\n\n# --- Public IP: the pod IP, and only the pod IP ---\n# The staking mesh is cluster-internal: svc/luxd-N are ClusterIP and the\n# staking port is published nowhere, so a pod IP is the only address a peer\nPUBLIC_IP=$(hostname -i | awk '{print $1}')\necho \"[IP] Pod: $PUBLIC_IP\"\n\n# luxd arguments\nARGS=\"--network-id=1\"\n# Enable admin API during import\nif [ \"$ADMIN_NEEDED\" = \"true\" ]; then\n ADMIN_ENABLED=\"true\"\nelse\n ADMIN_ENABLED=\"false\"\nfi\nARGS=\"$ARGS --http-host=0.0.0.0 --http-port=9630 --http-allowed-hosts=*\"\nARGS=\"$ARGS --staking-port=9631\"\nARGS=\"$ARGS --data-dir=/data --db-type=zapdb\"\nARGS=\"$ARGS --index-enabled=true\"\nARGS=\"$ARGS --api-admin-enabled=$ADMIN_ENABLED --api-metrics-enabled=true --api-keystore-enabled=false\"\nARGS=\"$ARGS --log-level=info\"\nARGS=\"$ARGS --plugin-dir=/data/plugins\"\nARGS=\"$ARGS --staking-tls-cert-file=/data/staking/staker.crt\"\nARGS=\"$ARGS --staking-tls-key-file=/data/staking/staker.key\"\n[ -f \"/data/staking/signer.key\" ] && ARGS=\"$ARGS --staking-signer-key-file=/data/staking/signer.key\"\nARGS=\"$ARGS --network-compression-type=zstd\"\nARGS=\"$ARGS --consensus-sample-size=5 --consensus-quorum-size=4 --consensus-commit-threshold=2\"\nARGS=\"$ARGS --sybil-protection-enabled=true\"\nARGS=\"$ARGS --network-require-validator-to-connect=true --network-allow-private-ips=true\"\nARGS=\"$ARGS --genesis-file=/data/genesis.json\"\nARGS=\"$ARGS --track-all-chains\"\nARGS=\"$ARGS --dex-validator=true\"\n[ -n \"$PUBLIC_IP\" ] && ARGS=\"$ARGS --public-ip=$PUBLIC_IP\"\n[ -n \"$BOOTSTRAP_NODES\" ] && ARGS=\"$ARGS --bootstrap-nodes=$BOOTSTRAP_NODES\"\n\n# \u2500\u2500 Activate Cancun (MCOPY etc) + canonical precompile schedule \u2500\u2500\n# The canonical lux-mainnet upgrade.json (luxfi/genesis\n# configs/mainnet/upgrade.json) is bundled in THIS ConfigMap under\n# the `c.json` data key and projected at\n# /scripts/cchain.json. We seed it ONLY to the primary\n# C-Chain's per-chain config dir.\n#\n# SCOPE \u2014 primary C-Chain ONLY. L2 (hanzo/zoo/pars/spc)\n# carry their precompile activations AND network-upgrade timestamps\n# in their own per-chain genesis (configs/{l1}-mainnet/genesis.json),\n# baked at block 0. Overwriting their /data/configs/chains/<bid>/\n# upgrade.json with the C-Chain schedule would either be a redundant\n# no-op or \u2014 worse \u2014 re-schedule an already-live precompile to a\n# forward timestamp and brick the chain via\nCHAIN_CONFIG_DIR=\"/data/configs/chains\"\nCCHAIN_ALIAS_DIR=\"${CHAIN_CONFIG_DIR}/C\"\nmkdir -p \"${CCHAIN_ALIAS_DIR}\"\nif [ -f /scripts/cchain.json ]; then\n cp /scripts/cchain.json \"${CCHAIN_ALIAS_DIR}/upgrade.json\"\n echo \"[UPGRADE] canonical upgrade.json seeded at ${CCHAIN_ALIAS_DIR}/upgrade.json (C-Chain only)\"\nelse\n echo \"[UPGRADE] WARN: /scripts/cchain.json missing \u2014 luxd will boot WITHOUT the canonical upgrade schedule\" >&2\nfi\n\n# The C-Chain runs with pruning on. allow-missing-tries lets a database that\n# once ran archive keep running pruned. State sync needs no line here: it is\n# on by default and bounded by its own min-blocks threshold.\nprintf '{\"allow-missing-tries\":true,\"trie-clean-cache\":256,\"trie-dirty-cache\":256,\"snapshot-cache\":128}' > \"${CCHAIN_ALIAS_DIR}/config.json\"\n\n# \u2500\u2500 per-chain precompile activation \u2500\u2500\n# One file per chain, named for the chain. They hold the same schedule today,\n# and they are separate files so that changing one chain's schedule cannot\n# change another's -- a single shared file makes every chain a hostage to the\n# one that needed an edit.\nfor ALIAS in hanzo zoo pars spc osage; do\n DIR=\"${CHAIN_CONFIG_DIR}/${ALIAS}\"\n mkdir -p \"${DIR}\"\n if [ -f \"/scripts/${ALIAS}.json\" ]; then\n cp \"/scripts/${ALIAS}.json\" \"${DIR}/upgrade.json\"\n echo \"[UPGRADE] ${ALIAS}.json seeded at ${DIR}/upgrade.json\"\n else\n echo \"[UPGRADE] WARN: /scripts/${ALIAS}.json missing \u2014 ${ALIAS} boots WITHOUT its precompile schedule\" >&2\n fi\ndone\n\nARGS=\"$ARGS --chain-config-dir=${CHAIN_CONFIG_DIR}\"\n\necho \"\n# Ensure app chain EVM plugin uses our custom EVM build (with all precompiles)\nCCHAIN_PLUGIN=\"mgj786NP7uDwBCcq6YwThhaN8FLyybkCa4zBWTQbNgmK6k9A6\"\nAPPCHAIN_PLUGIN=\"ag3GReYPNuSR17rUP8acMdZipQBikdXNRKDyFszAysmy3vDXE\"\nif [ -f \"/data/plugins/$CCHAIN_PLUGIN\" ]; then\n echo \"[PLUGINS] Copying C-Chain EVM as app chain plugin - shared precompile registry\"\n cp -f \"/data/plugins/$CCHAIN_PLUGIN\" \"/data/plugins/$APPCHAIN_PLUGIN\"\nfi\n\n[START] luxd ${ARGS}\" | head -c 200\necho \"\"\n\n# Canonical chain aliases (single source of truth: chain names).\nmkdir -p /data/configs/chains\ncat > /data/configs/chains/aliases.json <<'ALIASES'\n{\n \"2TdhxqC31SuwuCoaucATqA2vBB9pgXEuMHA5157oUmshN1xEH1\": [\"hanzo\"],\n \"tQzPnApH1xouMVfvt9hXYTcSiSePLpPymLpp4Sztc5BRoNo28\": [\"zoo\"],\n \"SsbCrV3AC3ZnbEsb1Uz7BWsJzLe54wJU3tAWt4mbooF2GLU4J\": [\"pars\"],\n \"yJ9tBVTrvsG2jycf5cNRZshGdPo9Dfb8snST3tsTWDa9i8ctC\": [\"spc\"],\n \"2FtVprwJcS2y7fqSwncdeJcRny1niRragrFtGiC7WQrgDJLc87\": [\"osage\"]\n}\nALIASES\n\n# \u2500\u2500 Signal forwarding \u2500\u2500\n# On `kubectl delete pod`, containerd sends SIGTERM to PID 1 (this shell).\n# luxd installs its OWN SIGINT/SIGTERM handler (app/app.go -> node.Shutdown)\n# that runs graceful shutdown() and DELETES the `ungracefulShutdown` key\n# before DB.Close(). But luxd is BACKGROUNDED here (we do post-launch work,\n# so a bare `exec` is impossible). A bare `wait` with no trap SWALLOWS\n# SIGTERM: the shell never forwards it, luxd runs until the cgroup SIGKILLs\n# it at grace expiry -> shutdown() never runs -> the non-atomic\n# proposervm/inner-EVM commit is torn mid-write -> \"proposervm state\n# truncated/inconsistent\" -> C-VM refuses to init. Install a TERM/INT trap\n# that forwards to luxd + a guarded double-wait (end of script) that blocks\n# PID 1 until luxd has actually flushed and exited.\nTERM_RECEIVED=\"\"\nterm() {\n TERM_RECEIVED=1\n echo \"[SIGNAL] SIGTERM/INT received -> forwarding to luxd (pid ${LUXD_PID:-?}) for graceful shutdown\"\n kill -TERM \"$LUXD_PID\" 2>/dev/null || true\n}\ntrap term TERM INT\n\n/luxd/build/luxd $ARGS &\nLUXD_PID=$!\nset +e\n\ni=0\nwhile [ \"$i\" -lt 180 ]; do\n [ -n \"$TERM_RECEIVED\" ] && break\n # Liveness answers 200 as soon as the HTTP server is up, which is the right\n # gate for the admin RPC below. The node serves under /v1 only.\n curl -sf -m 2 http://127.0.0.1:9630/v1/health/ops/liveness >/dev/null 2>&1 && echo \"[HEALTHY] after ${i}s\" && break\n i=$((i + 1))\n sleep 1\ndone\n\n# Generic tenant-import loop. Iterates every operator-written request\n# marker, calls admin_importChain, then writes the matching sentinel.\n# No hardcoded tenant names \u2014 the marker JSON carries chainAlias,\n# rlpPath, and sentinelPath, all derived from LuxNetwork.spec.tenantImports[]\n# by luxfi/operator's BuildTenantImportInitContainer.\nif [ \"$ADMIN_NEEDED\" = \"true\" ]; then\n for MARKER in $TENANT_REQ_GLOB; do\n [ -n \"$TERM_RECEIVED\" ] && break\n [ -f \"$MARKER\" ] || continue\n # Minimal JSON field extraction without jq dependency. sh-only.\n ALIAS=$(sed -n 's/.*\"chainAlias\":\"\\([^\"]*\\)\".*/\\1/p' \"$MARKER\")\n RLP_PATH=$(sed -n 's/.*\"rlpPath\":\"\\([^\"]*\\)\".*/\\1/p' \"$MARKER\")\n SENT_PATH=$(sed -n 's/.*\"sentinelPath\":\"\\([^\"]*\\)\".*/\\1/p' \"$MARKER\")\n TENANT=$(sed -n 's/.*\"tenant\":\"\\([^\"]*\\)\".*/\\1/p' \"$MARKER\")\n HASH=$(sed -n 's/.*\"contentHash\":\"\\([^\"]*\\)\".*/\\1/p' \"$MARKER\")\n if [ -z \"$ALIAS\" ] || [ -z \"$RLP_PATH\" ] || [ -z \"$SENT_PATH\" ]; then\n echo \"[IMPORT] WARN: marker $MARKER missing required fields; skipping\" >&2\n continue\n fi\n echo \"[IMPORT] tenant=$TENANT alias=$ALIAS hash=$HASH rlp=$RLP_PATH\"\n # In the background so PID 1's wait stays interruptible: a foreground curl\n # holds the shell for its whole timeout, and a signal arriving in that window\n # is only handled once it returns \u2014 past the grace period, so luxd is killed\n # mid-write instead of shutting down. Backgrounded, wait returns the instant\n # the signal fires and the trap forwards it.\n IMPORT_OUT=\"/data/db/.tenant-import.out.$$\"\n curl -s --max-time 21600 -X POST -H \"Content-Type: application/json\" \\\n -d \"{\\\"jsonrpc\\\":\\\"2.0\\\",\\\"method\\\":\\\"admin_importChain\\\",\\\"params\\\":[\\\"$RLP_PATH\\\"],\\\"id\\\":1}\" \\\n \"http://127.0.0.1:9630/v1/chain/$ALIAS/rpc\" > \"$IMPORT_OUT\" 2>&1 &\n IMPORT_PID=$!\n wait \"$IMPORT_PID\"; CURL_RC=$?\n if [ -n \"$TERM_RECEIVED\" ]; then\n kill \"$IMPORT_PID\" 2>/dev/null || true\n rm -f \"$IMPORT_OUT\"\n echo \"[IMPORT] SIGTERM during import -> aborted; luxd shutting down gracefully; marker PRESERVED for retry on next boot\"\n break\n fi\n RESULT=$(cat \"$IMPORT_OUT\" 2>/dev/null)\n rm -f \"$IMPORT_OUT\"\n echo \"[IMPORT] $TENANT/$ALIAS result (rc=$CURL_RC): $RESULT\"\n # Sentinel only on real success. Two failure surfaces:\n # 1. curl rc != 0 \u2014 transport/protocol fail (luxd not ready,\n # network issue). Leave marker so next reconcile retries.\n # 2. curl rc == 0 BUT body carries `\"error\":` \u2014 \"silent success\"\n # bug the old `curl -sf` check missed. HTTP 200 + JSON-RPC\n # error was treated as import success and the sentinel got\n # written even though no blocks were loaded. Most common\n # cause: \"block N parent mismatch\" \u2014 the RLP archive's genesis\n # hash doesn't match the running chain's block 0 (structural,\n # retrying won't help; the genesis is wrong for this RLP).\n # Distinguish: rc!=0 retries automatically; the JSON-RPC error\n # case logs LOUDLY and preserves the marker so an operator\n # notices and decides whether to fix the genesis or accept loss.\n if [ \"$CURL_RC\" != \"0\" ]; then\n echo \"[IMPORT] $TENANT/$ALIAS curl failed (rc=$CURL_RC); marker preserved for retry on next reconcile.\"\n elif echo \"$RESULT\" | grep -q '\"error\"'; then\n ERR_MSG=$(echo \"$RESULT\" | sed -n 's/.*\"message\":\"\\([^\"]*\\)\".*/\\1/p')\n echo \"[IMPORT] $TENANT/$ALIAS JSON-RPC ERROR: ${ERR_MSG:-unknown}\" >&2\n echo \"[IMPORT] $TENANT/$ALIAS marker PRESERVED; operator must triage. Common cause: genesis-hash mismatch (cmd/rlp-verify in luxfi/genesis surfaces this).\" >&2\n else\n touch \"$SENT_PATH\"\n rm -f \"$MARKER\"\n echo \"[IMPORT] $TENANT/$ALIAS sentinel $SENT_PATH written; marker removed.\"\n fi\n done\nfi\n\n# \u2500\u2500 Guarded double-wait \u2500\u2500\n# First wait returns the instant the TERM trap fires (luxd got SIGTERM) OR\n# luxd self-exits. If luxd is still alive (signal path), block again until it\n# has truly flushed and exited \u2014 otherwise PID 1 returns, the cgroup is torn\n# down, and luxd is SIGKILLed mid-flush (exactly the failure we eliminate).\n# The kill -0 guard is robust across ash/dash/bash reaping differences and\n# captures luxd's real exit code.\nwait \"$LUXD_PID\"; RC=$?\nwhile kill -0 \"$LUXD_PID\" 2>/dev/null; do\n wait \"$LUXD_PID\"; RC=$?\ndone\necho \"[EXIT] luxd exited rc=$RC\"\nexit \"$RC\""
|
|
zoo.json: '{"networkUpgradeOverrides": {"evmTimestamp": 0, "durangoTimestamp": 0, "quasarTimestamp": 1766708400, "fortunaTimestamp": 1766708400, "graniteTimestamp": 1766708400}, "precompileUpgrades": [{"warpConfig": {"blockTimestamp": 1766708400, "disable": true}}, {"aiMiningConfig": {"blockTimestamp": 1766708400}}, {"blake3Config": {"blockTimestamp": 1766708400}}, {"cggmp21Verify": {"blockTimestamp": 1766708400}}, {"deadZeroConfig": {"blockTimestamp": 1766708400}}, {"deadConfig": {"blockTimestamp": 1766708400}}, {"deadFullConfig": {"blockTimestamp": 1766708400}}, {"routerConfig": {"blockTimestamp": 1766708400, "v3QuoterAddress": "0x0000000000000000000000000000000000000000", "v3FactoryAddress": "0x0000000000000000000000000000000000000000", "v2RouterAddress": "0x0000000000000000000000000000000000000000", "v2FactoryAddress": "0x0000000000000000000000000000000000000000"}}, {"fheConfig": {"blockTimestamp": 1766708400}}, {"frostVerify": {"blockTimestamp": 1766708400}}, {"graphConfig": {"blockTimestamp": 1766708400}}, {"hpkeConfig": {"blockTimestamp": 1766708400}}, {"mldsaVerify": {"blockTimestamp": 1766708400}}, {"mlkemConfig": {"blockTimestamp": 1766708400}}, {"ringConfig": {"blockTimestamp": 1766708400}}, {"slhdsaVerify": {"blockTimestamp": 1766708400}}, {"zkConfig": {"blockTimestamp": 1766708400}}, {"bls12381G1AddConfig": {"blockTimestamp": 1766708400}}, {"bls12381G1MulConfig": {"blockTimestamp": 1766708400}}, {"bls12381G1MSMConfig": {"blockTimestamp": 1766708400}}, {"bls12381G2AddConfig": {"blockTimestamp": 1766708400}}, {"bls12381G2MulConfig": {"blockTimestamp": 1766708400}}, {"bls12381G2MSMConfig": {"blockTimestamp": 1766708400}}, {"bls12381PairingConfig": {"blockTimestamp": 1766708400}}, {"pulsarVerify": {"blockTimestamp": 1766708400}}, {"magnetarVerify": {"blockTimestamp": 1766708400}}, {"p3qVerify": {"blockTimestamp": 1766708400}}, {"coronaThreshold": {"blockTimestamp": 1766708400}}, {"hqcEncapsulate": {"blockTimestamp": 1766708400}}, {"curve25519Config": {"blockTimestamp": 1766708400}}, {"x25519Config": {"blockTimestamp": 1766708400}}, {"sr25519Verify": {"blockTimestamp": 1766708400}}, {"babyjubjubConfig": {"blockTimestamp": 1766708400}}, {"pedersenConfig": {"blockTimestamp": 1766708400}}, {"poseidonConfig": {"blockTimestamp": 1766708400}}, {"pastaConfig": {"blockTimestamp": 1766708400}}, {"xwingConfig": {"blockTimestamp": 1766708400}}, {"computeMarketConfig": {"blockTimestamp": 1766708400}}, {"bridgeRegistrarConfig": {"blockTimestamp": 1766708400}}, {"stableSwapConfig": {"blockTimestamp": 1766708400}}, {"vrfConfig": {"blockTimestamp": 1766708400}}, {"attestationConfig": {"blockTimestamp": 1766708400}}, {"anchorConfig": {"blockTimestamp": 1766708400}}, {"fixedPointMathConfig": {"blockTimestamp": 1766708400}}, {"dexPositionManagerConfig": {"blockTimestamp": 1766708400}}, {"dexStateViewConfig": {"blockTimestamp": 1766708400}}, {"dexQuoterConfig": {"blockTimestamp": 1766708400}}, {"dexSettleConfig": {"blockTimestamp": 1766708400}}], "stateUpgrades": []}'
|
|
kind: ConfigMap
|
|
metadata:
|
|
name: luxd-startup
|
|
namespace: lux-mainnet
|