{
  "protocol": "pow-20",
  "parameterVersion": "5.9",
  "_comment": "POW-20 genesis constants. The sha256 of this file is the indexer's single trust root; it must be hard-coded in source and anchored in the genesis inscription (spec v5.3 §8.4). The indexer, CLI miner, web miner and front end all read this same file and each verifies it at startup. Fields are frozen permanently once genesis is cut.",
  "wordlist": {
    "file": "POW20-wordlist-v1.0.txt",
    "sha256": "5cc8bd30ba09f3e6b8c0f29e3c6028296b72701308fce9c902c8f3d3a64e4114",
    "bytes": 582748,
    "count": 60203
  },
  "letterScores": {
    "a": 1,
    "b": 5,
    "c": 2,
    "d": 3,
    "e": 1,
    "f": 8,
    "g": 5,
    "h": 4,
    "i": 1,
    "j": 71,
    "k": 13,
    "l": 2,
    "m": 4,
    "n": 2,
    "o": 2,
    "p": 4,
    "q": 64,
    "r": 2,
    "s": 2,
    "t": 2,
    "u": 3,
    "v": 11,
    "w": 15,
    "x": 35,
    "y": 5,
    "z": 30
  },
  "baseScore": 41,
  "rate": 250,
  "difficulty": "20000",
  "threshold": "0x000346dc5d63886594af4f0d844d013a",
  "window": 100,
  "limits": {
    "_comment": "maxJsonDepth / maxJsonFields were removed in spec §11: §4.4.1 requires JSON to be a flat object whose values are all strings, which leaves both without an object. They must not be reintroduced.",
    "maxCalldataBytes": 512,
    "nonceHexDigits": 16
  },
  "invariants": {
    "totalScore": 4000000,
    "totalFaceValue": "1000000000"
  },
  "stateHash": {
    "domain": "POW-20-STATE-v1",
    "buckets": 64,
    "entriesBucketSize": 941
  },
  "provenance": {
    "_comment": "Wordlist provenance and published artifacts (spec §2.1 / §2.2). Not part of adjudication, but anchored in the genesis inscription alongside the wordlist: the removal list is the only evidence for the claim that these 60,203 words were not hand-picked by the deployer. Since v5.0 the build script and all three source versions are anchored, so both layers of reproducibility in Appendix A hold.",
    "wordnetVersion": "3.0",
    "wordnetCorpusSha256Prefix": "cbda5ea6eef7f36a97a43d4a75f85e07",
    "nltkVersion": "3.10.2",
    "glossSource": "ECDICT",
    "glossRelease": "1.0.28",
    "glossArchive": "ecdict-sqlite-28.zip",
    "glossSha256": "ea01f76a3b3351021ce47077e89234465cc9441c8793054495320d06c0c3f3f6",
    "frequencySource": "wordfreq",
    "frequencyVersion": "3.1.1",
    "buildScript": {
      "file": "build/build_wordlist.py",
      "sha256": "7c9310b20c8a0a8be1e707c4f969857a96453f2754d8d2e3551ea9c437a10aba"
    },
    "nonWordsRules": {
      "file": "build/rules/non_words.txt",
      "sha256": "f3288b3a9e187718b2a2a434732650c6e5403e95f03cac407ef1c392430eff3c",
      "count": 206
    },
    "glossMismatchRules": {
      "_comment": "Rule 9. Words whose ECDICT Chinese gloss does not agree with the WordNet English sense that the dictionary shows -- either it names a different concept (a surname, a bare cross-reference, another word entirely) or it gives a different part of speech. Rules 5-7 require that a Chinese gloss exist; only a reading of both glosses side by side can say whether it is a gloss of the same thing, so this is a reviewed list, entry by entry, like non_words.",
      "file": "build/rules/gloss_mismatch.txt",
      "sha256": "a22f1bb689381c599090b016bab4475f22086d61f521567877b1c13f505600ad",
      "count": 386
    },
    "removedList": {
      "file": "POW20-removed-list.txt",
      "sha256": "b1ea4206149e20eb00ea0f4e24b8ab45c9a4eedfcb12e83278d04b3c9a0bcbff",
      "bytes": 220450,
      "count": 3509,
      "annotated": true
    },
    "alignmentTrimCount": 15,
    "alignmentTrimList": [
      "admix",
      "amyxia",
      "antitoxic",
      "apraxic",
      "ataraxic",
      "ataxy",
      "atoxic",
      "auxinic",
      "axiomatical",
      "bauxitic",
      "biaxal",
      "broadax",
      "coaxal",
      "coaxingly",
      "cylix"
    ]
  },
  "deployment": {
    "_comment": "Filled in before the trust root is published, never after: this file's sha256 IS the trust root (spec 8.4), so any later edit invalidates every release that carries it. deployer and startBlock are DECLARED here rather than derived from the chain (v5.9, spec 10.4) - deriving them handed both to whoever inscribed a manifest first. They must be non-null before mainnet; null means this build is pre-genesis and the daemon refuses to start. genesisBlock / genesisInscriptionTx stay absent: they are facts about an inscription that does not exist yet when this file is hashed. marketContracts may be empty at genesis and filled by amendment (spec 10.7).",
    "deployer": "0xe3aa89e34514f60893843c1acf6f813ac1f74e73",
    "startBlock": 11494600,
    "marketContracts": ["0xf4fbdffbe98f2a5d96c3672e34cfea79ca8fa5e6"],
    "releaseKeyFingerprint": null,
    "indexerRepo": null
  }
}
