{
    "contractName": "IPenalizer",
    "abi": [
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "sender",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "commitHash",
                    "type": "bytes32"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "readyBlockNumber",
                    "type": "uint256"
                }
            ],
            "name": "CommitAdded",
            "type": "event"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes4",
                    "name": "interfaceId",
                    "type": "bytes4"
                }
            ],
            "name": "supportsInterface",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "commitHash",
                    "type": "bytes32"
                }
            ],
            "name": "commit",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes",
                    "name": "unsignedTx1",
                    "type": "bytes"
                },
                {
                    "internalType": "bytes",
                    "name": "signature1",
                    "type": "bytes"
                },
                {
                    "internalType": "bytes",
                    "name": "unsignedTx2",
                    "type": "bytes"
                },
                {
                    "internalType": "bytes",
                    "name": "signature2",
                    "type": "bytes"
                },
                {
                    "internalType": "contract IRelayHub",
                    "name": "hub",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "randomValue",
                    "type": "uint256"
                }
            ],
            "name": "penalizeRepeatedNonce",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes",
                    "name": "unsignedTx",
                    "type": "bytes"
                },
                {
                    "internalType": "bytes",
                    "name": "signature",
                    "type": "bytes"
                },
                {
                    "internalType": "contract IRelayHub",
                    "name": "hub",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "randomValue",
                    "type": "uint256"
                }
            ],
            "name": "penalizeIllegalTransaction",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "versionPenalizer",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getPenalizeBlockDelay",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getPenalizeBlockExpiration",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        }
    ],
    "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"commitHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"readyBlockNumber\",\"type\":\"uint256\"}],\"name\":\"CommitAdded\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"commitHash\",\"type\":\"bytes32\"}],\"name\":\"commit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPenalizeBlockDelay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPenalizeBlockExpiration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"unsignedTx\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"contract IRelayHub\",\"name\":\"hub\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"randomValue\",\"type\":\"uint256\"}],\"name\":\"penalizeIllegalTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"unsignedTx1\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature1\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"unsignedTx2\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature2\",\"type\":\"bytes\"},{\"internalType\":\"contract IRelayHub\",\"name\":\"hub\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"randomValue\",\"type\":\"uint256\"}],\"name\":\"penalizeRepeatedNonce\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"versionPenalizer\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"commit(bytes32)\":{\"params\":{\"commitHash\":\"The hash of the report of a penalizable behaviour the reporter wants to reveal. Calculated as `commit(keccak(encodedPenalizeFunction))`.\"}},\"getPenalizeBlockDelay()\":{\"returns\":{\"_0\":\"The minimum delay between commit and reveal steps.\"}},\"getPenalizeBlockExpiration()\":{\"returns\":{\"_0\":\"The maximum delay between commit and reveal steps.\"}},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"versionPenalizer()\":{\"returns\":{\"_0\":\"a SemVer-compliant version of the `Penalizer` contract.\"}}},\"title\":\"The Penalizer Interface\",\"version\":1},\"userdoc\":{\"events\":{\"CommitAdded(address,bytes32,uint256)\":{\"notice\":\"Emitted once the reporter submits the first step in the commit-reveal process.\"}},\"kind\":\"user\",\"methods\":{\"commit(bytes32)\":{\"notice\":\"Called by the reporter as the first step in the commit-reveal process. Any sender can call it to make sure no-one can front-run it to claim this penalization.\"},\"penalizeIllegalTransaction(bytes,bytes,address,uint256)\":{\"notice\":\"Called by the reporter as the second step in the commit-reveal process. The Relay Workers are not allowed to make calls other than to the `relayCall` method.\"},\"penalizeRepeatedNonce(bytes,bytes,bytes,bytes,address,uint256)\":{\"notice\":\"Called by the reporter as the second step in the commit-reveal process. If a Relay Worker attacked the system by signing multiple transactions with same nonce so only one is accepted, anyone can grab both transactions from the blockchain and submit them here. Check whether `unsignedTx1` != `unsignedTx2`, that both are signed by the same address, and that `unsignedTx1.nonce` == `unsignedTx2.nonce`. If all conditions are met, relay is considered an \\\"offending relay\\\". The offending relay will be unregistered immediately, its stake will be forfeited and given to the address who reported it (the `msg.sender`), thus incentivizing anyone to report offending relays.\"}},\"notice\":\"In some cases the behavior of a Relay Server may be found to be illegal. It is the responsibility of a `Penalizer` contract to judge whether there was a penalizable event.In case there was, the `Penalizer` will direct the `RelayHub` to slash the stake of the faulty Relay Server.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IPenalizer.sol\":\"IPenalizer\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/alexf/gsn2/packages/contracts/solpp/forwarder/IForwarder.sol\":{\"keccak256\":\"0xef3d770001c3245db4408cdd0afdfc622695ccfe31f28b74571d05158bbf83f8\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://08949174ed05b596d89c8f1eeedfeb254993b84054bbc1ff6081ad926f5db406\",\"dweb:/ipfs/QmNQtKzHpie4Esocxuc9YrPtGQyA928a1a5TWbVc7cPoqk\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IPenalizer.sol\":{\"keccak256\":\"0x634bbc00ef00d1bcf9e1b6ebc2874fa45ae5742a6b3b01cb5b938d4bd3108cd7\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://9eb06e03f84ef895944bdeb5f8b133ac8adf66167cd6d6b392eefde3210cbf20\",\"dweb:/ipfs/QmaZL9ngF4jz8PSzPyXmBvZJZYnUfPneRpSyc18jfT7HzX\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IRelayHub.sol\":{\"keccak256\":\"0x19dcbf5e1bfaa413b6800ad84ffedd2989b401cede299f009ff62c33e03ccfae\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://bb5cb7bee7de97770e374b4cad1265c636a740dc7a2013d686a89d9398ba3098\",\"dweb:/ipfs/QmSqhNkFwDtS1EnupbQWduDm78N6s8c1zqXf5aLqZF69Xx\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IStakeManager.sol\":{\"keccak256\":\"0x27535f3677a2c373862d8672725632fdcabdf5d0e784f80c158063f55be68b5a\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://904ad156bf1cac29f9e13619ee0ee41e602b6cf1fafedea0a1d3be7a7accc654\",\"dweb:/ipfs/QmXVy5gfYXSWYFrkmL2u9jctZDXupiNWbif5tFVpVZMPww\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/utils/GsnTypes.sol\":{\"keccak256\":\"0xfc3ed2bbd925e24facf0c3bb96d57dd7fc5bcc4a684b5473f04e8d209b758805\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://cb57b5b38d3e588f119ae45174891f2049d1d0de160a12b81a20335cd8bf731b\",\"dweb:/ipfs/Qmf6xfbdLbTKEpnzxwnSaRy1YZJtLYTZh8URqry86oyoSU\"]},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xd04b0f06e0666f29cf7cccc82894de541e19bb30a765b107b1e40bb7fe5f7d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7b652499d098e88d8d878374616bb58434301061cae2253298b3f374044e0ddb\",\"dweb:/ipfs/QmbhAzctqo5jrSKU6idHdVyqfmzCcDbNUPvmx4GiXxfA6q\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb0048dee081f6fffa5f74afc3fb328483c2a30504e94a0ddd2a5114d731ec4d\",\"dweb:/ipfs/QmZptt1nmYoA5SgjwnSgWqgUSDgm4q52Yos3xhnMv3MV43\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]}},\"version\":1}",
    "bytecode": "0x",
    "deployedBytecode": "0x",
    "immutableReferences": {},
    "sourceMap": "",
    "deployedSourceMap": "",
    "source": "pragma solidity >=0.7.6;\n\n// SPDX-License-Identifier: GPL-3.0-only\n\nimport \"./IRelayHub.sol\";\n\n/**\n * @title The Penalizer Interface\n * @notice In some cases the behavior of a Relay Server may be found to be illegal.\n * It is the responsibility of a `Penalizer` contract to judge whether there was a penalizable event.\n *\n * @notice In case there was, the `Penalizer` will direct the `RelayHub` to slash the stake of the faulty Relay Server.\n */\ninterface IPenalizer is IERC165 {\n\n    /// @notice Emitted once the reporter submits the first step in the commit-reveal process.\n    event CommitAdded(address indexed sender, bytes32 indexed commitHash, uint256 readyBlockNumber);\n\n    struct Transaction {\n        uint256 nonce;\n        uint256 gasLimit;\n        address to;\n        uint256 value;\n        bytes data;\n    }\n\n    /**\n     * @notice Called by the reporter as the first step in the commit-reveal process.\n     * Any sender can call it to make sure no-one can front-run it to claim this penalization.\n     * @param commitHash The hash of the report of a penalizable behaviour the reporter wants to reveal.\n     * Calculated as `commit(keccak(encodedPenalizeFunction))`.\n     */\n    function commit(bytes32 commitHash) external;\n\n    /**\n     * @notice Called by the reporter as the second step in the commit-reveal process.\n     * If a Relay Worker attacked the system by signing multiple transactions with same nonce so only one is accepted,\n     * anyone can grab both transactions from the blockchain and submit them here.\n     * Check whether `unsignedTx1` != `unsignedTx2`, that both are signed by the same address,\n     * and that `unsignedTx1.nonce` == `unsignedTx2.nonce`.\n     * If all conditions are met, relay is considered an \"offending relay\".\n     * The offending relay will be unregistered immediately, its stake will be forfeited and given\n     * to the address who reported it (the `msg.sender`), thus incentivizing anyone to report offending relays.\n     */\n    function penalizeRepeatedNonce(\n        bytes calldata unsignedTx1,\n        bytes calldata signature1,\n        bytes calldata unsignedTx2,\n        bytes calldata signature2,\n        IRelayHub hub,\n        uint256 randomValue\n    ) external;\n\n    /**\n     * @notice Called by the reporter as the second step in the commit-reveal process.\n     * The Relay Workers are not allowed to make calls other than to the `relayCall` method.\n     */\n    function penalizeIllegalTransaction(\n        bytes calldata unsignedTx,\n        bytes calldata signature,\n        IRelayHub hub,\n        uint256 randomValue\n    ) external;\n\n    /// @return a SemVer-compliant version of the `Penalizer` contract.\n    function versionPenalizer() external view returns (string memory);\n\n    /// @return The minimum delay between commit and reveal steps.\n    function getPenalizeBlockDelay() external view returns (uint256);\n\n    /// @return The maximum delay between commit and reveal steps.\n    function getPenalizeBlockExpiration() external view returns (uint256);\n}",
    "sourcePath": "/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IPenalizer.sol",
    "ast": {
        "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IPenalizer.sol",
        "exportedSymbols": {
            "ERC165": [
                12146
            ],
            "GsnTypes": [
                8492
            ],
            "IERC165": [
                12352
            ],
            "IERC20": [
                10849
            ],
            "IForwarder": [
                5129
            ],
            "IPenalizer": [
                5528
            ],
            "IRelayHub": [
                5896
            ],
            "IStakeManager": [
                6284
            ]
        },
        "id": 5529,
        "license": "GPL-3.0-only",
        "nodeType": "SourceUnit",
        "nodes": [
            {
                "id": 5449,
                "literals": [
                    "solidity",
                    ">=",
                    "0.7",
                    ".6"
                ],
                "nodeType": "PragmaDirective",
                "src": "0:24:15"
            },
            {
                "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IRelayHub.sol",
                "file": "./IRelayHub.sol",
                "id": 5450,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 5529,
                "sourceUnit": 5897,
                "src": "68:25:15",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "abstract": false,
                "baseContracts": [
                    {
                        "baseName": {
                            "id": 5452,
                            "name": "IERC165",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 12352,
                            "src": "470:7:15"
                        },
                        "id": 5453,
                        "nodeType": "InheritanceSpecifier",
                        "src": "470:7:15"
                    }
                ],
                "contractDependencies": [],
                "contractKind": "interface",
                "documentation": {
                    "id": 5451,
                    "nodeType": "StructuredDocumentation",
                    "src": "95:350:15",
                    "text": " @title The Penalizer Interface\n @notice In some cases the behavior of a Relay Server may be found to be illegal.\n It is the responsibility of a `Penalizer` contract to judge whether there was a penalizable event.\n @notice In case there was, the `Penalizer` will direct the `RelayHub` to slash the stake of the faulty Relay Server."
                },
                "fullyImplemented": false,
                "id": 5528,
                "linearizedBaseContracts": [
                    5528,
                    12352
                ],
                "name": "IPenalizer",
                "nameLocation": "456:10:15",
                "nodeType": "ContractDefinition",
                "nodes": [
                    {
                        "anonymous": false,
                        "documentation": {
                            "id": 5454,
                            "nodeType": "StructuredDocumentation",
                            "src": "485:90:15",
                            "text": "@notice Emitted once the reporter submits the first step in the commit-reveal process."
                        },
                        "id": 5462,
                        "name": "CommitAdded",
                        "nameLocation": "586:11:15",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 5461,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5456,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "sender",
                                    "nameLocation": "614:6:15",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5462,
                                    "src": "598:22:15",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5455,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "598:7:15",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5458,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "commitHash",
                                    "nameLocation": "638:10:15",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5462,
                                    "src": "622:26:15",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 5457,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "622:7:15",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5460,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "readyBlockNumber",
                                    "nameLocation": "658:16:15",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5462,
                                    "src": "650:24:15",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5459,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "650:7:15",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "597:78:15"
                        },
                        "src": "580:96:15"
                    },
                    {
                        "canonicalName": "IPenalizer.Transaction",
                        "id": 5473,
                        "members": [
                            {
                                "constant": false,
                                "id": 5464,
                                "mutability": "mutable",
                                "name": "nonce",
                                "nameLocation": "719:5:15",
                                "nodeType": "VariableDeclaration",
                                "scope": 5473,
                                "src": "711:13:15",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 5463,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "711:7:15",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 5466,
                                "mutability": "mutable",
                                "name": "gasLimit",
                                "nameLocation": "742:8:15",
                                "nodeType": "VariableDeclaration",
                                "scope": 5473,
                                "src": "734:16:15",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 5465,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "734:7:15",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 5468,
                                "mutability": "mutable",
                                "name": "to",
                                "nameLocation": "768:2:15",
                                "nodeType": "VariableDeclaration",
                                "scope": 5473,
                                "src": "760:10:15",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                },
                                "typeName": {
                                    "id": 5467,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "760:7:15",
                                    "stateMutability": "nonpayable",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 5470,
                                "mutability": "mutable",
                                "name": "value",
                                "nameLocation": "788:5:15",
                                "nodeType": "VariableDeclaration",
                                "scope": 5473,
                                "src": "780:13:15",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 5469,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "780:7:15",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 5472,
                                "mutability": "mutable",
                                "name": "data",
                                "nameLocation": "809:4:15",
                                "nodeType": "VariableDeclaration",
                                "scope": 5473,
                                "src": "803:10:15",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_storage_ptr",
                                    "typeString": "bytes"
                                },
                                "typeName": {
                                    "id": 5471,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "803:5:15",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_storage_ptr",
                                        "typeString": "bytes"
                                    }
                                },
                                "visibility": "internal"
                            }
                        ],
                        "name": "Transaction",
                        "nameLocation": "689:11:15",
                        "nodeType": "StructDefinition",
                        "scope": 5528,
                        "src": "682:138:15",
                        "visibility": "public"
                    },
                    {
                        "documentation": {
                            "id": 5474,
                            "nodeType": "StructuredDocumentation",
                            "src": "826:361:15",
                            "text": " @notice Called by the reporter as the first step in the commit-reveal process.\n Any sender can call it to make sure no-one can front-run it to claim this penalization.\n @param commitHash The hash of the report of a penalizable behaviour the reporter wants to reveal.\n Calculated as `commit(keccak(encodedPenalizeFunction))`."
                        },
                        "functionSelector": "f14fcbc8",
                        "id": 5479,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "commit",
                        "nameLocation": "1201:6:15",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5477,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5476,
                                    "mutability": "mutable",
                                    "name": "commitHash",
                                    "nameLocation": "1216:10:15",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5479,
                                    "src": "1208:18:15",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 5475,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1208:7:15",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1207:20:15"
                        },
                        "returnParameters": {
                            "id": 5478,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1236:0:15"
                        },
                        "scope": 5528,
                        "src": "1192:45:15",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5480,
                            "nodeType": "StructuredDocumentation",
                            "src": "1243:742:15",
                            "text": " @notice Called by the reporter as the second step in the commit-reveal process.\n If a Relay Worker attacked the system by signing multiple transactions with same nonce so only one is accepted,\n anyone can grab both transactions from the blockchain and submit them here.\n Check whether `unsignedTx1` != `unsignedTx2`, that both are signed by the same address,\n and that `unsignedTx1.nonce` == `unsignedTx2.nonce`.\n If all conditions are met, relay is considered an \"offending relay\".\n The offending relay will be unregistered immediately, its stake will be forfeited and given\n to the address who reported it (the `msg.sender`), thus incentivizing anyone to report offending relays."
                        },
                        "functionSelector": "ab456ccb",
                        "id": 5496,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "penalizeRepeatedNonce",
                        "nameLocation": "1999:21:15",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5494,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5482,
                                    "mutability": "mutable",
                                    "name": "unsignedTx1",
                                    "nameLocation": "2045:11:15",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5496,
                                    "src": "2030:26:15",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 5481,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2030:5:15",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5484,
                                    "mutability": "mutable",
                                    "name": "signature1",
                                    "nameLocation": "2081:10:15",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5496,
                                    "src": "2066:25:15",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 5483,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2066:5:15",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5486,
                                    "mutability": "mutable",
                                    "name": "unsignedTx2",
                                    "nameLocation": "2116:11:15",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5496,
                                    "src": "2101:26:15",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 5485,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2101:5:15",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5488,
                                    "mutability": "mutable",
                                    "name": "signature2",
                                    "nameLocation": "2152:10:15",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5496,
                                    "src": "2137:25:15",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 5487,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2137:5:15",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5491,
                                    "mutability": "mutable",
                                    "name": "hub",
                                    "nameLocation": "2182:3:15",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5496,
                                    "src": "2172:13:15",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IRelayHub_$5896",
                                        "typeString": "contract IRelayHub"
                                    },
                                    "typeName": {
                                        "id": 5490,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 5489,
                                            "name": "IRelayHub",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 5896,
                                            "src": "2172:9:15"
                                        },
                                        "referencedDeclaration": 5896,
                                        "src": "2172:9:15",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IRelayHub_$5896",
                                            "typeString": "contract IRelayHub"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5493,
                                    "mutability": "mutable",
                                    "name": "randomValue",
                                    "nameLocation": "2203:11:15",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5496,
                                    "src": "2195:19:15",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5492,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2195:7:15",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2020:200:15"
                        },
                        "returnParameters": {
                            "id": 5495,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "2229:0:15"
                        },
                        "scope": 5528,
                        "src": "1990:240:15",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5497,
                            "nodeType": "StructuredDocumentation",
                            "src": "2236:191:15",
                            "text": " @notice Called by the reporter as the second step in the commit-reveal process.\n The Relay Workers are not allowed to make calls other than to the `relayCall` method."
                        },
                        "functionSelector": "a640bc74",
                        "id": 5509,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "penalizeIllegalTransaction",
                        "nameLocation": "2441:26:15",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5507,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5499,
                                    "mutability": "mutable",
                                    "name": "unsignedTx",
                                    "nameLocation": "2492:10:15",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5509,
                                    "src": "2477:25:15",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 5498,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2477:5:15",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5501,
                                    "mutability": "mutable",
                                    "name": "signature",
                                    "nameLocation": "2527:9:15",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5509,
                                    "src": "2512:24:15",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 5500,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2512:5:15",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5504,
                                    "mutability": "mutable",
                                    "name": "hub",
                                    "nameLocation": "2556:3:15",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5509,
                                    "src": "2546:13:15",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IRelayHub_$5896",
                                        "typeString": "contract IRelayHub"
                                    },
                                    "typeName": {
                                        "id": 5503,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 5502,
                                            "name": "IRelayHub",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 5896,
                                            "src": "2546:9:15"
                                        },
                                        "referencedDeclaration": 5896,
                                        "src": "2546:9:15",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IRelayHub_$5896",
                                            "typeString": "contract IRelayHub"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5506,
                                    "mutability": "mutable",
                                    "name": "randomValue",
                                    "nameLocation": "2577:11:15",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5509,
                                    "src": "2569:19:15",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5505,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2569:7:15",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2467:127:15"
                        },
                        "returnParameters": {
                            "id": 5508,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "2603:0:15"
                        },
                        "scope": 5528,
                        "src": "2432:172:15",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5510,
                            "nodeType": "StructuredDocumentation",
                            "src": "2610:67:15",
                            "text": "@return a SemVer-compliant version of the `Penalizer` contract."
                        },
                        "functionSelector": "a0313657",
                        "id": 5515,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "versionPenalizer",
                        "nameLocation": "2691:16:15",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5511,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "2707:2:15"
                        },
                        "returnParameters": {
                            "id": 5514,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5513,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5515,
                                    "src": "2733:13:15",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 5512,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2733:6:15",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2732:15:15"
                        },
                        "scope": 5528,
                        "src": "2682:66:15",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5516,
                            "nodeType": "StructuredDocumentation",
                            "src": "2754:62:15",
                            "text": "@return The minimum delay between commit and reveal steps."
                        },
                        "functionSelector": "7f1a15bf",
                        "id": 5521,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getPenalizeBlockDelay",
                        "nameLocation": "2830:21:15",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5517,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "2851:2:15"
                        },
                        "returnParameters": {
                            "id": 5520,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5519,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5521,
                                    "src": "2877:7:15",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5518,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2877:7:15",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2876:9:15"
                        },
                        "scope": 5528,
                        "src": "2821:65:15",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5522,
                            "nodeType": "StructuredDocumentation",
                            "src": "2892:62:15",
                            "text": "@return The maximum delay between commit and reveal steps."
                        },
                        "functionSelector": "fb509935",
                        "id": 5527,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getPenalizeBlockExpiration",
                        "nameLocation": "2968:26:15",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5523,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "2994:2:15"
                        },
                        "returnParameters": {
                            "id": 5526,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5525,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5527,
                                    "src": "3020:7:15",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5524,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3020:7:15",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3019:9:15"
                        },
                        "scope": 5528,
                        "src": "2959:70:15",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    }
                ],
                "scope": 5529,
                "src": "446:2585:15",
                "usedErrors": []
            }
        ],
        "src": "0:3031:15"
    },
    "legacyAST": {
        "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IPenalizer.sol",
        "exportedSymbols": {
            "ERC165": [
                12146
            ],
            "GsnTypes": [
                8492
            ],
            "IERC165": [
                12352
            ],
            "IERC20": [
                10849
            ],
            "IForwarder": [
                5129
            ],
            "IPenalizer": [
                5528
            ],
            "IRelayHub": [
                5896
            ],
            "IStakeManager": [
                6284
            ]
        },
        "id": 5529,
        "license": "GPL-3.0-only",
        "nodeType": "SourceUnit",
        "nodes": [
            {
                "id": 5449,
                "literals": [
                    "solidity",
                    ">=",
                    "0.7",
                    ".6"
                ],
                "nodeType": "PragmaDirective",
                "src": "0:24:15"
            },
            {
                "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IRelayHub.sol",
                "file": "./IRelayHub.sol",
                "id": 5450,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 5529,
                "sourceUnit": 5897,
                "src": "68:25:15",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "abstract": false,
                "baseContracts": [
                    {
                        "baseName": {
                            "id": 5452,
                            "name": "IERC165",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 12352,
                            "src": "470:7:15"
                        },
                        "id": 5453,
                        "nodeType": "InheritanceSpecifier",
                        "src": "470:7:15"
                    }
                ],
                "contractDependencies": [],
                "contractKind": "interface",
                "documentation": {
                    "id": 5451,
                    "nodeType": "StructuredDocumentation",
                    "src": "95:350:15",
                    "text": " @title The Penalizer Interface\n @notice In some cases the behavior of a Relay Server may be found to be illegal.\n It is the responsibility of a `Penalizer` contract to judge whether there was a penalizable event.\n @notice In case there was, the `Penalizer` will direct the `RelayHub` to slash the stake of the faulty Relay Server."
                },
                "fullyImplemented": false,
                "id": 5528,
                "linearizedBaseContracts": [
                    5528,
                    12352
                ],
                "name": "IPenalizer",
                "nameLocation": "456:10:15",
                "nodeType": "ContractDefinition",
                "nodes": [
                    {
                        "anonymous": false,
                        "documentation": {
                            "id": 5454,
                            "nodeType": "StructuredDocumentation",
                            "src": "485:90:15",
                            "text": "@notice Emitted once the reporter submits the first step in the commit-reveal process."
                        },
                        "id": 5462,
                        "name": "CommitAdded",
                        "nameLocation": "586:11:15",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 5461,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5456,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "sender",
                                    "nameLocation": "614:6:15",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5462,
                                    "src": "598:22:15",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5455,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "598:7:15",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5458,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "commitHash",
                                    "nameLocation": "638:10:15",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5462,
                                    "src": "622:26:15",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 5457,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "622:7:15",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5460,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "readyBlockNumber",
                                    "nameLocation": "658:16:15",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5462,
                                    "src": "650:24:15",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5459,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "650:7:15",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "597:78:15"
                        },
                        "src": "580:96:15"
                    },
                    {
                        "canonicalName": "IPenalizer.Transaction",
                        "id": 5473,
                        "members": [
                            {
                                "constant": false,
                                "id": 5464,
                                "mutability": "mutable",
                                "name": "nonce",
                                "nameLocation": "719:5:15",
                                "nodeType": "VariableDeclaration",
                                "scope": 5473,
                                "src": "711:13:15",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 5463,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "711:7:15",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 5466,
                                "mutability": "mutable",
                                "name": "gasLimit",
                                "nameLocation": "742:8:15",
                                "nodeType": "VariableDeclaration",
                                "scope": 5473,
                                "src": "734:16:15",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 5465,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "734:7:15",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 5468,
                                "mutability": "mutable",
                                "name": "to",
                                "nameLocation": "768:2:15",
                                "nodeType": "VariableDeclaration",
                                "scope": 5473,
                                "src": "760:10:15",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                },
                                "typeName": {
                                    "id": 5467,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "760:7:15",
                                    "stateMutability": "nonpayable",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 5470,
                                "mutability": "mutable",
                                "name": "value",
                                "nameLocation": "788:5:15",
                                "nodeType": "VariableDeclaration",
                                "scope": 5473,
                                "src": "780:13:15",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 5469,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "780:7:15",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 5472,
                                "mutability": "mutable",
                                "name": "data",
                                "nameLocation": "809:4:15",
                                "nodeType": "VariableDeclaration",
                                "scope": 5473,
                                "src": "803:10:15",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_storage_ptr",
                                    "typeString": "bytes"
                                },
                                "typeName": {
                                    "id": 5471,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "803:5:15",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_storage_ptr",
                                        "typeString": "bytes"
                                    }
                                },
                                "visibility": "internal"
                            }
                        ],
                        "name": "Transaction",
                        "nameLocation": "689:11:15",
                        "nodeType": "StructDefinition",
                        "scope": 5528,
                        "src": "682:138:15",
                        "visibility": "public"
                    },
                    {
                        "documentation": {
                            "id": 5474,
                            "nodeType": "StructuredDocumentation",
                            "src": "826:361:15",
                            "text": " @notice Called by the reporter as the first step in the commit-reveal process.\n Any sender can call it to make sure no-one can front-run it to claim this penalization.\n @param commitHash The hash of the report of a penalizable behaviour the reporter wants to reveal.\n Calculated as `commit(keccak(encodedPenalizeFunction))`."
                        },
                        "functionSelector": "f14fcbc8",
                        "id": 5479,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "commit",
                        "nameLocation": "1201:6:15",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5477,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5476,
                                    "mutability": "mutable",
                                    "name": "commitHash",
                                    "nameLocation": "1216:10:15",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5479,
                                    "src": "1208:18:15",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 5475,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1208:7:15",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1207:20:15"
                        },
                        "returnParameters": {
                            "id": 5478,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1236:0:15"
                        },
                        "scope": 5528,
                        "src": "1192:45:15",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5480,
                            "nodeType": "StructuredDocumentation",
                            "src": "1243:742:15",
                            "text": " @notice Called by the reporter as the second step in the commit-reveal process.\n If a Relay Worker attacked the system by signing multiple transactions with same nonce so only one is accepted,\n anyone can grab both transactions from the blockchain and submit them here.\n Check whether `unsignedTx1` != `unsignedTx2`, that both are signed by the same address,\n and that `unsignedTx1.nonce` == `unsignedTx2.nonce`.\n If all conditions are met, relay is considered an \"offending relay\".\n The offending relay will be unregistered immediately, its stake will be forfeited and given\n to the address who reported it (the `msg.sender`), thus incentivizing anyone to report offending relays."
                        },
                        "functionSelector": "ab456ccb",
                        "id": 5496,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "penalizeRepeatedNonce",
                        "nameLocation": "1999:21:15",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5494,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5482,
                                    "mutability": "mutable",
                                    "name": "unsignedTx1",
                                    "nameLocation": "2045:11:15",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5496,
                                    "src": "2030:26:15",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 5481,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2030:5:15",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5484,
                                    "mutability": "mutable",
                                    "name": "signature1",
                                    "nameLocation": "2081:10:15",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5496,
                                    "src": "2066:25:15",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 5483,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2066:5:15",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5486,
                                    "mutability": "mutable",
                                    "name": "unsignedTx2",
                                    "nameLocation": "2116:11:15",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5496,
                                    "src": "2101:26:15",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 5485,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2101:5:15",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5488,
                                    "mutability": "mutable",
                                    "name": "signature2",
                                    "nameLocation": "2152:10:15",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5496,
                                    "src": "2137:25:15",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 5487,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2137:5:15",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5491,
                                    "mutability": "mutable",
                                    "name": "hub",
                                    "nameLocation": "2182:3:15",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5496,
                                    "src": "2172:13:15",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IRelayHub_$5896",
                                        "typeString": "contract IRelayHub"
                                    },
                                    "typeName": {
                                        "id": 5490,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 5489,
                                            "name": "IRelayHub",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 5896,
                                            "src": "2172:9:15"
                                        },
                                        "referencedDeclaration": 5896,
                                        "src": "2172:9:15",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IRelayHub_$5896",
                                            "typeString": "contract IRelayHub"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5493,
                                    "mutability": "mutable",
                                    "name": "randomValue",
                                    "nameLocation": "2203:11:15",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5496,
                                    "src": "2195:19:15",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5492,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2195:7:15",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2020:200:15"
                        },
                        "returnParameters": {
                            "id": 5495,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "2229:0:15"
                        },
                        "scope": 5528,
                        "src": "1990:240:15",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5497,
                            "nodeType": "StructuredDocumentation",
                            "src": "2236:191:15",
                            "text": " @notice Called by the reporter as the second step in the commit-reveal process.\n The Relay Workers are not allowed to make calls other than to the `relayCall` method."
                        },
                        "functionSelector": "a640bc74",
                        "id": 5509,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "penalizeIllegalTransaction",
                        "nameLocation": "2441:26:15",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5507,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5499,
                                    "mutability": "mutable",
                                    "name": "unsignedTx",
                                    "nameLocation": "2492:10:15",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5509,
                                    "src": "2477:25:15",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 5498,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2477:5:15",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5501,
                                    "mutability": "mutable",
                                    "name": "signature",
                                    "nameLocation": "2527:9:15",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5509,
                                    "src": "2512:24:15",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 5500,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2512:5:15",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5504,
                                    "mutability": "mutable",
                                    "name": "hub",
                                    "nameLocation": "2556:3:15",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5509,
                                    "src": "2546:13:15",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IRelayHub_$5896",
                                        "typeString": "contract IRelayHub"
                                    },
                                    "typeName": {
                                        "id": 5503,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 5502,
                                            "name": "IRelayHub",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 5896,
                                            "src": "2546:9:15"
                                        },
                                        "referencedDeclaration": 5896,
                                        "src": "2546:9:15",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IRelayHub_$5896",
                                            "typeString": "contract IRelayHub"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5506,
                                    "mutability": "mutable",
                                    "name": "randomValue",
                                    "nameLocation": "2577:11:15",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5509,
                                    "src": "2569:19:15",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5505,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2569:7:15",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2467:127:15"
                        },
                        "returnParameters": {
                            "id": 5508,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "2603:0:15"
                        },
                        "scope": 5528,
                        "src": "2432:172:15",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5510,
                            "nodeType": "StructuredDocumentation",
                            "src": "2610:67:15",
                            "text": "@return a SemVer-compliant version of the `Penalizer` contract."
                        },
                        "functionSelector": "a0313657",
                        "id": 5515,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "versionPenalizer",
                        "nameLocation": "2691:16:15",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5511,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "2707:2:15"
                        },
                        "returnParameters": {
                            "id": 5514,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5513,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5515,
                                    "src": "2733:13:15",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 5512,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2733:6:15",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2732:15:15"
                        },
                        "scope": 5528,
                        "src": "2682:66:15",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5516,
                            "nodeType": "StructuredDocumentation",
                            "src": "2754:62:15",
                            "text": "@return The minimum delay between commit and reveal steps."
                        },
                        "functionSelector": "7f1a15bf",
                        "id": 5521,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getPenalizeBlockDelay",
                        "nameLocation": "2830:21:15",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5517,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "2851:2:15"
                        },
                        "returnParameters": {
                            "id": 5520,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5519,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5521,
                                    "src": "2877:7:15",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5518,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2877:7:15",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2876:9:15"
                        },
                        "scope": 5528,
                        "src": "2821:65:15",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 5522,
                            "nodeType": "StructuredDocumentation",
                            "src": "2892:62:15",
                            "text": "@return The maximum delay between commit and reveal steps."
                        },
                        "functionSelector": "fb509935",
                        "id": 5527,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getPenalizeBlockExpiration",
                        "nameLocation": "2968:26:15",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5523,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "2994:2:15"
                        },
                        "returnParameters": {
                            "id": 5526,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5525,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5527,
                                    "src": "3020:7:15",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5524,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3020:7:15",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3019:9:15"
                        },
                        "scope": 5528,
                        "src": "2959:70:15",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    }
                ],
                "scope": 5529,
                "src": "446:2585:15",
                "usedErrors": []
            }
        ],
        "src": "0:3031:15"
    },
    "compiler": {
        "name": "solc",
        "version": "0.8.7+commit.e28d00a7.Emscripten.clang"
    },
    "networks": {},
    "schemaVersion": "3.1.0",
    "updatedAt": "2023-03-16T16:54:15.204Z",
    "devdoc": {
        "kind": "dev",
        "methods": {
            "commit(bytes32)": {
                "params": {
                    "commitHash": "The hash of the report of a penalizable behaviour the reporter wants to reveal. Calculated as `commit(keccak(encodedPenalizeFunction))`."
                }
            },
            "getPenalizeBlockDelay()": {
                "returns": {
                    "_0": "The minimum delay between commit and reveal steps."
                }
            },
            "getPenalizeBlockExpiration()": {
                "returns": {
                    "_0": "The maximum delay between commit and reveal steps."
                }
            },
            "supportsInterface(bytes4)": {
                "details": "Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas."
            },
            "versionPenalizer()": {
                "returns": {
                    "_0": "a SemVer-compliant version of the `Penalizer` contract."
                }
            }
        },
        "title": "The Penalizer Interface",
        "version": 1
    },
    "userdoc": {
        "events": {
            "CommitAdded(address,bytes32,uint256)": {
                "notice": "Emitted once the reporter submits the first step in the commit-reveal process."
            }
        },
        "kind": "user",
        "methods": {
            "commit(bytes32)": {
                "notice": "Called by the reporter as the first step in the commit-reveal process. Any sender can call it to make sure no-one can front-run it to claim this penalization."
            },
            "penalizeIllegalTransaction(bytes,bytes,address,uint256)": {
                "notice": "Called by the reporter as the second step in the commit-reveal process. The Relay Workers are not allowed to make calls other than to the `relayCall` method."
            },
            "penalizeRepeatedNonce(bytes,bytes,bytes,bytes,address,uint256)": {
                "notice": "Called by the reporter as the second step in the commit-reveal process. If a Relay Worker attacked the system by signing multiple transactions with same nonce so only one is accepted, anyone can grab both transactions from the blockchain and submit them here. Check whether `unsignedTx1` != `unsignedTx2`, that both are signed by the same address, and that `unsignedTx1.nonce` == `unsignedTx2.nonce`. If all conditions are met, relay is considered an \"offending relay\". The offending relay will be unregistered immediately, its stake will be forfeited and given to the address who reported it (the `msg.sender`), thus incentivizing anyone to report offending relays."
            }
        },
        "notice": "In some cases the behavior of a Relay Server may be found to be illegal. It is the responsibility of a `Penalizer` contract to judge whether there was a penalizable event.In case there was, the `Penalizer` will direct the `RelayHub` to slash the stake of the faulty Relay Server.",
        "version": 1
    }
}
