diff options
Diffstat (limited to 'JSONSchema')
-rw-r--r-- | JSONSchema/bc-filler-schema.json | 333 | ||||
-rw-r--r-- | JSONSchema/bc-schema.json | 774 | ||||
-rw-r--r-- | JSONSchema/definitions.json | 320 | ||||
-rw-r--r-- | JSONSchema/st-filler-schema.json | 438 | ||||
-rw-r--r-- | JSONSchema/st-schema.json | 354 | ||||
-rwxr-xr-x | JSONSchema/validate.js | 82 | ||||
-rw-r--r-- | JSONSchema/vm-filler-schema.json | 162 | ||||
-rw-r--r-- | JSONSchema/vm-schema.json | 141 |
8 files changed, 1566 insertions, 1038 deletions
diff --git a/JSONSchema/bc-filler-schema.json b/JSONSchema/bc-filler-schema.json new file mode 100644 index 000000000..d3c8f9d6d --- /dev/null +++ b/JSONSchema/bc-filler-schema.json @@ -0,0 +1,333 @@ +{ + "definitions": { + "BadHexData": { + "pattern": "^0x[0-9a-zA-Z]*$", + "type": "string" + }, + "Block": { + "additionalProperties": false, + "properties": { + "//comment": { + "type": "string" + }, + "blockHeader": { + "$ref": "#/definitions/BlockHeader" + }, + "blockHeaderPremine": { + + }, + "blocknumber": { + "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" + }, + "chainname": { + "type": "string" + }, + "chainnetwork": { + "type": "string" + }, + "comment": { + "type": "string" + }, + "expectExceptionALL": { + "type": "string" + }, + "expectExceptionByzantium": { + "type": "string" + }, + "expectExceptionConstantinople": { + "type": "string" + }, + "expectExceptionEIP150": { + "type": "string" + }, + "expectExceptionEIP158": { + "type": "string" + }, + "expectExceptionFrontier": { + "type": "string" + }, + "expectExceptionHomestead": { + "type": "string" + }, + "rlp": { + "$ref": "#/definitions/BadHexData" + }, + "transactions": { + "items": { + "$ref": "#/definitions/Transaction" + }, + "type": "array" + }, + "uncleHeaders": { + "type": "array" + } + }, + "type": "object" + }, + "BlockHeader": { + "properties": { + "bloom": { + "$ref": "#/definitions/IntegerOrConfusedHex" + }, + "coinbase": { + "$ref": "#/definitions/AddressMaybePrefixOrEmpty" + }, + "difficulty": { + "$ref": "#/definitions/IntegerOrConfusedHex" + }, + "extraData": { + "$ref": "#/definitions/HexMaybePrefixOrEmpty" + }, + "gasLimit": { + "$ref": "#/definitions/IntegerOrConfusedHex" + }, + "gasUsed": { + "$ref": "#/definitions/IntegerOrConfusedHex" + }, + "hash": { + "$ref": "#/definitions/IntegerOrConfusedHex" + }, + "mixHash": { + "$ref": "#/definitions/IntegerOrConfusedHex" + }, + "nonce": { + "$ref": "#/definitions/IntegerOrConfusedHex" + }, + "number": { + "$ref": "#/definitions/IntegerOrConfusedHex" + }, + "parentHash": { + "$ref": "#/definitions/IntegerOrConfusedHex" + }, + "receiptTrie": { + "$ref": "#/definitions/IntegerOrConfusedHex" + }, + "stateRoot": { + "$ref": "#/definitions/IntegerOrConfusedHex" + }, + "timestamp": { + "$ref": "#/definitions/IntegerOrConfusedHex" + }, + "transactionsTrie": { + "$ref": "#/definitions/IntegerOrConfusedHex" + }, + "uncleHash": { + "$ref": "#/definitions/IntegerOrConfusedHex" + } + } + }, + "BlockHeaderPremine": { + "properties": { + "difficulty": { + "$ref": "#/definitions/IntegerOrConfusedHex" + }, + "gasLimit": { + "$ref": "#/definitions/IntegerOrConfusedHex" + }, + "timestamp": { + "$ref": "#/definitions/IntegerOrConfusedHex" + }, + "updatePow": { + "$ref": "#/definitions/IntegerOrConfusedHex" + } + } + }, + "NullSenderTransaction": { + "additionalProperties": true, + "not": { + "required": [ + "secretKey" + ] + }, + "properties": { + "data": { + "items": { + "$ref": "#/definitions/HexMaybePrefixOrEmpty" + }, + "type": "array" + }, + "gasLimit": { + "items": { + "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" + }, + "type": "array" + }, + "gasPrice": { + "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" + }, + "nonce": { + "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" + }, + "r": { + "$ref": "#/definitions/TxSigR" + }, + "s": { + "$ref": "#/definitions/TxSigS" + }, + "to": { + "$ref": "#/definitions/AddressMaybePrefixOrEmpty" + }, + "v": { + "$ref": "#/definitions/TxSigV" + }, + "value": { + "items": { + "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" + }, + "type": "array" + } + }, + "required": [ + "data", + "gasLimit", + "gasPrice", + "nonce", + "r", + "s", + "v", + "to", + "value" + ], + "type": "object" + }, + "PreStateAccount": { + "additionalproperties": true, + "properties": { + "balance": { + "$ref": "#/definitions/ConfusedHexType" + }, + "code": { + "$ref": "#/definitions/LLLCode" + }, + "nonce": { + "$ref": "#/definitions/ConfusedHexType" + }, + "storage": { + "additionalProperties": false, + "patternProperties": { + "^0x[0-9a-f]*": { + "$ref": "#/definitions/HexData", + "description": "storage key with 0x. data is HexData" + } + }, + "type": "object" + } + }, + "required": [ + "balance", + "code", + "nonce" + ], + "type": "object" + }, + "Transaction": { + "additionalProperties": true, + "not": { + "required": [ + "r, s, v" + ] + }, + "properties": { + "data": { + "$ref": "#/definitions/HexDataOrEmpty" + }, + "gasLimit": { + "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" + }, + "gasPrice": { + "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" + }, + "nonce": { + "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" + }, + "secretKey": { + "$ref": "#/definitions/HexMaybePrefix" + }, + "to": { + "$ref": "#/definitions/AddressMaybePrefixOrEmpty" + }, + "value": { + "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" + } + }, + "required": [ + "data", + "gasLimit", + "gasPrice", + "nonce", + "to", + "value" + ], + "type": "object" + }, + "TxSigR": { + "oneOf": [ + { + "enum": [ + "0x00" + ] + } + ] + }, + "TxSigS": { + "oneOf": [ + { + "enum": [ + "0x00" + ] + } + ] + }, + "TxSigV": { + "description": "a value of 0 is an invalid chainId, but used in a test case", + "oneOf": [ + { + "enum": [ + "0x00", + "0x01" + ] + } + ] + } + }, + "patternProperties": { + "^.*$": { + "properties": { + "blocks": { + "items": { + "$ref": "#/definitions/Block" + }, + "type": "array" + }, + "genesisBlockHeader": { + "$ref": "#/definitions/BlockHeader" + }, + "genesisRLP": { + "$ref": "#/definitions/ConfusedHexType" + }, + "expect": { + "patternProperties": { + "^0x[0-9a-f]*": { + "$ref": "#/definitions/PreStateAccount", + "description": "poststate account address with 0x prefix" + } + } + }, + "pre": { + "patternProperties": { + "^0x[0-9a-f]*": { + "$ref": "#/definitions/PreStateAccount", + "description": "prestate account address with 0x prefix" + } + } + } + }, + "required": [ + "pre", + "blocks", + "genesisBlockHeader" + ], + "type": "object" + } + } +} diff --git a/JSONSchema/bc-schema.json b/JSONSchema/bc-schema.json index 26ef855e1..729638d1a 100644 --- a/JSONSchema/bc-schema.json +++ b/JSONSchema/bc-schema.json @@ -1,491 +1,317 @@ { - "definitions": { - "Block": { - "type": "object", - "properties": { - "blockHeader": { - "$ref": "#/definitions/BlockHeader" + "definitions": { + "BadHexData": { + "pattern": "^0x[0-9a-zA-Z]*$", + "type": "string" }, - "rlp": { - "$ref": "#/definitions/HexData" - }, - "transactions": { - "type": "array", - "items": { - "$ref": "#/definitions/Transaction" - } - }, - "uncleHeaders": { - "type": "array" - }, - "expectExceptionHomestead": { - "type": "string" - }, - "expectExceptionFrontier": { - "type": "string" - }, - "expectExceptionEIP158": { - "type": "string" - }, - "expectExceptionEIP150": { - "type": "string" - }, - "expectExceptionALL": { - "type": "string" - }, - "expectExceptionByzantium": { - "type": "string" - }, - "expectExceptionConstantinople": { - "type": "string" - }, - "blocknumber": { - "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" - }, - "chainname": { - "type": "string" - }, - "chainnetwork": { - "type": "string" - }, - "comment": { - "type": "string" - } - }, - "additionalProperties": false - }, - "BlockHeader": { - "properties": { - "bloom": { - "$ref": "#/definitions/HexData" - }, - "coinbase": { - "$ref": "#/definitions/AddressMaybePrefixOrEmpty" - }, - "difficulty": { - "$ref": "#/definitions/ConfusedHexType" - }, - "extraData": { - "$ref": "#/definitions/HexMaybePrefixOrEmpty" - }, - "gasLimit": { - "$ref": "#/definitions/ConfusedHexType" - }, - "gasUsed": { - "$ref": "#/definitions/ConfusedHexType" - }, - "hash": { - "$ref": "#/definitions/ConfusedHexType" - }, - "mixHash": { - "$ref": "#/definitions/ConfusedHexType" - }, - "nonce": { - "$ref": "#/definitions/ConfusedHexType" - }, - "number": { - "$ref": "#/definitions/ConfusedHexType" - }, - "parentHash": { - "$ref": "#/definitions/ConfusedHexType" - }, - "receiptTrie": { - "$ref": "#/definitions/ConfusedHexType" - }, - "stateRoot": { - "$ref": "#/definitions/ConfusedHexType" - }, - "timestamp": { - "$ref": "#/definitions/ConfusedHexType" - }, - "transactionsTrie": { - "$ref": "#/definitions/ConfusedHexType" - }, - "uncleHash": { - "$ref": "#/definitions/ConfusedHexType" - } - } - }, - "EmptyString": { - "type": "string", - "pattern": "^$" - }, - "HexData": { - "description": "Hex data. see https://github.com/ethereum/wiki/wiki/JSON-RPC#hex-value-encoding", - "pattern": "^0x([0-9a-fA-F][0-9a-fA-F])*$", - "type": "string" - }, - "HexQuantity": { - "description": "Hex quantity. see https://github.com/ethereum/wiki/wiki/JSON-RPC#hex-value-encoding", - "pattern": "(^0x0$)|(^0x[1-9a-fA-F][0-9a-fA-F]*$)", - "type": "string" - }, - "ConfusedHexType": { - "anyOf": [ - { - "$ref": "#/definitions/HexData" - }, - { - "$ref": "#/definitions/HexQuantity" - } - ] - }, - "HexDataOrEmpty": { - "oneOf": [ - { - "$ref": "#/definitions/HexData" - }, - { - "$ref": "#/definitions/EmptyString" - } - ] - }, - "HexNoPrefix": { - "pattern": "^([0-9a-fA-F][0-9a-fA-F])+$", - "type": "string" - }, - "HexMaybePrefix": { - "oneOf": [ - { - "$ref": "#/definitions/HexNoPrefix" - }, - { - "$ref": "#/definitions/HexData" - } - ] - }, - "HexMaybePrefixOrEmpty": { - "oneOf": [ - { - "$ref": "#/definitions/HexMaybePrefix" - }, - { - "$ref": "#/definitions/EmptyString" - } - ] - }, - "IntegerString": { - "pattern": "^[0-9]+$", - "type": "string" - }, - "IntegerOrEmpty": { - "oneOf": [ - { - "$ref": "#/definitions/IntegerString" - }, - { - "$ref": "#/definitions/EmptyString" - } - ] - }, - "IntegerOrNumber": { - "oneOf": [ - { - "$ref": "#/definitions/IntegerString" - }, - { - "type": "number" - } - ] - }, - "IntegerOrNumberOrConfusedHex": { - "oneOf": [ - { - "$ref": "#/definitions/IntegerOrNumber" - }, - { - "$ref": "#/definitions/ConfusedHexType" - } - ] - }, - "IntegerOrEmptyOrHexQuantity": { - "oneOf": [ - { - "$ref": "#/definitions/IntegerOrEmpty" - }, - { - "$ref": "#/definitions/HexQuantity" - } - ] - }, - "IntegerOrHexQuantity": { - "oneOf": [ - { - "$ref": "#/definitions/IntegerString" - }, - { - "$ref": "#/definitions/HexQuantity" - } - ] - }, - "IntegerOrConfusedHex": { - "anyOf": [ - { - "$ref": "#/definitions/IntegerString" - }, - { - "$ref": "#/definitions/ConfusedHexType" - } - ] - }, - "IntegerOrEmptyOrConfusedHex": { - "oneOf": [ - { - "$ref": "#/definitions/IntegerOrEmpty" - }, - { - "$ref": "#/definitions/ConfusedHexType" - } - ] - }, - "PreStateAccount": { - "type": "object", - "additionalproperties": true, - "properties": { - "balance": { - "$ref": "#/definitions/ConfusedHexType" - }, - "code": { - "$ref": "#/definitions/HexMaybePrefixOrEmpty" - }, - "nonce": { - "$ref": "#/definitions/ConfusedHexType" + "Block": { + "additionalProperties": false, + "properties": { + "blockHeader": { + "$ref": "#/definitions/BlockHeader" + }, + "blocknumber": { + "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" + }, + "chainname": { + "type": "string" + }, + "chainnetwork": { + "type": "string" + }, + "comment": { + "type": "string" + }, + "expectExceptionALL": { + "type": "string" + }, + "expectExceptionByzantium": { + "type": "string" + }, + "expectExceptionConstantinople": { + "type": "string" + }, + "expectExceptionEIP150": { + "type": "string" + }, + "expectExceptionEIP158": { + "type": "string" + }, + "expectExceptionFrontier": { + "type": "string" + }, + "expectExceptionHomestead": { + "type": "string" + }, + "rlp": { + "$ref": "#/definitions/BadHexData" + }, + "transactions": { + "items": { + "$ref": "#/definitions/Transaction" + }, + "type": "array" + }, + "uncleHeaders": { + "type": "array" + } + }, + "type": "object" }, - "storage": { - "type": "object", - "additionalProperties": false, - "patternProperties": { - "^0x[0-9a-f]+": { - "description": "storage key with 0x. data is HexData", - "$ref": "#/definitions/HexData" + "BlockHeader": { + "properties": { + "bloom": { + "$ref": "#/definitions/HexData" + }, + "coinbase": { + "$ref": "#/definitions/AddressMaybePrefixOrEmpty" + }, + "difficulty": { + "$ref": "#/definitions/ConfusedHexType" + }, + "extraData": { + "$ref": "#/definitions/HexMaybePrefixOrEmpty" + }, + "gasLimit": { + "$ref": "#/definitions/ConfusedHexType" + }, + "gasUsed": { + "$ref": "#/definitions/ConfusedHexType" + }, + "hash": { + "$ref": "#/definitions/ConfusedHexType" + }, + "mixHash": { + "$ref": "#/definitions/ConfusedHexType" + }, + "nonce": { + "$ref": "#/definitions/ConfusedHexType" + }, + "number": { + "$ref": "#/definitions/ConfusedHexType" + }, + "parentHash": { + "$ref": "#/definitions/ConfusedHexType" + }, + "receiptTrie": { + "$ref": "#/definitions/ConfusedHexType" + }, + "stateRoot": { + "$ref": "#/definitions/ConfusedHexType" + }, + "timestamp": { + "$ref": "#/definitions/ConfusedHexType" + }, + "transactionsTrie": { + "$ref": "#/definitions/ConfusedHexType" + }, + "uncleHash": { + "$ref": "#/definitions/ConfusedHexType" + } } - } - } - }, - "required": [ - "balance", - "code", - "nonce" - ] - }, - "TxSigR": { - "oneOf": [ - { - "enum": [ - "0x00" - ] - } - ] - }, - "TxSigS": { - "oneOf": [ - { - "enum": [ - "0x00" - ] - } - ] - }, - "TxSigV": { - "description": "a value of 0 is an invalid chainId, but used in a test case", - "oneOf": [ - { - "enum": [ - "0x00", - "0x01" - ] - } - ] - }, - "HexLen40": { - "pattern": "^0x[0-9a-fA-F]{40}$", - "type": "string" - }, - "HexNoPrefixLen40": { - "pattern": "^[0-9a-fA-F]{40}$", - "type": "string" - }, - "AddressMaybePrefixOrEmpty": { - "oneOf": [ - { - "$ref": "#/definitions/HexLen40" - }, - { - "$ref": "#/definitions/HexNoPrefixLen40" - }, - { - "$ref": "#/definitions/EmptyString" - } - ] - }, - "Transaction": { - "type": "object", - "additionalProperties": true, - "not": { - "required": [ - "r, s, v" - ] - }, - "properties": { - "data": { - "$ref": "#/definitions/HexDataOrEmpty" - }, - "gasLimit": { - "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" - }, - "gasPrice": { - "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" - }, - "nonce": { - "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" - }, - "secretKey": { - "$ref": "#/definitions/HexMaybePrefix" - }, - "to": { - "$ref": "#/definitions/AddressMaybePrefixOrEmpty" }, - "value": { - "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" - } - }, - "required": [ - "data", - "gasLimit", - "gasPrice", - "nonce", - "to", - "value" - ] - }, - "NullSenderTransaction": { - "type": "object", - "additionalProperties": true, - "not": { - "required": [ - "secretKey" - ] - }, - "properties": { - "data": { - "items": { - "$ref": "#/definitions/HexMaybePrefixOrEmpty" - }, - "type": "array" - }, - "gasLimit": { - "items": { - "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" - }, - "type": "array" - }, - "gasPrice": { - "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" - }, - "nonce": { - "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" - }, - "r": { - "$ref": "#/definitions/TxSigR" - }, - "s": { - "$ref": "#/definitions/TxSigS" + "NullSenderTransaction": { + "additionalProperties": true, + "not": { + "required": [ + "secretKey" + ] + }, + "properties": { + "data": { + "items": { + "$ref": "#/definitions/HexMaybePrefixOrEmpty" + }, + "type": "array" + }, + "gasLimit": { + "items": { + "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" + }, + "type": "array" + }, + "gasPrice": { + "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" + }, + "nonce": { + "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" + }, + "r": { + "$ref": "#/definitions/TxSigR" + }, + "s": { + "$ref": "#/definitions/TxSigS" + }, + "to": { + "$ref": "#/definitions/AddressMaybePrefixOrEmpty" + }, + "v": { + "$ref": "#/definitions/TxSigV" + }, + "value": { + "items": { + "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" + }, + "type": "array" + } + }, + "required": [ + "data", + "gasLimit", + "gasPrice", + "nonce", + "r", + "s", + "v", + "to", + "value" + ], + "type": "object" }, - "to": { - "$ref": "#/definitions/AddressMaybePrefixOrEmpty" + "PreStateAccount": { + "additionalproperties": true, + "properties": { + "balance": { + "$ref": "#/definitions/ConfusedHexType" + }, + "code": { + "$ref": "#/definitions/HexMaybePrefixOrEmpty" + }, + "nonce": { + "$ref": "#/definitions/ConfusedHexType" + }, + "storage": { + "additionalProperties": false, + "patternProperties": { + "^0x[0-9a-f]*": { + "$ref": "#/definitions/HexData", + "description": "storage key with 0x. data is HexData" + } + }, + "type": "object" + } + }, + "required": [ + "balance", + "code", + "nonce" + ], + "type": "object" }, - "v": { - "$ref": "#/definitions/TxSigV" + "Transaction": { + "additionalProperties": true, + "not": { + "required": [ + "r, s, v" + ] + }, + "properties": { + "data": { + "$ref": "#/definitions/HexDataOrEmpty" + }, + "gasLimit": { + "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" + }, + "gasPrice": { + "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" + }, + "nonce": { + "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" + }, + "secretKey": { + "$ref": "#/definitions/HexMaybePrefix" + }, + "to": { + "$ref": "#/definitions/AddressMaybePrefixOrEmpty" + }, + "value": { + "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" + } + }, + "required": [ + "data", + "gasLimit", + "gasPrice", + "nonce", + "to", + "value" + ], + "type": "object" }, - "value": { - "items": { - "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" - }, - "type": "array" + "TxSigR": { + "oneOf": [ + { + "enum": [ + "0x00" + ] + } + ] + }, + "TxSigS": { + "oneOf": [ + { + "enum": [ + "0x00" + ] + } + ] + }, + "TxSigV": { + "description": "a value of 0 is an invalid chainId, but used in a test case", + "oneOf": [ + { + "enum": [ + "0x00", + "0x01" + ] + } + ] } - }, - "required": [ - "data", - "gasLimit", - "gasPrice", - "nonce", - "r", - "s", - "v", - "to", - "value" - ] }, - "TransactionResults": { - "items": { - "additionalProperties": false, - "properties": { - "hash": { - "$ref": "#/definitions/HexData" - }, - "logs": {}, - "indexes": { - "additionalProperties": false, + "patternProperties": { + "^.*$": { "properties": { - "data": { - "type": "integer" - }, - "gas": { - "type": "integer" - }, - "value": { - "type": "integer" - } + "_info": { + "$ref": "#/definitions/Info" + }, + "blocks": { + "items": { + "$ref": "#/definitions/Block" + }, + "type": "array" + }, + "genesisBlockHeader": { + "$ref": "#/definitions/BlockHeader" + }, + "genesisRLP": { + "$ref": "#/definitions/ConfusedHexType" + }, + "postState": { + "patternProperties": { + "^0x[0-9a-f]*": { + "$ref": "#/definitions/PreStateAccount", + "description": "poststate account address with 0x prefix" + } + } + }, + "pre": { + "patternProperties": { + "^0x[0-9a-f]*": { + "$ref": "#/definitions/PreStateAccount", + "description": "prestate account address with 0x prefix" + } + } + } }, "required": [ - "data", - "gas", - "value" + "postState", + "pre", + "network", + "lastblockhash", + "blocks", + "genesisBlockHeader" ], "type": "object" - } - }, - "required": [ - "hash", - "indexes" - ], - "type": "object" - }, - "type": "array" - } - }, - "patternProperties": { - "^.*$": { - "type": "object", - "properties": { - "genesisBlockHeader": { - "$ref": "#/definitions/BlockHeader" - }, - "genesisRLP": { - "$ref": "#/definitions/ConfusedHexType" - }, - "blocks": { - "type": "array", - "items": { - "$ref": "#/definitions/Block" - } } - }, - "postState": { - "$ref": "#/definitions/TransactionResults" - }, - "pre": { - "$ref": "#/definitions/TransactionResults" - } - }, - "required": [ - "postState", - "pre", - "network", - "lastblockhash", - "blocks", - "genesisRLP", - "genesisBlockHeader" - ] - } + } } diff --git a/JSONSchema/definitions.json b/JSONSchema/definitions.json new file mode 100644 index 000000000..45088f2bb --- /dev/null +++ b/JSONSchema/definitions.json @@ -0,0 +1,320 @@ +{ + "definitions": { + "AddressMaybePrefixOrEmpty": { + "oneOf": [ + { + "$ref": "#/definitions/HexLen40" + }, + { + "$ref": "#/definitions/HexNoPrefixLen40" + }, + { + "$ref": "#/definitions/EmptyString" + } + ] + }, + "ConfusedHexType": { + "anyOf": [ + { + "$ref": "#/definitions/HexData" + }, + { + "$ref": "#/definitions/HexQuantity" + } + ] + }, + "EmptyString": { + "pattern": "^$", + "type": "string" + }, + "ExpectCondition": { + "additionalProperties": false, + "properties": { + "//comment": { + "type": "string" + }, + "indexes": { + "additionalProperties": false, + "properties": { + "data": { + "$ref": "#/definitions/Indices" + }, + "gas": { + "$ref": "#/definitions/Indices" + }, + "value": { + "$ref": "#/definitions/Indices" + } + }, + "result": { + "$ref": "#/definitions/PostStateAccounts" + } + }, + "network": { + "$ref": "#/definitions/Networks" + }, + "result": { + "$ref": "#/definitions/AccountMap" + } + }, + "type": "object" + }, + "HexData": { + "description": "Hex data. see https://github.com/ethereum/wiki/wiki/JSON-RPC#hex-value-encoding", + "pattern": "^0x([0-9a-fA-F][0-9a-fA-F])*$", + "type": "string" + }, + "HexDataOrEmpty": { + "oneOf": [ + { + "$ref": "#/definitions/HexData" + }, + { + "$ref": "#/definitions/EmptyString" + } + ] + }, + "HexLen40": { + "pattern": "^0x[0-9a-fA-F]{40}$", + "type": "string" + }, + "HexMaybePrefix": { + "oneOf": [ + { + "$ref": "#/definitions/HexNoPrefix" + }, + { + "$ref": "#/definitions/HexData" + } + ] + }, + "HexMaybePrefixOrEmpty": { + "oneOf": [ + { + "$ref": "#/definitions/HexMaybePrefix" + }, + { + "$ref": "#/definitions/EmptyString" + } + ] + }, + "HexNoPrefix": { + "pattern": "^([0-9a-fA-F][0-9a-fA-F])+$", + "type": "string" + }, + "HexNoPrefixLen40": { + "pattern": "^[0-9a-fA-F]{40}$", + "type": "string" + }, + "HexQuantity": { + "description": "Hex quantity. see https://github.com/ethereum/wiki/wiki/JSON-RPC#hex-value-encoding", + "pattern": "(^0x0$)|(^0x[1-9a-fA-F][0-9a-fA-F]*$)", + "type": "string" + }, + "Info": { + "description": "Information block for filled tests.", + "properties": { + "comment": { + "type": "string" + }, + "filledwith": { + "type": "string" + }, + "lllcversion": { + "type": "string" + }, + "source": { + "type": "string" + }, + "sourceHash": { + "type": "string" + } + }, + "required": [ + "source", + "sourceHash" + ] + }, + "Indices": { + "anyOf": [ + { + "type": "array" + }, + { + "type": "string" + }, + { + "type": "number" + } + ] + }, + "IntegerOrConfusedHex": { + "anyOf": [ + { + "$ref": "#/definitions/IntegerString" + }, + { + "$ref": "#/definitions/ConfusedHexType" + } + ] + }, + "IntegerOrEmpty": { + "oneOf": [ + { + "$ref": "#/definitions/IntegerString" + }, + { + "$ref": "#/definitions/EmptyString" + } + ] + }, + "IntegerOrEmptyOrConfusedHex": { + "oneOf": [ + { + "$ref": "#/definitions/IntegerOrEmpty" + }, + { + "$ref": "#/definitions/ConfusedHexType" + } + ] + }, + "IntegerOrEmptyOrHexQuantity": { + "oneOf": [ + { + "$ref": "#/definitions/IntegerOrEmpty" + }, + { + "$ref": "#/definitions/HexQuantity" + } + ] + }, + "IntegerOrHexQuantity": { + "oneOf": [ + { + "$ref": "#/definitions/IntegerString" + }, + { + "$ref": "#/definitions/HexQuantity" + } + ] + }, + "IntegerOrNumber": { + "oneOf": [ + { + "$ref": "#/definitions/IntegerString" + }, + { + "type": "number" + } + ] + }, + "IntegerOrNumberOrConfusedHex": { + "oneOf": [ + { + "$ref": "#/definitions/IntegerOrNumber" + }, + { + "$ref": "#/definitions/ConfusedHexType" + } + ] + }, + "IntegerString": { + "pattern": "^[0-9]+$", + "type": "string" + }, + "LLLCode": { + "pattern": "^.*$", + "type": "string" + }, + "Networks": { + "type": "array" + }, + "NonExistentPostStateAccount": { + "additionalproperties": true, + "properties": { + "shouldnotexist": { + "type": "boolean" + } + }, + "required": [ + "shouldnotexist" + ], + "type": "object" + }, + "PostStateAccounts": { + "additionalProperties": false, + "patternProperties": { + "^0x[0-9a-fA-F]{40}": { + "description": "filler prestate addresses with 0x prefix", + "oneOf": [ + { + "$ref": "#/definitions/PreStateAccount" + }, + { + "$ref": "#/definitions/NonExistentPostStateAccount" + } + ] + }, + "^[0-9a-fA-F]{40}": { + "description": "filler prestate addresses without 0x prefix", + "oneOf": [ + { + "$ref": "#/definitions/PreStateAccount" + }, + { + "$ref": "#/definitions/NonExistentPostStateAccount" + } + ] + } + }, + "type": "object" + }, + "PrefixedHexOrInteger": { + "anyOf": [ + { + "$ref": "#/definitions/IntegerString" + }, + { + "$ref": "#/definitions/HexData" + } + ] + }, + "TransactionResults": { + "items": { + "additionalProperties": false, + "properties": { + "hash": { + "$ref": "#/definitions/HexData" + }, + "indexes": { + "additionalProperties": false, + "properties": { + "data": { + "type": "integer" + }, + "gas": { + "type": "integer" + }, + "value": { + "type": "integer" + } + }, + "required": [ + "data", + "gas", + "value" + ], + "type": "object" + }, + "logs": {} + }, + "required": [ + "hash", + "indexes" + ], + "type": "object" + }, + "type": "array" + } + } +} diff --git a/JSONSchema/st-filler-schema.json b/JSONSchema/st-filler-schema.json index d110e0493..9c810bee1 100644 --- a/JSONSchema/st-filler-schema.json +++ b/JSONSchema/st-filler-schema.json @@ -1,188 +1,55 @@ { "definitions": { - "EmptyString": { - "type": "string", - "pattern": "^$" - }, - "HexData": { - "description": "Hex data. see https://github.com/ethereum/wiki/wiki/JSON-RPC#hex-value-encoding", - "pattern": "^0x([0-9a-fA-F][0-9a-fA-F])*$", - "type": "string" - }, - "HexQuantity": { - "description": "Hex quantity. see https://github.com/ethereum/wiki/wiki/JSON-RPC#hex-value-encoding", - "pattern": "(^0x0$)|(^0x[1-9a-fA-F][0-9a-fA-F]*$)", - "type": "string" - }, - "ConfusedHexType": { - "anyOf": [ - { "$ref": "#/definitions/HexData" }, - { "$ref": "#/definitions/HexQuantity" } - ] - }, - "TxData": { - "oneOf": [ - { "$ref": "#/definitions/HexData" }, - { "$ref": "#/definitions/EmptyString" }, - { "$ref": "#/definitions/LLLCode" } - ] - }, - "LLLCode" : { - "type" : "string", - "pattern" : "^{.*}$" - }, - "HexNoPrefix" : { - "pattern": "^([0-9a-fA-F][0-9a-fA-F])+$", - "type": "string" - }, - "HexMaybePrefix": { - "oneOf": [ - { "$ref": "#/definitions/HexNoPrefix" }, - { "$ref": "#/definitions/HexData" } - ] - }, - "HexMaybePrefixOrEmpty": { - "oneOf": [ - { "$ref": "#/definitions/HexMaybePrefix" }, - { "$ref": "#/definitions/EmptyString" } - ] - }, - "IntegerString": { - "pattern": "^[0-9]+$", - "type": "string" - }, - "IntegerOrEmpty": { - "oneOf": [ - { "$ref": "#/definitions/IntegerString" }, - { "$ref": "#/definitions/EmptyString" } - ] - }, - "IntegerOrNumber": { - "oneOf": [ - { "$ref": "#/definitions/IntegerString" }, - { "type": "number" } - ] - }, - "IntegerOrNumberOrConfusedHex": { - "oneOf": [ - { "$ref": "#/definitions/IntegerOrNumber" }, - { "$ref": "#/definitions/ConfusedHexType" } - ] - }, - "IntegerOrEmptyOrHexQuantity": { - "oneOf": [ - { "$ref": "#/definitions/IntegerOrEmpty" }, - { "$ref": "#/definitions/HexQuantity" } - ] - }, - "IntegerOrHexQuantity": { - "oneOf": [ - { "$ref": "#/definitions/IntegerString" }, - { "$ref": "#/definitions/HexQuantity" } - ] - }, - "IntegerOrConfusedHex": { - "anyOf": [ - { "$ref": "#/definitions/IntegerString" }, - { "$ref": "#/definitions/ConfusedHexType" } - ] - }, - "IntegerOrEmptyOrConfusedHex": { - "oneOf": [ - { "$ref": "#/definitions/IntegerOrEmpty" }, - { "$ref": "#/definitions/ConfusedHexType" } - ] - }, - "PrefixedHexOrInteger": { - "anyOf": [ - { "$ref": "#/definitions/IntegerString" }, - { "$ref": "#/definitions/HexData" } - ] - }, - "PreStateAccount": { - "type": "object", - "additionalproperties": true, - "properties": { - "balance": { "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" }, - "code": { "type": "string" }, - "nonce": { "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" }, - "storage": { - "type": "object", - "additionalProperties": false, - "patternProperties": { - "^0x[0-9a-f]+": { - "description": "storage key with 0x prefix, just the prefix `0x` is null and thus not permitted, a hex quantity is permitted. for the storage value, only hex data is permitted in filled test. Both decimal and hex allowed for the fillers.", - "$ref": "#/definitions/PrefixedHexOrInteger" - } - } - } - } - }, - "NonExistentPostStateAccount": { - "type": "object", - "additionalproperties": true, - "properties": { - "shouldnotexist": { - "type": "boolean" + "AccountMap": { + "additionalProperties": false, + "patternProperties": { + "^0x[0-9a-fA-F]{40}": { + "$ref": "#/definitions/PreStateAccount", + "description": "filler prestate addresses with 0x prefix" + }, + "^[0-9a-fA-F]{40}": { + "$ref": "#/definitions/PreStateAccount", + "description": "filler prestate addresses without 0x prefix" } }, - "required": [ - "shouldnotexist" - ] - - }, - "TxSigR": { - "oneOf": [ - { "enum" : [ "0" ] } - ] - }, - "TxSigS": { - "oneOf": [ - { "enum" : [ "0" ] } - ] - }, - "TxSigV": { - "description": "a value of 0 is an invalid chainId, but used in a test case", - "oneOf": [ - { "enum" : [ "0", "1" ] } - ] - }, - "HexLen40": { - "pattern": "^0x[0-9a-fA-F]{40}$", - "type": "string" - }, - "HexNoPrefixLen40": { - "pattern": "^[0-9a-fA-F]{40}$", - "type": "string" - }, - "AddressMaybePrefixOrEmpty" : { - "oneOf": [ - { "$ref": "#/definitions/HexLen40" }, - { "$ref": "#/definitions/HexNoPrefixLen40" }, - { "$ref": "#/definitions/EmptyString" } - ] + "type": "object" }, - "Transaction": { - "type": "object", - "additionalProperties": true, - "not": { - "required": ["r, s, v"] - }, + "NullSenderTransaction": { "properties": { "data": { - "items": { "$ref": "#/definitions/TxData" }, + "items": { + "$ref": "#/definitions/TxData" + }, "type": "array" }, "gasLimit": { - "items": { "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" }, + "items": { + "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" + }, "type": "array" }, - "gasPrice": { "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" }, - "nonce": { "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" }, - "secretKey": { "$ref": "#/definitions/HexMaybePrefix" }, - "to": { "$ref": "#/definitions/AddressMaybePrefixOrEmpty"}, + "gasPrice": { + "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" + }, + "nonce": { + "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" + }, + "r": { + "$ref": "#/definitions/TxSigR" + }, + "s": { + "$ref": "#/definitions/TxSigS" + }, + "to": { + "$ref": "#/definitions/AddressMaybePrefixOrEmpty" + }, + "v": { + "$ref": "#/definitions/TxSigV" + }, "value": { - "items": { "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" }, + "items": { + "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" + }, "type": "array" } }, @@ -191,34 +58,78 @@ "gasLimit", "gasPrice", "nonce", - "secretKey", + "r", + "s", + "v", "to", "value" - ] + ], + "type": "object" }, - "NullSenderTransaction": { - "type": "object", - "additionalProperties": true, - "not": { - "required": ["secretKey"] + "PreStateAccount": { + "additionalproperties": true, + "properties": { + "balance": { + "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" + }, + "code": { + "type": "string" + }, + "nonce": { + "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" + }, + "storage": { + "additionalProperties": false, + "patternProperties": { + "^0x[0-9a-f]+": { + "$ref": "#/definitions/PrefixedHexOrInteger", + "description": "storage key with 0x prefix, just the prefix `0x` is null and thus not permitted, a hex quantity is permitted. for the storage value, only hex data is permitted in filled test. Both decimal and hex allowed for the fillers." + } + }, + "type": "object" + } }, + "type": "object" + }, + "Transaction": { "properties": { "data": { - "items": { "$ref": "#/definitions/TxData" }, + "items": { + "$ref": "#/definitions/TxData" + }, "type": "array" }, "gasLimit": { - "items": { "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" }, + "items": { + "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" + }, "type": "array" }, - "gasPrice": { "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" }, - "nonce": { "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" }, - "r": { "$ref": "#/definitions/TxSigR" }, - "s": { "$ref": "#/definitions/TxSigS" }, - "to": { "$ref": "#/definitions/AddressMaybePrefixOrEmpty"}, - "v": { "$ref": "#/definitions/TxSigV" }, + "gasPrice": { + "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" + }, + "nonce": { + "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" + }, + "r": { + "$ref": "#/definitions/TxSigR" + }, + "s": { + "$ref": "#/definitions/TxSigS" + }, + "secretKey": { + "$ref": "#/definitions/HexMaybePrefix" + }, + "to": { + "$ref": "#/definitions/AddressMaybePrefixOrEmpty" + }, + "v": { + "$ref": "#/definitions/TxSigV" + }, "value": { - "items": { "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" }, + "items": { + "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" + }, "type": "array" } }, @@ -227,75 +138,52 @@ "gasLimit", "gasPrice", "nonce", - "r", - "s", - "v", + "secretKey", "to", "value" - ] + ], + "type": "object" }, - "PostStateAccounts": { - "additionalProperties": false, - "patternProperties": { - "^[0-9a-fA-F]{40}": { - "description": "filler prestate addresses without 0x prefix", - "oneOf": [ - {"$ref": "#/definitions/PreStateAccount"}, - {"$ref": "#/NonExistentPostStateAccount"} - ] + "TxData": { + "anyOf": [ + { + "$ref": "#/definitions/HexData" }, - "^0x[0-9a-fA-F]{40}": { - "description": "filler prestate addresses with 0x prefix", - "oneOf": [ - {"$ref": "#/definitions/PreStateAccount"}, - {"$ref": "#/NonExistentPostStateAccount"} - ] + { + "$ref": "#/definitions/EmptyString" + }, + { + "$ref": "#/definitions/LLLCode" } - }, - "type": "object" - }, - "ExpectCondition": { - "type": "object", - "properties": { - "result": { "$ref": "#/definitions/AccountMap" }, - "network": { "$ref": "#/definitions/Networks" }, - "indexes": { - "properties": { - "data": { "$ref": "#/definitions/Indices" }, - "gas": { "$ref": "#/definitions/Indices" }, - "value": { "$ref": "#/definitions/Indices" } - }, - "result": { - "$ref": "#/definitions/PostStateAccounts" - }, - "additionalProperties": false - }, - "//comment": { "type": "string" } - }, - "additionalProperties": false + ] }, - "AccountMap": { - "additionalProperties": false, - "patternProperties": { - "^[0-9a-fA-F]{40}": { - "description": "filler prestate addresses without 0x prefix", - "$ref": "#/definitions/PreStateAccount" - }, - "^0x[0-9a-fA-F]{40}": { - "description": "filler prestate addresses with 0x prefix", - "$ref": "#/definitions/PreStateAccount" - } - }, - "type": "object" + "TxSigR": { + "oneOf": [ + { + "enum": [ + "0" + ] + } + ] }, - "Networks": { - "type": "array" + "TxSigS": { + "oneOf": [ + { + "enum": [ + "0" + ] + } + ] }, - "Indices": { - "anyOf": [ - { "type": "array" }, - { "type": "string" }, - { "type": "number" } + "TxSigV": { + "description": "a value of 0 is an invalid chainId, but used in a test case", + "oneOf": [ + { + "enum": [ + "0", + "1" + ] + } ] } }, @@ -305,12 +193,24 @@ "env": { "additionalproperties": false, "properties": { - "currentCoinbase": { "$ref": "#/definitions/HexMaybePrefix" }, - "currentDifficulty": { "$ref": "#/definitions/IntegerOrConfusedHex" }, - "currentGasLimit": { "$ref": "#/definitions/IntegerOrConfusedHex" }, - "currentNumber": { "$ref": "#/definitions/IntegerOrConfusedHex" }, - "currentTimestamp": { "$ref": "#/definitions/IntegerOrNumberOrConfusedHex" }, - "previousHash": { "$ref": "#/definitions/HexMaybePrefix" } + "currentCoinbase": { + "$ref": "#/definitions/HexMaybePrefix" + }, + "currentDifficulty": { + "$ref": "#/definitions/IntegerOrConfusedHex" + }, + "currentGasLimit": { + "$ref": "#/definitions/IntegerOrConfusedHex" + }, + "currentNumber": { + "$ref": "#/definitions/IntegerOrConfusedHex" + }, + "currentTimestamp": { + "$ref": "#/definitions/IntegerOrNumberOrConfusedHex" + }, + "previousHash": { + "$ref": "#/definitions/HexMaybePrefix" + } }, "required": [ "currentCoinbase", @@ -323,27 +223,33 @@ "type": "object" }, "expect": { - "type": "array", - "items": { "$ref": "#/definitions/ExpectCondition" } + "items": { + "$ref": "#/definitions/ExpectCondition" + }, + "type": "array" }, "pre": { "additionalProperties": false, "patternProperties": { - "^[0-9a-fA-F]{40}": { - "description": "filler prestate addresses without 0x prefix", - "$ref": "#/definitions/PreStateAccount" - }, "^0x[0-9a-fA-F]{40}": { - "description": "filler prestate addresses with 0x prefix", - "$ref": "#/definitions/PreStateAccount" + "$ref": "#/definitions/PreStateAccount", + "description": "filler prestate addresses with 0x prefix" + }, + "^[0-9a-fA-F]{40}": { + "$ref": "#/definitions/PreStateAccount", + "description": "filler prestate addresses without 0x prefix" } }, "type": "object" }, "transaction": { "oneOf": [ - { "$ref": "#/definitions/Transaction" }, - { "$ref": "#/definitions/NullSenderTransaction" } + { + "$ref": "#/definitions/Transaction" + }, + { + "$ref": "#/definitions/NullSenderTransaction" + } ] } }, @@ -351,4 +257,4 @@ } }, "type": "object" -} +}
\ No newline at end of file diff --git a/JSONSchema/st-schema.json b/JSONSchema/st-schema.json index 7b1536dae..fa4ad181a 100644 --- a/JSONSchema/st-schema.json +++ b/JSONSchema/st-schema.json @@ -1,169 +1,47 @@ { "definitions": { - "EmptyString": { - "type": "string", - "pattern": "^$" - }, - "HexData": { - "description": "Hex data. see https://github.com/ethereum/wiki/wiki/JSON-RPC#hex-value-encoding", - "pattern": "^0x([0-9a-fA-F][0-9a-fA-F])*$", - "type": "string" - }, - "HexQuantity": { - "description": "Hex quantity. see https://github.com/ethereum/wiki/wiki/JSON-RPC#hex-value-encoding", - "pattern": "(^0x0$)|(^0x[1-9a-fA-F][0-9a-fA-F]*$)", - "type": "string" - }, - "ConfusedHexType": { - "anyOf": [ - { "$ref": "#/definitions/HexData" }, - { "$ref": "#/definitions/HexQuantity" } - ] - }, - "HexDataOrEmpty": { - "oneOf": [ - { "$ref": "#/definitions/HexData" }, - { "$ref": "#/definitions/EmptyString" } - ] - }, - "HexNoPrefix" : { - "pattern": "^([0-9a-fA-F][0-9a-fA-F])+$", - "type": "string" - }, - "HexMaybePrefix": { - "oneOf": [ - { "$ref": "#/definitions/HexNoPrefix" }, - { "$ref": "#/definitions/HexData" } - ] - }, - "HexMaybePrefixOrEmpty": { - "oneOf": [ - { "$ref": "#/definitions/HexMaybePrefix" }, - { "$ref": "#/definitions/EmptyString" } - ] - }, - "IntegerString": { - "pattern": "^[0-9]+$", - "type": "string" - }, - "IntegerOrEmpty": { - "oneOf": [ - { "$ref": "#/definitions/IntegerString" }, - { "$ref": "#/definitions/EmptyString" } - ] - }, - "IntegerOrNumber": { - "oneOf": [ - { "$ref": "#/definitions/IntegerString" }, - { "type": "number" } - ] - }, - "IntegerOrNumberOrConfusedHex": { - "oneOf": [ - { "$ref": "#/definitions/IntegerOrNumber" }, - { "$ref": "#/definitions/ConfusedHexType" } - ] - }, - "IntegerOrEmptyOrHexQuantity": { - "oneOf": [ - { "$ref": "#/definitions/IntegerOrEmpty" }, - { "$ref": "#/definitions/HexQuantity" } - ] - }, - "IntegerOrHexQuantity": { - "oneOf": [ - { "$ref": "#/definitions/IntegerString" }, - { "$ref": "#/definitions/HexQuantity" } - ] - }, - "IntegerOrConfusedHex": { - "anyOf": [ - { "$ref": "#/definitions/IntegerString" }, - { "$ref": "#/definitions/ConfusedHexType" } - ] - }, - "IntegerOrEmptyOrConfusedHex": { - "oneOf": [ - { "$ref": "#/definitions/IntegerOrEmpty" }, - { "$ref": "#/definitions/ConfusedHexType" } - ] - }, - "PreStateAccount": { - "type": "object", - "additionalproperties": true, - "properties": { - "balance": { "$ref": "#/definitions/ConfusedHexType" }, - "code": { "$ref": "#/definitions/HexMaybePrefixOrEmpty" }, - "nonce": { "$ref": "#/definitions/ConfusedHexType" }, - "storage": { - "type": "object", - "additionalProperties": false, - "patternProperties": { - "^0x[0-9a-f]+": { - "description": "storage key with 0x. data is HexData", - "$ref": "#/definitions/HexData" - } - } - } - }, - "required": [ - "balance", - "code", - "nonce" - ] - }, - "TxSigR": { - "oneOf": [ - { "enum" : [ "0x00" ] } - ] - }, - "TxSigS": { - "oneOf": [ - { "enum" : [ "0x00" ] } - ] - }, - "TxSigV": { - "description": "a value of 0 is an invalid chainId, but used in a test case", - "oneOf": [ - { "enum" : [ "0x00", "0x01" ] } - ] - }, - "HexLen40": { - "pattern": "^0x[0-9a-fA-F]{40}$", - "type": "string" - }, - "HexNoPrefixLen40": { - "pattern": "^[0-9a-fA-F]{40}$", - "type": "string" - }, - "AddressMaybePrefixOrEmpty" : { - "oneOf": [ - { "$ref": "#/definitions/HexLen40" }, - { "$ref": "#/definitions/HexNoPrefixLen40" }, - { "$ref": "#/definitions/EmptyString" } - ] - }, - "Transaction": { - "type": "object", + "NullSenderTransaction": { "additionalProperties": true, "not": { - "required": ["r, s, v"] + "required": [ + "secretKey" + ] }, "properties": { "data": { - "items": { "$ref": "#/definitions/HexDataOrEmpty" }, + "items": { + "$ref": "#/definitions/HexMaybePrefixOrEmpty" + }, "type": "array" }, "gasLimit": { - "items": { "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" }, + "items": { + "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" + }, "type": "array" }, - "gasPrice": { "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" }, - "nonce": { "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" }, - "secretKey": { "$ref": "#/definitions/HexMaybePrefix" }, - "to": { "$ref": "#/definitions/AddressMaybePrefixOrEmpty"}, + "gasPrice": { + "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" + }, + "nonce": { + "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" + }, + "r": { + "$ref": "#/definitions/TxSigR" + }, + "s": { + "$ref": "#/definitions/TxSigS" + }, + "to": { + "$ref": "#/definitions/AddressMaybePrefixOrEmpty" + }, + "v": { + "$ref": "#/definitions/TxSigV" + }, "value": { - "items": { "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" }, + "items": { + "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" + }, "type": "array" } }, @@ -172,34 +50,80 @@ "gasLimit", "gasPrice", "nonce", - "secretKey", + "r", + "s", + "v", "to", "value" - ] + ], + "type": "object" }, - "NullSenderTransaction": { - "type": "object", + "PreStateAccount": { + "additionalproperties": true, + "properties": { + "balance": { + "$ref": "#/definitions/ConfusedHexType" + }, + "code": { + "$ref": "#/definitions/HexMaybePrefixOrEmpty" + }, + "nonce": { + "$ref": "#/definitions/ConfusedHexType" + }, + "storage": { + "additionalProperties": false, + "patternProperties": { + "^0x[0-9a-f]+": { + "$ref": "#/definitions/HexData", + "description": "storage key with 0x. data is HexData" + } + }, + "type": "object" + } + }, + "required": [ + "balance", + "code", + "nonce" + ], + "type": "object" + }, + "Transaction": { "additionalProperties": true, "not": { - "required": ["secretKey"] + "required": [ + "r, s, v" + ] }, "properties": { "data": { - "items": { "$ref": "#/definitions/HexMaybePrefixOrEmpty" }, + "items": { + "$ref": "#/definitions/HexDataOrEmpty" + }, "type": "array" }, "gasLimit": { - "items": { "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" }, + "items": { + "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" + }, "type": "array" }, - "gasPrice": { "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" }, - "nonce": { "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" }, - "r": { "$ref": "#/definitions/TxSigR" }, - "s": { "$ref": "#/definitions/TxSigS" }, - "to": { "$ref": "#/definitions/AddressMaybePrefixOrEmpty"}, - "v": { "$ref": "#/definitions/TxSigV" }, + "gasPrice": { + "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" + }, + "nonce": { + "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" + }, + "secretKey": { + "$ref": "#/definitions/HexMaybePrefix" + }, + "to": { + "$ref": "#/definitions/AddressMaybePrefixOrEmpty" + }, "value": { - "items": { "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" }, + "items": { + "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" + }, "type": "array" } }, @@ -208,54 +132,48 @@ "gasLimit", "gasPrice", "nonce", - "r", - "s", - "v", + "secretKey", "to", "value" + ], + "type": "object" + }, + "TxSigR": { + "oneOf": [ + { + "enum": [ + "0x00" + ] + } ] }, - "TransactionResults": { - "items": { - "additionalProperties": false, - "properties": { - "hash": { - "$ref": "#/definitions/HexData" - }, - "logs": {}, - "indexes": { - "additionalProperties": false, - "properties": { - "data": { - "type": "integer" - }, - "gas": { - "type": "integer" - }, - "value": { - "type": "integer" - } - }, - "required": [ - "data", - "gas", - "value" - ], - "type": "object" - } - }, - "required": [ - "hash", - "indexes" - ], - "type": "object" - }, - "type": "array" + "TxSigS": { + "oneOf": [ + { + "enum": [ + "0x00" + ] + } + ] + }, + "TxSigV": { + "description": "a value of 0 is an invalid chainId, but used in a test case", + "oneOf": [ + { + "enum": [ + "0x00", + "0x01" + ] + } + ] } }, "patternProperties": { "^.*$": { "properties": { + "_info": { + "$ref": "#/definitions/Info" + }, "env": { "additionalproperties": false, "properties": { @@ -294,22 +212,22 @@ "post": { "additionalProperties": false, "properties": { - "EIP150": { + "Byzantium": { "$ref": "#/definitions/TransactionResults" }, - "EIP158": { + "Constantinople": { "$ref": "#/definitions/TransactionResults" }, - "Frontier": { + "EIP150": { "$ref": "#/definitions/TransactionResults" }, - "Homestead": { + "EIP158": { "$ref": "#/definitions/TransactionResults" }, - "Byzantium": { + "Frontier": { "$ref": "#/definitions/TransactionResults" }, - "Constantinople": { + "Homestead": { "$ref": "#/definitions/TransactionResults" } }, @@ -319,16 +237,20 @@ "additionalProperties": false, "patternProperties": { "^0x[0-9a-f]*": { - "description": "prestate account address with 0x prefix", - "$ref": "#/definitions/PreStateAccount" + "$ref": "#/definitions/PreStateAccount", + "description": "prestate account address with 0x prefix" } }, "type": "object" }, "transaction": { "oneOf": [ - { "$ref": "#/definitions/Transaction" }, - { "$ref": "#/definitions/NullSenderTransaction" } + { + "$ref": "#/definitions/Transaction" + }, + { + "$ref": "#/definitions/NullSenderTransaction" + } ] } }, diff --git a/JSONSchema/validate.js b/JSONSchema/validate.js deleted file mode 100755 index e4c41140e..000000000 --- a/JSONSchema/validate.js +++ /dev/null @@ -1,82 +0,0 @@ -#! /bin/env node - -var fs = require('fs'); -var validate = require('jsonschema').validate; -var readline = require('readline'); -var process = require('process'); -var dup = require('json-dup-key-validator'); - -var schemaFile = process.argv[2]; - -var schema = ''; -var testCode = ''; -var success = true; -var numFiles = 0; -var numFailed = 0; -var numSucceeded = 0; -var fileNames = []; - -var rl = readline.createInterface({ - input: process.stdin, - output: process.stdout, - terminal: false -}); - -rl.on('line', function(fileName) { - if (fileName == 'BlockchainTests/bcForgedTest/bcInvalidRLPTest.json') { - return - } - fileNames.push(fileName); -}); - -rl.on('close', function() { - var jsonString = fs.readFileSync(schemaFile, "utf8"); - schema = dup.parse(jsonString); - - //sort file names alphabetically so that log output ordering is consistent - fileNames.sort(function(a,b) { - if(a<b) { - return -1; - } else { - return 1; - } - - return 0; - }); - - for (var i = 0; i < fileNames.length; i++) { - try { - var jsonString = fs.readFileSync(fileNames[i], "utf8"); - testCode = dup.parse(jsonString); - } catch(e) { - console.log('error on file:', fileNames[i]) - console.log(e); - numFailed++; - continue; - } - - try { - var x = validate(testCode, schema); - - if (x.errors.length > 0) { - numFailed++; - console.log(fileNames[i]+ ':\n'); - for (var j = 0; j < x.errors.length; j++) { - console.log(' ' + x.errors[j] + '\n') - } - } else { - numSucceeded++; - } - } catch (e) { - console.log(e); - numFailed++; - } - } - - console.log("Valid: "+numSucceeded+"\n"); - console.log("Failed: "+numFailed+"\n"); - - if(numFailed > 0) { - process.exit(-1); - } -}); diff --git a/JSONSchema/vm-filler-schema.json b/JSONSchema/vm-filler-schema.json new file mode 100644 index 000000000..fe61ae86a --- /dev/null +++ b/JSONSchema/vm-filler-schema.json @@ -0,0 +1,162 @@ +{ + "definitions": { + "ExpectStateAccount": { + "additionalproperties": true, + "properties": { + "balance": { + "$ref": "#/definitions/IntegerOrConfusedHex" + }, + "code": { + "$ref": "#/definitions/HexMaybePrefixOrEmpty" + }, + "nonce": { + "$ref": "#/definitions/IntegerOrConfusedHex" + }, + "storage": { + "additionalProperties": false, + "patternProperties": { + "^(0x)?[0-9a-f]+": { + "$ref": "#/definitions/HexData", + "description": "storage key with 0x. data is HexData" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "PreStateAccount": { + "additionalproperties": true, + "properties": { + "balance": { + "$ref": "#/definitions/IntegerOrConfusedHex" + }, + "code": { + "$ref": "#/definitions/LLLCode" + }, + "nonce": { + "$ref": "#/definitions/IntegerOrConfusedHex" + }, + "storage": { + "additionalProperties": false, + "patternProperties": { + "^(0x)?[0-9a-f]+": { + "$ref": "#/definitions/HexData", + "description": "storage key with 0x. data is HexData" + } + }, + "type": "object" + } + }, + "required": [ + "balance", + "code", + "nonce" + ], + "type": "object" + } + }, + "patternProperties": { + "^.*$": { + "properties": { + "env": { + "additionalproperties": false, + "properties": { + "currentCoinbase": { + "$ref": "#/definitions/HexMaybePrefix" + }, + "currentDifficulty": { + "$ref": "#/definitions/IntegerOrConfusedHex" + }, + "currentGasLimit": { + "$ref": "#/definitions/IntegerOrConfusedHex" + }, + "currentNumber": { + "$ref": "#/definitions/IntegerOrConfusedHex" + }, + "currentTimestamp": { + "$ref": "#/definitions/IntegerOrNumberOrConfusedHex" + } + }, + "required": [ + "currentCoinbase", + "currentDifficulty", + "currentGasLimit", + "currentNumber", + "currentTimestamp" + ], + "type": "object" + }, + "exec": { + "additionalproperties": false, + "properties": { + "address": { + "$ref": "#/definitions/AddressMaybePrefixOrEmpty" + }, + "caller": { + "$ref": "#/definitions/AddressMaybePrefixOrEmpty" + }, + "code": { + "$ref": "#/definitions/LLLCode" + }, + "data": { + "$ref": "#/definitions/HexDataOrEmpty" + }, + "gas": { + "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" + }, + "gasPrice": { + "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" + }, + "origin": { + "$ref": "#/definitions/AddressMaybePrefixOrEmpty" + }, + "value": { + "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" + } + }, + "required": [ + "address", + "caller", + "data", + "gas", + "gasPrice", + "origin", + "value" + ] + }, + "expect": { + "additionalProperties": false, + "patternProperties": { + "^[0-9a-f]*": { + "$ref": "#/definitions/ExpectStateAccount", + "description": "expectstate account address with 0x prefix" + } + }, + "type": "object" + }, + "gas": { + "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" + }, + "logs": { + "$ref": "#/definitions/HexDataOrEmpty" + }, + "out": { + "$ref": "#/definitions/HexDataOrEmpty" + }, + "pre": { + "additionalProperties": false, + "patternProperties": { + "^(0x)?[0-9a-f]*": { + "$ref": "#/definitions/PreStateAccount", + "description": "prestate account address with 0x prefix" + } + }, + "type": "object" + } + }, + "type": "object" + } + }, + "type": "object" +} diff --git a/JSONSchema/vm-schema.json b/JSONSchema/vm-schema.json new file mode 100644 index 000000000..f88b92a2e --- /dev/null +++ b/JSONSchema/vm-schema.json @@ -0,0 +1,141 @@ +{ + "definitions": { + "PreStateAccount": { + "additionalproperties": true, + "properties": { + "balance": { + "$ref": "#/definitions/ConfusedHexType" + }, + "code": { + "$ref": "#/definitions/HexMaybePrefixOrEmpty" + }, + "nonce": { + "$ref": "#/definitions/ConfusedHexType" + }, + "storage": { + "additionalProperties": false, + "patternProperties": { + "^0x[0-9a-f]+": { + "$ref": "#/definitions/HexData", + "description": "storage key with 0x. data is HexData" + } + }, + "type": "object" + } + }, + "required": [ + "balance", + "code", + "nonce" + ], + "type": "object" + } + }, + "patternProperties": { + "^.*$": { + "properties": { + "_info": { + "$ref": "#/definitions/Info" + }, + "env": { + "additionalproperties": false, + "properties": { + "currentCoinbase": { + "$ref": "#/definitions/HexData" + }, + "currentDifficulty": { + "$ref": "#/definitions/ConfusedHexType" + }, + "currentGasLimit": { + "$ref": "#/definitions/ConfusedHexType" + }, + "currentNumber": { + "$ref": "#/definitions/ConfusedHexType" + }, + "currentTimestamp": { + "$ref": "#/definitions/ConfusedHexType" + } + }, + "required": [ + "currentCoinbase", + "currentDifficulty", + "currentGasLimit", + "currentNumber", + "currentTimestamp" + ], + "type": "object" + }, + "exec": { + "additionalproperties": false, + "properties": { + "address": { + "$ref": "#/definitions/AddressMaybePrefixOrEmpty" + }, + "caller": { + "$ref": "#/definitions/AddressMaybePrefixOrEmpty" + }, + "code": { + "$ref": "#/definitions/HexMaybePrefixOrEmpty" + }, + "data": { + "$ref": "#/definitions/HexDataOrEmpty" + }, + "gas": { + "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" + }, + "gasPrice": { + "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" + }, + "origin": { + "$ref": "#/definitions/AddressMaybePrefixOrEmpty" + }, + "value": { + "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" + } + }, + "required": [ + "address", + "caller", + "code", + "data", + "gas", + "gasPrice", + "origin", + "value" + ] + }, + "gas": { + "$ref": "#/definitions/IntegerOrEmptyOrConfusedHex" + }, + "logs": { + "$ref": "#/definitions/HexDataOrEmpty" + }, + "out": { + "$ref": "#/definitions/HexDataOrEmpty" + }, + "post": { + "additionalProperties": false, + "patternProperties": { + "^0x[0-9a-f]*": { + "$ref": "#/definitions/PreStateAccount", + "description": "poststate account address with 0x prefix" + } + }, + "type": "object" + }, + "pre": { + "additionalProperties": false, + "patternProperties": { + "^0x[0-9a-f]*": { + "$ref": "#/definitions/PreStateAccount", + "description": "prestate account address with 0x prefix" + } + }, + "type": "object" + } + }, + "type": "object" + } + }, + "type": "object" +} |