Walks the contract directory and returns a Solidity input dict

        Learn more about Solidity input JSON here: https://goo.gl/7zKBvj

        Returns:
            dict: A Solidity input JSON object as a dict

def get_solc_input(self):
        """Walks the contract directory and returns a Solidity input dict

        Learn more about Solidity input JSON here: https://goo.gl/7zKBvj

        Returns:
            dict: A Solidity input JSON object as a dict
        """

        def legal(r, file_name):
            hidden = file_name[0] == '.'
            dotsol = len(file_name) > 3 and file_name[-4:] == '.sol'
            path = os.path.normpath(os.path.join(r, file_name))
            notfile = not os.path.isfile(path)
            symlink = Path(path).is_symlink()
            return dotsol and (not (symlink or hidden or notfile))

        solc_input = {
            'language': 'Solidity',
            'sources': {
                file_name: {
                    'urls': [os.path.realpath(os.path.join(r, file_name))]
                } for r, d, f in os.walk(self.contracts_dir) for file_name in f if legal(r, file_name)
            },
            'settings': {
                'optimizer': {
                    'enabled': 1,
                    'runs': 10000
                },
                'outputSelection': {
                    "*": {
                        "": [
                            "legacyAST",
                            "ast"
                        ],
                        "*": [
                            "abi",
                            "evm.bytecode.object",
                            "evm.bytecode.sourceMap",
                            "evm.deployedBytecode.object",
                            "evm.deployedBytecode.sourceMap"
                        ]
                    }
                }
            }
        }

        return solc_input