{
    "schemaVersion": "2.0.0",
    "contractName": "ZrxVault",
    "compilerOutput": {
        "abi": [
            {
                "inputs": [
                    { "internalType": "address", "name": "_zrxProxyAddress", "type": "address" },
                    { "internalType": "address", "name": "_zrxTokenAddress", "type": "address" }
                ],
                "payable": false,
                "stateMutability": "nonpayable",
                "type": "constructor"
            },
            {
                "anonymous": false,
                "inputs": [
                    { "indexed": true, "internalType": "address", "name": "target", "type": "address" },
                    { "indexed": true, "internalType": "address", "name": "caller", "type": "address" }
                ],
                "name": "AuthorizedAddressAdded",
                "type": "event"
            },
            {
                "anonymous": false,
                "inputs": [
                    { "indexed": true, "internalType": "address", "name": "target", "type": "address" },
                    { "indexed": true, "internalType": "address", "name": "caller", "type": "address" }
                ],
                "name": "AuthorizedAddressRemoved",
                "type": "event"
            },
            {
                "anonymous": false,
                "inputs": [
                    { "indexed": true, "internalType": "address", "name": "staker", "type": "address" },
                    { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }
                ],
                "name": "Deposit",
                "type": "event"
            },
            {
                "anonymous": false,
                "inputs": [{ "indexed": false, "internalType": "address", "name": "sender", "type": "address" }],
                "name": "InCatastrophicFailureMode",
                "type": "event"
            },
            {
                "anonymous": false,
                "inputs": [
                    { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" },
                    { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" }
                ],
                "name": "OwnershipTransferred",
                "type": "event"
            },
            {
                "anonymous": false,
                "inputs": [
                    { "indexed": false, "internalType": "address", "name": "stakingProxyAddress", "type": "address" }
                ],
                "name": "StakingProxySet",
                "type": "event"
            },
            {
                "anonymous": false,
                "inputs": [
                    { "indexed": true, "internalType": "address", "name": "staker", "type": "address" },
                    { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }
                ],
                "name": "Withdraw",
                "type": "event"
            },
            {
                "anonymous": false,
                "inputs": [
                    { "indexed": false, "internalType": "address", "name": "zrxProxyAddress", "type": "address" }
                ],
                "name": "ZrxProxySet",
                "type": "event"
            },
            {
                "constant": false,
                "inputs": [{ "internalType": "address", "name": "target", "type": "address" }],
                "name": "addAuthorizedAddress",
                "outputs": [],
                "payable": false,
                "stateMutability": "nonpayable",
                "type": "function"
            },
            {
                "constant": true,
                "inputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],
                "name": "authorities",
                "outputs": [{ "internalType": "address", "name": "", "type": "address" }],
                "payable": false,
                "stateMutability": "view",
                "type": "function"
            },
            {
                "constant": true,
                "inputs": [{ "internalType": "address", "name": "", "type": "address" }],
                "name": "authorized",
                "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],
                "payable": false,
                "stateMutability": "view",
                "type": "function"
            },
            {
                "constant": true,
                "inputs": [{ "internalType": "address", "name": "staker", "type": "address" }],
                "name": "balanceOf",
                "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],
                "payable": false,
                "stateMutability": "view",
                "type": "function"
            },
            {
                "constant": true,
                "inputs": [],
                "name": "balanceOfZrxVault",
                "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],
                "payable": false,
                "stateMutability": "view",
                "type": "function"
            },
            {
                "constant": false,
                "inputs": [
                    { "internalType": "address", "name": "staker", "type": "address" },
                    { "internalType": "uint256", "name": "amount", "type": "uint256" }
                ],
                "name": "depositFrom",
                "outputs": [],
                "payable": false,
                "stateMutability": "nonpayable",
                "type": "function"
            },
            {
                "constant": false,
                "inputs": [],
                "name": "enterCatastrophicFailure",
                "outputs": [],
                "payable": false,
                "stateMutability": "nonpayable",
                "type": "function"
            },
            {
                "constant": true,
                "inputs": [],
                "name": "getAuthorizedAddresses",
                "outputs": [{ "internalType": "address[]", "name": "", "type": "address[]" }],
                "payable": false,
                "stateMutability": "view",
                "type": "function"
            },
            {
                "constant": true,
                "inputs": [],
                "name": "isInCatastrophicFailure",
                "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],
                "payable": false,
                "stateMutability": "view",
                "type": "function"
            },
            {
                "constant": true,
                "inputs": [],
                "name": "owner",
                "outputs": [{ "internalType": "address", "name": "", "type": "address" }],
                "payable": false,
                "stateMutability": "view",
                "type": "function"
            },
            {
                "constant": false,
                "inputs": [{ "internalType": "address", "name": "target", "type": "address" }],
                "name": "removeAuthorizedAddress",
                "outputs": [],
                "payable": false,
                "stateMutability": "nonpayable",
                "type": "function"
            },
            {
                "constant": false,
                "inputs": [
                    { "internalType": "address", "name": "target", "type": "address" },
                    { "internalType": "uint256", "name": "index", "type": "uint256" }
                ],
                "name": "removeAuthorizedAddressAtIndex",
                "outputs": [],
                "payable": false,
                "stateMutability": "nonpayable",
                "type": "function"
            },
            {
                "constant": false,
                "inputs": [{ "internalType": "address", "name": "_stakingProxyAddress", "type": "address" }],
                "name": "setStakingProxy",
                "outputs": [],
                "payable": false,
                "stateMutability": "nonpayable",
                "type": "function"
            },
            {
                "constant": false,
                "inputs": [{ "internalType": "address", "name": "_zrxProxyAddress", "type": "address" }],
                "name": "setZrxProxy",
                "outputs": [],
                "payable": false,
                "stateMutability": "nonpayable",
                "type": "function"
            },
            {
                "constant": true,
                "inputs": [],
                "name": "stakingProxyAddress",
                "outputs": [{ "internalType": "address", "name": "", "type": "address" }],
                "payable": false,
                "stateMutability": "view",
                "type": "function"
            },
            {
                "constant": false,
                "inputs": [{ "internalType": "address", "name": "newOwner", "type": "address" }],
                "name": "transferOwnership",
                "outputs": [],
                "payable": false,
                "stateMutability": "nonpayable",
                "type": "function"
            },
            {
                "constant": false,
                "inputs": [{ "internalType": "address", "name": "staker", "type": "address" }],
                "name": "withdrawAllFrom",
                "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],
                "payable": false,
                "stateMutability": "nonpayable",
                "type": "function"
            },
            {
                "constant": false,
                "inputs": [
                    { "internalType": "address", "name": "staker", "type": "address" },
                    { "internalType": "uint256", "name": "amount", "type": "uint256" }
                ],
                "name": "withdrawFrom",
                "outputs": [],
                "payable": false,
                "stateMutability": "nonpayable",
                "type": "function"
            },
            {
                "constant": true,
                "inputs": [],
                "name": "zrxAssetProxy",
                "outputs": [{ "internalType": "contract IAssetProxy", "name": "", "type": "address" }],
                "payable": false,
                "stateMutability": "view",
                "type": "function"
            }
        ],
        "devdoc": {
            "methods": {
                "addAuthorizedAddress(address)": {
                    "details": "Authorizes an address.",
                    "params": { "target": "Address to authorize." }
                },
                "balanceOf(address)": {
                    "details": "Returns the balance in Zrx Tokens of the `staker`",
                    "return": "Balance in Zrx."
                },
                "balanceOfZrxVault()": { "details": "Returns the entire balance of Zrx tokens in the vault." },
                "constructor": {
                    "details": "Constructor.",
                    "params": {
                        "_zrxProxyAddress": "Address of the 0x Zrx Proxy.",
                        "_zrxTokenAddress": "Address of the Zrx Token."
                    }
                },
                "depositFrom(address,uint256)": {
                    "details": "Deposit an `amount` of Zrx Tokens from `staker` into the vault. Note that only the Staking contract can call this. Note that this can only be called when *not* in Catastrophic Failure mode.",
                    "params": { "amount": "of Zrx Tokens to deposit.", "staker": "of Zrx Tokens." }
                },
                "enterCatastrophicFailure()": {
                    "details": "Vault enters into Catastrophic Failure Mode. *** WARNING - ONCE IN CATOSTROPHIC FAILURE MODE, YOU CAN NEVER GO BACK! *** Note that only the contract owner can call this function."
                },
                "getAuthorizedAddresses()": {
                    "details": "Gets all authorized addresses.",
                    "return": "Array of authorized addresses."
                },
                "removeAuthorizedAddress(address)": {
                    "details": "Removes authorizion of an address.",
                    "params": { "target": "Address to remove authorization from." }
                },
                "removeAuthorizedAddressAtIndex(address,uint256)": {
                    "details": "Removes authorizion of an address.",
                    "params": {
                        "index": "Index of target in authorities array.",
                        "target": "Address to remove authorization from."
                    }
                },
                "setStakingProxy(address)": {
                    "details": "Sets the address of the StakingProxy contract. Note that only the contract owner can call this function.",
                    "params": { "_stakingProxyAddress": "Address of Staking proxy contract." }
                },
                "setZrxProxy(address)": {
                    "details": "Sets the Zrx proxy. Note that only an authorized address can call this function. Note that this can only be called when *not* in Catastrophic Failure mode.",
                    "params": { "_zrxProxyAddress": "Address of the 0x Zrx Proxy." }
                },
                "transferOwnership(address)": {
                    "details": "Change the owner of this contract.",
                    "params": { "newOwner": "New owner address." }
                },
                "withdrawAllFrom(address)": {
                    "details": "Withdraw ALL Zrx Tokens to `staker` from the vault. Note that this can only be called when *in* Catastrophic Failure mode.",
                    "params": { "staker": "of Zrx Tokens." }
                },
                "withdrawFrom(address,uint256)": {
                    "details": "Withdraw an `amount` of Zrx Tokens to `staker` from the vault. Note that only the Staking contract can call this. Note that this can only be called when *not* in Catastrophic Failure mode.",
                    "params": { "amount": "of Zrx Tokens to withdraw.", "staker": "of Zrx Tokens." }
                }
            }
        },
        "evm": {
            "bytecode": {
                "object": "[encoded data, 12806 characters]"
            },
            "deployedBytecode": {
                "object": "[encoded data, 11978 characters]"
            }
        }
    },
    "compiler": {
        "name": "solc",
        "version": "soljson-v0.5.12+commit.7709ece9.js",
        "settings": {
            "optimizer": {
                "enabled": true,
                "runs": 1000000,
                "details": { "yul": true, "deduplicate": true, "cse": true, "constantOptimizer": true }
            },
            "outputSelection": {
                "*": {
                    "*": [
                        "abi",
                        "devdoc",
                        "evm.bytecode.object",
                        "evm.bytecode.sourceMap",
                        "evm.deployedBytecode.object",
                        "evm.deployedBytecode.sourceMap"
                    ]
                }
            },
            "evmVersion": "istanbul"
        }
    },
    "chains": {}
}
