diff --git a/.gitignore b/.gitignore index fad4b73b..f8d1539d 100644 --- a/.gitignore +++ b/.gitignore @@ -11,4 +11,5 @@ dist *.lock *.svg laser* -lol.py +lol* +.idea* \ No newline at end of file diff --git a/LICENSE b/LICENSE index 7125d68d..6b2dd63b 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2015-present Dan Abramov +Copyright (c) 2017-present Bernhard Mueller Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index d61ae7fe..b25ea349 100644 --- a/README.md +++ b/README.md @@ -1,26 +1,15 @@ # Mythril - + -Mythril is a reverse engineering and bug hunting framework for the Ethereum blockchain. - - * [Installation and setup](#installation-and-setup) - * [Command line usage](#command-line-usage) - + [Input formats](#input-formats) - - [Working with on-chain contracts](#working-with-on-chain-contracts) - - [Working with Solidity files](#working-with-solidity-files) - + [Disassembler](#disassembler) - + [Control flow graph](#control-flow-graph) - + [Contract search](#contract-search) - - [Searching from the command line](#searching-from-the-command-line) - - [Finding cross-references](#finding-cross-references) +Mythril is a security analysis tool for Ethereum smart contracts. It uses concolic analysis to detect various types of issues. Use it to analyze source code or as a nmap-style black-box blockchain scanner (an "ethermap" if you will). ## Installation and setup Install from Pypi: ```bash -$ pip install mythril +$ pip3 install mythril ``` Or, clone the GitHub repo to install the newest master branch: @@ -28,78 +17,99 @@ Or, clone the GitHub repo to install the newest master branch: ```bash $ git clone https://github.com/b-mueller/mythril/ $ cd mythril -$ python setup.py install +$ python3 setup.py install ``` Note that Mythril requires Python 3.5 to work. -## Command line usage +### Function signatures -The Mythril command line tool (aptly named `myth`) allows you to conveniently access most of Mythril's functionality. +Whenever you disassemble or analyze binary code, Mythril will try to resolve function names using its local signature database. The database must be provided at `~/.mythril/signatures.json`. You can start out with the [default file](signatures.json) as follows: -### Input formats +``` +$ mkdir ~/.mythril +$ cd ~/.mythril +$ wget https://raw.githubusercontent.com/b-mueller/mythril/master/signatures.json +``` -Mythril can handle various sources and input formats, including bytecode, addresses of contracts on the blockchain, and Solidity source code files. +When you analyze Solidity code, new function signatures are added to the database automatically. -#### Working with on-chain contracts +## Security analysis -To pull contracts from the blockchain you need an Ethereum node that is synced with the network. By default, Mythril will query a local node via RPC. Alternatively, you can connect to a remote service such as [INFURA](https://infura.io): +Run `myth -x` with one of the input options described below to run the analysis. This will run the Python modules in the [/analysis/modules](https://github.com/b-mueller/mythril/tree/master/mythril/analysis/modules) directory. -``` -$ myth --rpchost=mainnet.infura.io/{API-KEY} --rpcport=443 --rpctls=True (... etc ...) -``` +Mythril detects a range of [security issues](security_checks.md), including integer underflows, owner-overwrite-to-Ether-withdrawal, and others. However, the analysis will not detect business logic issues and is not equivalent to formal verification. -The recommended way is to use [go-ethereum](https://github.com/ethereum/go-ethereum). Start your local node as follows: +### Analyzing a Truffle project -```bash -$ geth --rpc --rpcapi eth,debug --syncmode fast -``` +[Truffle Suite](http://truffleframework.com) is a popular development framework for Ethereum. To analyze the smart contracts in a Truffle project, change in the project root directory and make run `truffle compile` followed by `myth --truffle`. -#### Working with Solidity files +### Analyzing Solidity code In order to work with Solidity source code files, the [solc command line compiler](http://solidity.readthedocs.io/en/develop/using-the-compiler.html) needs to be installed and in path. You can then provide the source file(s) as positional arguments, e.g.: ```bash -$ myth -g ./graph.html myContract.sol +$ myth -x myContract.sol ``` -### Disassembler +Alternatively, compile the code on [Remix](http://remix.ethereum.org) and pass the runtime binary code to Mythril: -Use the `-d` flag to disassemble code. The disassembler accepts a bytecode string or a contract address as its input. +```bash +$ myth -x -c "0x5060(...)" +``` + +If you have multiple interdependent contracts, pass them to Mythril as separate input files. Mythril will map the first contract to address "0x0000(..)", the second one to "0x1111(...)", and so forth (make sure that contract addresses are set accordingly in the source). The contract passed as the first argument will be used as analysis entrypoint. ```bash -$ myth -d -c "0x6060" -0 PUSH1 0x60 +$ myth -x myContract.sol myLibrary.sol +``` + +### Working with contracts on the mainnet and testnets + +When analyzing contracts on the blockchain, Mythril will by default query a local node via IPC. If you want to analyze contracts on the live Ethereum network, you can also use the built-in [INFURA](https://infura.io) support. Alternatively, you can override the RPC settings with the `--rpc` argument. + +To analyze a contract on the mainnet, run: + + +``` +$ myth --infura-mainnet -x -a 0x5c436ff914c458983414019195e0f4ecbef9e6dd ``` -Specifying an address via `-a ADDRESS` will download the contract code from your node. Mythril will try to resolve function names using the signatures in `database/signature.json`: +Adding the `-l` flag will cause Mythril to automatically retrieve dependencies, such as dynamically linked library contracts: ```bash -$ myth -d -a "0x2a0c0dbecc7e4d658f48e01e3fa353f44050c208" -0 PUSH1 0x60 -2 PUSH1 0x40 -4 MSTORE -(...) -1135 - FUNCTION safeAdd(uint256,uint256) - -1136 CALLVALUE -1137 ISZERO +$ myth --infura-mainnet -x -a 0xEbFD99838cb0c132016B9E117563CB41f2B02264 -l -v1 ``` -### Control flow graph +### Speed vs. Coverage + +The maximum recursion depth for the symbolic execution engine can be controlled with the `--max-depth` argument. The default value is 12. Lowering this value reduces the analysis time as well as the coverage / number of explored states. -Mythril integrates the LASER symbolic virtual machine. Right now, this is mainly used for CFG generation. The `-g FILENAME` option generates an [interactive jsViz graph](http://htmlpreview.github.io/?https://github.com/b-mueller/mythril/blob/master/static/mythril.html): +``` +$ myth --infura-mainnet -x -a 0x5c436ff914c458983414019195e0f4ecbef9e6dd --max-depth 8 +``` + +## Control flow graph + +The `-g FILENAME` option generates an [interactive jsViz graph](http://htmlpreview.github.io/?https://github.com/b-mueller/mythril/blob/master/static/mythril.html): ```bash -$ myth -g ./graph.html -a "0xFa52274DD61E1643d2205169732f29114BC240b3" +$ myth --infura-mainnet -g ./graph.html -a 0x5c436ff914c458983414019195e0f4ecbef9e6dd --max-depth 8 ``` ![callgraph](https://raw.githubusercontent.com/b-mueller/mythril/master/static/callgraph7.png "Call graph") ~~The "bounce" effect, while awesome (and thus enabled by default), sometimes messes up the graph layout.~~ Try adding the `--enable-physics` flag for a very entertaining "bounce" effect that unfortunately completely destroys usability. -### Contract search +## Blockchain exploration -Mythril builds its own contract database to enable fast search operations. This is to enable operations like those described in the [legendary "Mitch Brenner" blog post](https://medium.com/@rtaylor30/how-i-snatched-your-153-037-eth-after-a-bad-tinder-date-d1d84422a50b) in ~~seconds~~ minutes instead of days. Unfortunately, the initial sync process is slow. You don't need to sync the whole blockchain right away though: If you abort the syncing process with `ctrl+c`, it will be auto-resumed the next time you run the `--init-db` command. +If you are planning to do batch operations or use the contract search features, running a [go-ethereum](https://github.com/ethereum/go-ethereum) node is recommended. Start your local node as follows: + +```bash +$ geth --syncmode fast +``` + +Mythril builds its own contract database to enable fast search operations. This enables operations like those described in the [legendary "Mitch Brenner" blog post](https://medium.com/@rtaylor30/how-i-snatched-your-153-037-eth-after-a-bad-tinder-date-d1d84422a50b) in ~~seconds~~ minutes instead of days. Unfortunately, the initial sync process is slow. You don't need to sync the whole blockchain right away though: If you abort the syncing process with `ctrl+c`, it will be auto-resumed the next time you run the `--init-db` command. ```bash $ myth --init-db @@ -110,7 +120,7 @@ Processing block 4323000, 3 individual contracts in database The default behavior is to only sync contracts with a non-zero balance. You can disable this behavior with the `--sync-all` flag, but be aware that this will result in a huge (as in: dozens of GB) database. -#### Searching from the command line +### Searching from the command line The search feature allows you to find contract instances that contain specific function calls and opcode sequences. It supports simple boolean expressions, such as: @@ -120,7 +130,40 @@ $ myth --search "code#PUSH1 0x50,POP#" $ myth --search "func#changeMultisig(address)# and code#PUSH1 0x50#" ``` -#### Finding cross-references +### Reading contract storage + +You can read the contents of storage slots from a deployed contract as follows. + +```bash +$ myth --storage 0,1 -a "0x76799f77587738bfeef09452df215b63d2cfb08a" +0x0000000000000000000000000000000000000000000000000000000000000003 +``` + +## Utilities + +### Disassembler + +Use the `-d` flag to disassemble code. The disassembler accepts a bytecode string or a contract address as its input. + +```bash +$ myth -d -c "0x6060" +0 PUSH1 0x60 +``` + +Specifying an address via `-a ADDRESS` will download the contract code from your node. + +```bash +$ myth -d -a "0x2a0c0dbecc7e4d658f48e01e3fa353f44050c208" +0 PUSH1 0x60 +2 PUSH1 0x40 +4 MSTORE +(...) +1135 - FUNCTION safeAdd(uint256,uint256) - +1136 CALLVALUE +1137 ISZERO +``` + +### Finding cross-references It is often useful to find other contracts referenced by a particular contract. E.g.: @@ -132,12 +175,19 @@ $ myth --xrefs -a 0x76799f77587738bfeef09452df215b63d2cfb08a 5b9e8728e316bbeb692d22daaab74f6cbf2c4691 ``` +### Calculating function hashes + +To print the Keccak hash for a given function signature: + +```bash +$ myth --hash "setOwner(address)" +0x13af4035 +``` + ## Credit - JSON RPC library is adapted from [ethjsonrpc](https://github.com/ConsenSys/ethjsonrpc) (it doesn't seem to be maintained anymore, and I needed to make some changes to it). -- The signature data in `signatures.json` has been obtained from the [Ethereum Function Signature Database](https://www.4byte.directory). - -## Disclaimer: Act responsibly! +- The signature data in `signatures.json` was initially obtained from the [Ethereum Function Signature Database](https://www.4byte.directory). -The purpose of project is to aid discovery of vulnerable smart contracts on the Ethereum mainnet and support research for novel security flaws. If you do find an exploitable issue or vulnerable contract instances, please [do the right thing](https://en.wikipedia.org/wiki/Responsible_disclosure). Also, note that vulnerability branding ("etherbleed", "chainshock",...) is highly discouraged as it will annoy the author and others in the security community. +- Many features, bugfixes and analysis modules have been added by [contributors](https://github.com/b-mueller/mythril/graphs/contributors). diff --git a/examples/discover_writes.py b/examples/discover_writes.py deleted file mode 100644 index 50e7378c..00000000 --- a/examples/discover_writes.py +++ /dev/null @@ -1,91 +0,0 @@ -from mythril.ether import util -from mythril.rpc.client import EthJsonRpc -from mythril.ether.contractstorage import get_persistent_storage -from mythril.disassembler.disassembly import Disassembly -from ethereum.abi import encode_abi -import re -import os - - -# Discover contract functions that write the sender address, or an address passed as an argument, to storage. -# Needs testrpc running on port 8546 - -# testrpc --port 8546 --gasLimit 0xFFFFFF --account 0x0b6f3fd29ca0e570faf9d0bb8945858b9c337cd2a2ff89d65013eec412a4a811,500000000000000000000 --account 0x2194ac1cd3b9ca6cccc1a90aa2c6f944994b80bb50c82b973adce7f288734d5c,500000000000000000000 - - -addr_knupper= "0xe2beffc4bc7ebb9eae43d59d2b555749d9ce7c54" -addr_schnupper = "0xadc2f8617191ff60a36c3c136170cc69c03e64cd" - -contract_storage = get_persistent_storage(os.path.join(os.path.expanduser('~'), ".mythril")) -testrpc = EthJsonRpc("localhost", 8546) - -testargs1 = [ - ([], []), - (['address'], [addr_schnupper]), - (['address', 'uint256'], [addr_schnupper, 1 ]), - (['address', 'uint256', 'uint256'], [addr_schnupper, 1, 1]), - (['address[]'], [[addr_schnupper]]), - (['address[]', 'uint256'], [[addr_schnupper], 1 ]), - (['address[]', 'uint256', 'uint256'], [[addr_schnupper], 1, 1]), -] - - -def testCase(contract_addr, function_selector, arg_types, args): - - if re.match(r'^UNK_0x', function_selector): - args = encode_abi(['address'], [addr_schnupper]) - data= function_selector[4:] + args.hex() - else: - data = util.encode_calldata(function_selector, arg_types, args) - - tx = testrpc.eth_sendTransaction(to_address=contract_addr, from_address=addr_schnupper, gas=5000000, value=0, data=data) - - trace = testrpc.traceTransaction(tx) - - if trace: - for t in trace['structLogs']: - if t['op'] == 'SSTORE': - if addr_schnupper[2:] in t['stack'][-2]: - return True - - return False - - -def testDynamic(contract_hash, contract, addresses, balances): - - ret = testrpc.eth_sendTransaction(from_address=addr_knupper, gas=5000000, value=0, data=contract.creation_code) - receipt = testrpc.eth_getTransactionReceipt(ret) - contract_addr = receipt['contractAddress'] - - try: - disas = Disassembly(contract.code) - except: - return - - found = False - - for function_selector in disas.func_to_addr: - - try: - for t in testargs1: - if(testCase(contract_addr, function_selector, t[0], t[1])): - print("Possible write!") - print("Contract hash: " + contract_hash) - print("Selector: " + function_selector) - print("Input data: " + str(t[1])) - - for i in range(0, len(addresses)): - print("Address: " + addresses[i] + ", balance: " + str(balances[i])) - - found = True - break - - if found: - break - except: - break - - -print("Searching " +str(len(list(contract_storage.contracts))) + " contracts...") - -contract_storage.search("code#PUSH#", testDynamic) # Returns all contracts diff --git a/examples/find-fallback-dcl.py b/examples/find-fallback-dcl.py deleted file mode 100644 index fc242eee..00000000 --- a/examples/find-fallback-dcl.py +++ /dev/null @@ -1,72 +0,0 @@ -from mythril.ether import evm -from mythril.ether.contractstorage import get_persistent_storage -from mythril.disassembler.disassembly import Disassembly -from mythril.rpc.client import EthJsonRpc -from mythril.disassembler.callgraph import generate_callgraph -import os - - -contract_storage = get_persistent_storage() -contract_keys = list(contract_storage.contracts) -homestead = EthJsonRpc() - -# Iterate over all contracts in the database - -for k in contract_keys: - - contract = contract_storage.contracts[k] - - # Run each contract in the PyEthereum EVM trace to check whether DELEGATECALL is reached - # To execute the fallback function, we don't provide any input data - - ret = evm.trace(contract.code) - - if 'DELEGATECALL' in ret: - - print("DELEGATECALL in fallback function: Contract 0x" + k.hex() + " deployed at: ") - - instance_list = contract_storage.instance_lists[k] - - for i in range(1, len(instance_list.addresses)): - print("Address: " + instance_list.addresses[i] + ", balance: " + str(instance_list.balances[i])) - - # contract.get_xrefs() should contain the delegateCall() target (library contract) - - print("Referenced contracts:") - - xrefs = contract.get_xrefs() - - print ("\n".join(xrefs)) - - ''' - from here on are many different options! - - In this example, we'll only check one of the refernced contracts contains the initWallet() function - If it does, we save the disassembly and callgraph for further analysis - - ''' - - for xref in xrefs: - code = homestead.eth_getCode(xref) - - disassembly = Disassembly(code) - - if contract.matches_expression("func#initWallet(address[],uint256,uint256)#"): - print ("initWallet() in referenced library contract: " + xref) - - # Save list of contracts that forward calls to this library contract - - cwd = os.getcwd() - - with open("contracts_calling_" + xref + ".txt", "w") as f: - addresses = contract_storage.instance_lists[k].addresses - - f.write("\n".join(addresses)) - - easm = disassembly.get_easm() - - with open("library_" + xref + ".easm", "w") as f: - f.write(easm) - - generate_callgraph(disassembly, os.path.join(cwd, "library_" + xref)) - diff --git a/examples/wallet.sol b/examples/wallet.sol deleted file mode 100644 index c3bf86e0..00000000 --- a/examples/wallet.sol +++ /dev/null @@ -1,85 +0,0 @@ -//sol Wallet -// Multi-sig, daily-limited account proxy/wallet. -// @authors: -// Gav Wood -// inheritable "property" contract that enables methods to be protected by requiring the acquiescence of either a -// single, or, crucially, each of a number of, designated owners. -// usage: -// use modifiers onlyowner (just own owned) or onlymanyowners(hash), whereby the same hash must be provided by -// some number (specified in constructor) of the set of owners (specified in the constructor, modifiable) before the -// interior is executed. - -pragma solidity ^0.4.9; - -contract WalletEvents { - // EVENTS - - // this contract only has six types of events: it can accept a confirmation, in which case - // we record owner and operation (hash) alongside it. - event Confirmation(address owner, bytes32 operation); - event Revoke(address owner, bytes32 operation); - - // some others are in the case of an owner changing. - event OwnerChanged(address oldOwner, address newOwner); - event OwnerAdded(address newOwner); - event OwnerRemoved(address oldOwner); - - // the last one is emitted if the required signatures change - event RequirementChanged(uint newRequirement); - - // Funds has arrived into the wallet (record how much). - event Deposit(address _from, uint value); - // Single transaction going out of the wallet (record who signed for it, how much, and to whom it's going). - event SingleTransact(address owner, uint value, address to, bytes data, address created); - // Multi-sig transaction going out of the wallet (record who signed for it last, the operation hash, how much, and to whom it's going). - event MultiTransact(address owner, bytes32 operation, uint value, address to, bytes data, address created); - // Confirmation still needed for a transaction. - event ConfirmationNeeded(bytes32 operation, address initiator, uint value, address to, bytes data); -} - -contract Wallet is WalletEvents { - - // METHODS - - // gets called when no other function matches - function() payable { - // just being sent some cash? - if (msg.value > 0) - Deposit(msg.sender, msg.value); - else if (msg.data.length > 0) - _walletLibrary.delegatecall(msg.data); - } - - // Gets an owner by 0-indexed position (using numOwners as the count) - function getOwner(uint ownerIndex) constant returns (address) { - return address(m_owners[ownerIndex + 1]); - } - - // As return statement unavailable in fallback, explicit the method here - - function hasConfirmed(bytes32 _operation, address _owner) external constant returns (bool) { - return _walletLibrary.delegatecall(msg.data); - } - - function isOwner(address _addr) constant returns (bool) { - return _walletLibrary.delegatecall(msg.data); - } - - // FIELDS - - - - address constant _walletLibrary = 0x1111111111111111111111111111111111111111; - - // the number of owners that must confirm the same operation before it is run. - uint public m_required; - // pointer used to find a free slot in m_owners - uint public m_numOwners; - - uint public m_dailyLimit; - uint public m_spentToday; - uint public m_lastDay; - - // list of owners - uint[256] m_owners; -} \ No newline at end of file diff --git a/examples/walletlibrary.sol b/examples/walletlibrary.sol deleted file mode 100644 index 88b846af..00000000 --- a/examples/walletlibrary.sol +++ /dev/null @@ -1,357 +0,0 @@ -pragma solidity ^0.4.9; - -contract WalletLibrary { - // EVENTS - - // this contract only has six types of events: it can accept a confirmation, in which case - // we record owner and operation (hash) alongside it. - event Confirmation(address owner, bytes32 operation); - event Revoke(address owner, bytes32 operation); - - // some others are in the case of an owner changing. - event OwnerChanged(address oldOwner, address newOwner); - event OwnerAdded(address newOwner); - event OwnerRemoved(address oldOwner); - - // the last one is emitted if the required signatures change - event RequirementChanged(uint newRequirement); - - // Funds has arrived into the wallet (record how much). - event Deposit(address _from, uint value); - // Single transaction going out of the wallet (record who signed for it, how much, and to whom it's going). - event SingleTransact(address owner, uint value, address to, bytes data, address created); - // Multi-sig transaction going out of the wallet (record who signed for it last, the operation hash, how much, and to whom it's going). - event MultiTransact(address owner, bytes32 operation, uint value, address to, bytes data, address created); - // Confirmation still needed for a transaction. - event ConfirmationNeeded(bytes32 operation, address initiator, uint value, address to, bytes data); - - - // TYPES - - // struct for the status of a pending operation. - struct PendingState { - uint yetNeeded; - uint ownersDone; - uint index; - } - - // Transaction structure to remember details of transaction lest it need be saved for a later call. - struct Transaction { - address to; - uint value; - bytes data; - } - - // MODIFIERS - - // simple single-sig function modifier. - modifier onlyowner { - if (isOwner(msg.sender)) - _; - } - // multi-sig function modifier: the operation must have an intrinsic hash in order - // that later attempts can be realised as the same underlying operation and - // thus count as confirmations. - modifier onlymanyowners(bytes32 _operation) { - if (confirmAndCheck(_operation)) - _; - } - - // METHODS - - // gets called when no other function matches - function() payable { - // just being sent some cash? - if (msg.value > 0) - Deposit(msg.sender, msg.value); - } - - // constructor is given number of sigs required to do protected "onlymanyowners" transactions - // as well as the selection of addresses capable of confirming them. - function initMultiowned(address[] _owners, uint _required) { - m_numOwners = _owners.length + 1; - m_owners[1] = uint(msg.sender); - m_ownerIndex[uint(msg.sender)] = 1; - for (uint i = 0; i < _owners.length; ++i) - { - m_owners[2 + i] = uint(_owners[i]); - m_ownerIndex[uint(_owners[i])] = 2 + i; - } - m_required = _required; - } - - // Revokes a prior confirmation of the given operation - function revoke(bytes32 _operation) external { - uint ownerIndex = m_ownerIndex[uint(msg.sender)]; - // make sure they're an owner - if (ownerIndex == 0) return; - uint ownerIndexBit = 2**ownerIndex; - var pending = m_pending[_operation]; - if (pending.ownersDone & ownerIndexBit > 0) { - pending.yetNeeded++; - pending.ownersDone -= ownerIndexBit; - Revoke(msg.sender, _operation); - } - } - - // Replaces an owner `_from` with another `_to`. - function changeOwner(address _from, address _to) onlymanyowners(sha3(msg.data)) external { - if (isOwner(_to)) return; - uint ownerIndex = m_ownerIndex[uint(_from)]; - if (ownerIndex == 0) return; - - clearPending(); - m_owners[ownerIndex] = uint(_to); - m_ownerIndex[uint(_from)] = 0; - m_ownerIndex[uint(_to)] = ownerIndex; - OwnerChanged(_from, _to); - } - - function addOwner(address _owner) onlymanyowners(sha3(msg.data)) external { - if (isOwner(_owner)) return; - - clearPending(); - if (m_numOwners >= c_maxOwners) - reorganizeOwners(); - if (m_numOwners >= c_maxOwners) - return; - m_numOwners++; - m_owners[m_numOwners] = uint(_owner); - m_ownerIndex[uint(_owner)] = m_numOwners; - OwnerAdded(_owner); - } - - function removeOwner(address _owner) onlymanyowners(sha3(msg.data)) external { - uint ownerIndex = m_ownerIndex[uint(_owner)]; - if (ownerIndex == 0) return; - if (m_required > m_numOwners - 1) return; - - m_owners[ownerIndex] = 0; - m_ownerIndex[uint(_owner)] = 0; - clearPending(); - reorganizeOwners(); //make sure m_numOwner is equal to the number of owners and always points to the optimal free slot - OwnerRemoved(_owner); - } - - function changeRequirement(uint _newRequired) onlymanyowners(sha3(msg.data)) external { - if (_newRequired > m_numOwners) return; - m_required = _newRequired; - clearPending(); - RequirementChanged(_newRequired); - } - - // Gets an owner by 0-indexed position (using numOwners as the count) - function getOwner(uint ownerIndex) external constant returns (address) { - return address(m_owners[ownerIndex + 1]); - } - - function isOwner(address _addr) constant returns (bool) { - return m_ownerIndex[uint(_addr)] > 0; - } - - function hasConfirmed(bytes32 _operation, address _owner) external constant returns (bool) { - var pending = m_pending[_operation]; - uint ownerIndex = m_ownerIndex[uint(_owner)]; - - // make sure they're an owner - if (ownerIndex == 0) return false; - - // determine the bit to set for this owner. - uint ownerIndexBit = 2**ownerIndex; - return !(pending.ownersDone & ownerIndexBit == 0); - } - - // constructor - stores initial daily limit and records the present day's index. - function initDaylimit(uint _limit) { - m_dailyLimit = _limit; - m_lastDay = today(); - } - // (re)sets the daily limit. needs many of the owners to confirm. doesn't alter the amount already spent today. - function setDailyLimit(uint _newLimit) onlymanyowners(sha3(msg.data)) external { - m_dailyLimit = _newLimit; - } - // resets the amount already spent today. needs many of the owners to confirm. - function resetSpentToday() onlymanyowners(sha3(msg.data)) external { - m_spentToday = 0; - } - - // constructor - just pass on the owner array to the multiowned and - // the limit to daylimit - function initWallet(address[] _owners, uint _required, uint _daylimit) { - initDaylimit(_daylimit); - initMultiowned(_owners, _required); - } - - // kills the contract sending everything to `_to`. - function kill(address _to) onlymanyowners(sha3(msg.data)) external { - suicide(_to); - } - - // Outside-visible transact entry point. Executes transaction immediately if below daily spend limit. - // If not, goes into multisig process. We provide a hash on return to allow the sender to provide - // shortcuts for the other confirmations (allowing them to avoid replicating the _to, _value - // and _data arguments). They still get the option of using them if they want, anyways. - function execute(address _to, uint _value, bytes _data) external onlyowner returns (bytes32 o_hash) { - // first, take the opportunity to check that we're under the daily limit. - if ((_data.length == 0 && underLimit(_value)) || m_required == 1) { - // yes - just execute the call. - address created; - if (_to == 0) { - created = create(_value, _data); - } else { - if (!_to.call.value(_value)(_data)) - throw; - } - SingleTransact(msg.sender, _value, _to, _data, created); - } else { - // determine our operation hash. - o_hash = sha3(msg.data, block.number); - // store if it's new - if (m_txs[o_hash].to == 0 && m_txs[o_hash].value == 0 && m_txs[o_hash].data.length == 0) { - m_txs[o_hash].to = _to; - m_txs[o_hash].value = _value; - m_txs[o_hash].data = _data; - } - if (!confirm(o_hash)) { - ConfirmationNeeded(o_hash, msg.sender, _value, _to, _data); - } - } - } - - function create(uint _value, bytes _code) internal returns (address o_addr) { - assembly { - o_addr := create(_value, add(_code, 0x20), mload(_code)) - // jumpi(invalidJumpLabel, iszero(extcodesize(o_addr))) - } - } - - // confirm a transaction through just the hash. we use the previous transactions map, m_txs, in order - // to determine the body of the transaction from the hash provided. - function confirm(bytes32 _h) onlymanyowners(_h) returns (bool o_success) { - if (m_txs[_h].to != 0 || m_txs[_h].value != 0 || m_txs[_h].data.length != 0) { - address created; - if (m_txs[_h].to == 0) { - created = create(m_txs[_h].value, m_txs[_h].data); - } else { - if (!m_txs[_h].to.call.value(m_txs[_h].value)(m_txs[_h].data)) - throw; - } - - MultiTransact(msg.sender, _h, m_txs[_h].value, m_txs[_h].to, m_txs[_h].data, created); - delete m_txs[_h]; - return true; - } - } - - // INTERNAL METHODS - - function confirmAndCheck(bytes32 _operation) internal returns (bool) { - // determine what index the present sender is: - uint ownerIndex = m_ownerIndex[uint(msg.sender)]; - // make sure they're an owner - if (ownerIndex == 0) return; - - var pending = m_pending[_operation]; - // if we're not yet working on this operation, switch over and reset the confirmation status. - if (pending.yetNeeded == 0) { - // reset count of confirmations needed. - pending.yetNeeded = m_required; - // reset which owners have confirmed (none) - set our bitmap to 0. - pending.ownersDone = 0; - pending.index = m_pendingIndex.length++; - m_pendingIndex[pending.index] = _operation; - } - // determine the bit to set for this owner. - uint ownerIndexBit = 2**ownerIndex; - // make sure we (the message sender) haven't confirmed this operation previously. - if (pending.ownersDone & ownerIndexBit == 0) { - Confirmation(msg.sender, _operation); - // ok - check if count is enough to go ahead. - if (pending.yetNeeded <= 1) { - // enough confirmations: reset and run interior. - delete m_pendingIndex[m_pending[_operation].index]; - delete m_pending[_operation]; - return true; - } - else - { - // not enough: record that this owner in particular confirmed. - pending.yetNeeded--; - pending.ownersDone |= ownerIndexBit; - } - } - } - - function reorganizeOwners() private { - uint free = 1; - while (free < m_numOwners) - { - while (free < m_numOwners && m_owners[free] != 0) free++; - while (m_numOwners > 1 && m_owners[m_numOwners] == 0) m_numOwners--; - if (free < m_numOwners && m_owners[m_numOwners] != 0 && m_owners[free] == 0) - { - m_owners[free] = m_owners[m_numOwners]; - m_ownerIndex[m_owners[free]] = free; - m_owners[m_numOwners] = 0; - } - } - } - - // checks to see if there is at least `_value` left from the daily limit today. if there is, subtracts it and - // returns true. otherwise just returns false. - function underLimit(uint _value) internal onlyowner returns (bool) { - // reset the spend limit if we're on a different day to last time. - if (today() > m_lastDay) { - m_spentToday = 0; - m_lastDay = today(); - } - // check to see if there's enough left - if so, subtract and return true. - // overflow protection // dailyLimit check - if (m_spentToday + _value >= m_spentToday && m_spentToday + _value <= m_dailyLimit) { - m_spentToday += _value; - return true; - } - return false; - } - - // determines today's index. - function today() private constant returns (uint) { return now / 1 days; } - - function clearPending() internal { - uint length = m_pendingIndex.length; - - for (uint i = 0; i < length; ++i) { - delete m_txs[m_pendingIndex[i]]; - - if (m_pendingIndex[i] != 0) - delete m_pending[m_pendingIndex[i]]; - } - - delete m_pendingIndex; - } - - // FIELDS - address constant _walletLibrary = 0xcafecafecafecafecafecafecafecafecafecafe; - - // the number of owners that must confirm the same operation before it is run. - uint public m_required; - // pointer used to find a free slot in m_owners - uint public m_numOwners; - - uint public m_dailyLimit; - uint public m_spentToday; - uint public m_lastDay; - - // list of owners - uint[256] m_owners; - - uint constant c_maxOwners = 250; - // index on the list of owners to allow reverse lookup - mapping(uint => uint) m_ownerIndex; - // the ongoing operations. - mapping(bytes32 => PendingState) m_pending; - bytes32[] m_pendingIndex; - - // pending transactions we have at present. - mapping (bytes32 => Transaction) m_txs; -} \ No newline at end of file diff --git a/myth b/myth index 3c5b9017..bd1fbbf8 100755 --- a/myth +++ b/myth @@ -5,18 +5,25 @@ """ from mythril.ether import evm, util -from mythril.disassembler.callgraph import generate_callgraph from mythril.ether.contractstorage import get_persistent_storage from mythril.ether.ethcontract import ETHContract from mythril.ether.util import compile_solidity from mythril.rpc.client import EthJsonRpc from mythril.ipc.client import EthIpc +from mythril.rpc.exceptions import ConnectionError +from mythril.support import signatures +from mythril.support.truffle import analyze_truffle_project from mythril.support.loader import DynLoader from mythril.exceptions import CompilerError +from mythril.analysis.symbolic import StateSpace +from mythril.analysis.callgraph import generate_graph +from mythril.analysis.security import fire_lasers +from web3 import Web3 from ethereum import utils -from laser.ethereum import svm, laserfree from pathlib import Path +from json.decoder import JSONDecodeError import logging +import json import sys import argparse import os @@ -35,56 +42,91 @@ def exitWithError(message): sys.exit() -parser = argparse.ArgumentParser(description='Bug hunting on the Ethereum blockchain') +parser = argparse.ArgumentParser(description='Security analysis of Ethereum smart contracts') parser.add_argument("solidity_file", nargs='*') - commands = parser.add_argument_group('commands') -commands.add_argument('-d', '--disassemble', action='store_true', help='disassemble') commands.add_argument('-g', '--graph', help='generate a control flow graph', metavar='OUTPUT_FILE') -commands.add_argument('-x', '--fire-lasers', action='store_true', help='detect vulnerabilities') -commands.add_argument('-t', '--trace', action='store_true', help='trace contract, use with --data (optional)') -commands.add_argument('-s', '--search', help='search the contract database', metavar='EXPRESSION') -commands.add_argument('--xrefs', action='store_true', help='get xrefs from a contract') -commands.add_argument('--hash', help='calculate function signature hash', metavar='SIGNATURE') -commands.add_argument('--init-db', action='store_true', help='initialize the contract database') +commands.add_argument('-x', '--fire-lasers', action='store_true', help='detect vulnerabilities, use with -c, -a or solidity file(s)') +commands.add_argument('-t', '--truffle', action='store_true', help='analyze a truffle project (run from project dir)') inputs = parser.add_argument_group('input arguments') inputs.add_argument('-c', '--code', help='hex-encoded bytecode string ("6060604052...")', metavar='BYTECODE') inputs.add_argument('-a', '--address', help='pull contract from the blockchain', metavar='CONTRACT_ADDRESS') -inputs.add_argument('-l', '--dynld', action='store_true', help='auto-load dependencies (experimental)') -inputs.add_argument('--data', help='message call input data for tracing') +inputs.add_argument('-l', '--dynld', action='store_true', help='auto-load dependencies from the blockchain') + +database = parser.add_argument_group('local contracts database') +database.add_argument('--init-db', action='store_true', help='initialize the contract database') +database.add_argument('-s', '--search', help='search the contract database', metavar='EXPRESSION') + +utils = parser.add_argument_group('utilities') +utils.add_argument('-d', '--disassemble', action='store_true', help='print disassembly') +utils.add_argument('--xrefs', action='store_true', help='get xrefs from a contract') +utils.add_argument('--hash', help='calculate function signature hash', metavar='SIGNATURE') +utils.add_argument('--storage', help='read state variables from storage index, use with -a', metavar='INDEX,NUM_SLOTS,[array]') options = parser.add_argument_group('options') options.add_argument('--sync-all', action='store_true', help='Also sync contracts with zero balance') -options.add_argument('--infura-mainnet', action='store_true', help='Use Infura Node service, equivalent to: --rpchost=mainnet.infura.io --rpcport=443 --rpctls="True"') -options.add_argument('--infura-rinkeby', action='store_true', help='Use Infura Node service, equivalent to: --rpchost=rinkeby.infura.io --rpcport=443 --rpctls="True"') -options.add_argument('--infura-kovan', action='store_true', help='Use Infura Node service, equivalent to: --rpchost=kovan.infura.io --rpcport=443 --rpctls="True"') -options.add_argument('--infura-ropsten', action='store_true', help='Use Infura Node service, equivalent to: --rpchost=ropsten.infura.io --rpcport=443 --rpctls="True"') -options.add_argument('--rpchost', default='127.0.0.1', help='RPC host') -options.add_argument('--rpcport', type=int, default=8545, help='RPC port') -options.add_argument('--rpctls', type=bool, default=False, help='RPC port') -options.add_argument('--ipc', help='use IPC interface instead of RPC', action='store_true') +options.add_argument('--max-depth', type=int, default=12, help='Maximum recursion depth for symbolic execution') options.add_argument('--enable-physics', type=bool, default=False, help='enable graph physics simulation') options.add_argument('-v', type=int, help='log level (0-2)', metavar='LOG_LEVEL') +rpc = parser.add_argument_group('RPC options') +rpc.add_argument('--rpc', help='connect via RPC', metavar='HOST:PORT') +rpc.add_argument('--rpctls', type=bool, default=False, help='RPC connection over TLS') +rpc.add_argument('--ganache', action='store_true', help='Preset: local Ganache') +rpc.add_argument('--infura-mainnet', action='store_true', help='Preset: Infura Node service (Mainnet)') +rpc.add_argument('--infura-rinkeby', action='store_true', help='Preset: Infura Node service (Rinkeby)') +rpc.add_argument('--infura-kovan', action='store_true', help='Preset: Infura Node service (Kovan)') +rpc.add_argument('--infura-ropsten', action='store_true', help='Preset: Infura Node service (Ropsten)') + # Get config values try: - db_dir = os.environ['DB_DIR'] + mythril_dir = os.environ['MYTHRIL_DIR'] except KeyError: - db_dir = None + mythril_dir = os.path.join(os.path.expanduser('~'), ".mythril") try: solc_binary = os.environ['SOLC'] except KeyError: solc_binary = 'solc' + +# Initialize data directry and singature database + +if not os.path.exists(mythril_dir): + logging.info("Creating mythril data directory") + + os.mkdir(mythril_dir) + + +# If no function signature file exists, create it. Function signatures from Solidity source code are added automatically. + +signatures_file = os.path.join(mythril_dir, 'signatures.json') + +if not os.path.exists(signatures_file): + print("No signature database found. Creating empty database: " + signatures_file + "\n" \ + "Consider replacing it with the pre-initialized database at " \ + "https://raw.githubusercontent.com/ConsenSys/mythril/master/signatures.json") + + sigs = {} + + with open(signatures_file, 'a') as f: + json.dump({},f) + +else: + with open(signatures_file) as f: + try: + sigs = json.load(f) + except JSONDecodeError as e: + exitWithError("Invalid JSON in signatures file " + signatures_file + "\n" + str(e)) + # Parse cmdline args args = parser.parse_args() -if not (args.search or args.init_db or args.hash or args.disassemble or args.graph or args.xrefs or args.fire_lasers or args.trace): +if not (args.search or args.init_db or args.hash or args.disassemble or args.graph or args.xrefs or args.fire_lasers or args.storage or args.truffle): parser.print_help() sys.exit() @@ -96,11 +138,50 @@ elif (args.hash): print("0x" + utils.sha3(args.hash)[:4].hex()) sys.exit() + +if args.truffle: + + try: + analyze_truffle_project() + except FileNotFoundError: + print("Build directory not found. Make sure that you start the analysis from the project root, and that 'truffle compile' has executed successfully.") + + sys.exit() + + +# Establish RPC/IPC connection if necessary + +if (args.address or len(args.solidity_file) or args.init_db): + + if args.infura_mainnet: + eth = EthJsonRpc('mainnet.infura.io', 443, True) + elif args.infura_rinkeby: + eth = EthJsonRpc('rinkeby.infura.io', 443, True) + elif args.infura_kovan: + eth = EthJsonRpc('kovan.infura.io', 443, True) + elif args.infura_ropsten: + eth = EthJsonRpc('ropsten.infura.io', 443, True) + elif args.ganache: + eth = EthJsonRpc('localhost', 7545, False) + elif args.rpc: + + try: + host, port = args.rpc.split(":") + except ValueError: + exitWithError("Invalid RPC argument, use HOST:PORT") + + tls = args.rpctls + + eth = EthJsonRpc(host, int(port), tls) + else: + eth = EthIpc() + + # Database search ops if args.search or args.init_db: - contract_storage = get_persistent_storage(db_dir) + contract_storage = get_persistent_storage(mythril_dir) if (args.search): @@ -110,34 +191,16 @@ if args.search or args.init_db: exitWithError("Syntax error in search expression.") elif (args.init_db): - contract_storage.initialize(args.rpchost, args.rpcport, args.rpctls, args.sync_all, args.ipc) - - sys.exit() + try: + contract_storage.initialize(eth, args.sync_all) + except FileNotFoundError as e: + print("Error syncing database over IPC: " + str(e)) + except ConnectionError as e: + print("Could not connect to RPC server. Make sure that your node is running and that RPC parameters are set correctly.") -# Establish RPC/IPC connection if necessary -if (args.address or len(args.solidity_file)): - if args.ipc: - try: - eth = EthIpc() + sys.exit() - except Exception as e: - exitWithError("Error establishing IPC connection: " + str(e)) - else: - try: - if args.infura_mainnet: - eth = EthJsonRpc('mainnet.infura.io', 443, True) - elif args.infura_rinkeby: - eth = EthJsonRpc('rinkeby.infura.io', 443, True) - elif args.infura_kovan: - eth = EthJsonRpc('kovan.infura.io', 443, True) - elif args.infura_ropsten: - eth = EthJsonRpc('ropsten.infura.io', 443, True) - else: - eth = EthJsonRpc(args.rpchost, args.rpcport, args.rpctls) - - except Exception as e: - exitWithError("Error establishing RPC connection: " + str(e)) # Load / compile input contracts @@ -146,7 +209,22 @@ contracts = [] if (args.code): contracts.append(ETHContract(args.code, name="MAIN", address = util.get_indexed_address(0))) elif (args.address): - contracts.append(ETHContract(eth.eth_getCode(args.address), name=args.address, address = args.address)) + + if not re.match(r'0x[a-fA-F0-9]{40}', args.address): + exitWithError("Invalid contract address. Expected format is '0x...'.") + + try: + code = eth.eth_getCode(args.address) + + if (code == "0x"): + exitWithError("Received an empty response from eth_getCode. Check the contract address and verify that you are on the correct chain.") + + except FileNotFoundError as e: + exitWithError("IPC error: " + str(e)) + except ConnectionError as e: + exitWithError("Could not connect to RPC server. Make sure that your node is running and that RPC parameters are set correctly.") + + contracts.append(ETHContract(code, name=args.address, address = args.address)) elif (len(args.solidity_file)): index = 0 @@ -154,12 +232,16 @@ elif (len(args.solidity_file)): file = file.replace("~", str(Path.home())) # Expand user path + signatures.add_signatures_from_file(file, sigs) + + logging.debug("Adding function signatures from source code:\n" + str(sigs)) + try: - name, bytecode = compile_solidity(solc_binary, file) + name, bytecode = compile_solidity(file, solc_binary) except CompilerError as e: exitWithError(e) - # Max. 16 contracts supported! + # Max. 16 input files supported! contract = ETHContract(bytecode, name = name, address = util.get_indexed_address(index)) index += 1 @@ -167,29 +249,59 @@ elif (len(args.solidity_file)): contracts.append(contract) logging.info(contract.name + " at " + contract.address) + # Save updated signature + + with open(signatures_file, 'w') as f: + json.dump(sigs, f) + else: exitWithError("No input bytecode. Please provide EVM code via -c BYTECODE, -a ADDRESS, or -i SOLIDITY_FILES") # Commands -if (args.disassemble): +if args.storage: + if not args.address: + exitWithError("To read storage, provide the address of a deployed contract with the -a option.") + else: + position = 0 + length = 1 + array = 0 - easm_text = contracts[0].get_easm() - sys.stdout.write(easm_text) + try: + params = (args.storage).split(",") + if len(params) >= 1 and len(params) <= 3: + position = int(params[0]) + if len(params) >= 2 and len(params) <= 3: + length = int(params[1]) + if len(params) == 3: + if re.match("array",params[2]): + array = 1 + if len(params) >= 4: + exitWithError("Invalid number of parameters.") + except ValueError: + exitWithError("Invalid storage index. Please provide a numeric value.") + + if array: + position_formated = str(position).zfill(64) + position = int(Web3.sha3(position_formated),16) -elif (args.trace): - if (args.data): - trace = evm.trace(contracts[0].code, args.data) + try: + if length == 1: + print("{}: ".format(position) + eth.eth_getStorageAt(args.address, position)); + else: + for i in range(position, position + length): + print("{}: ".format(hex(i)) + eth.eth_getStorageAt(args.address, i)); + except FileNotFoundError as e: + exitWithError("IPC error: " + str(e)) + except ConnectionError as e: + exitWithError("Could not connect to RPC server. Make sure that your node is running and that RPC parameters are set correctly.") - else: - trace = evm.trace(contracts[0].code) - for i in trace: - if (re.match(r'^PUSH.*', i['op'])): - print(str(i['pc']) + " " + i['op'] + " " + i['pushvalue'] + ";\tSTACK: " + i['stack']) - else: - print(str(i['pc']) + " " + i['op'] + ";\tSTACK: " + i['stack']) +elif (args.disassemble): + + easm_text = contracts[0].get_easm() + sys.stdout.write(easm_text) elif (args.xrefs): @@ -197,38 +309,39 @@ elif (args.xrefs): elif (args.graph) or (args.fire_lasers): - # Convert to LASER SVM format - - modules = {} - - for contract in contracts: - modules[contract.address] = contract.as_dict() - - if (args.dynld): - loader = DynLoader(eth) - _svm = svm.SVM(modules, dynamic_loader=loader) - else: - _svm = svm.SVM(modules) - if (args.graph): - _svm.simplify_model = True + if (args.dynld): + states = StateSpace(contracts, dynloader=DynLoader(eth), max_depth=args.max_depth) + else: + states = StateSpace(contracts, max_depth=args.max_depth) if args.enable_physics is not None: - physics = True + physics = True - html = generate_callgraph(_svm, contracts[0].address, args.enable_physics) + html = generate_graph(states, args.enable_physics) try: with open(args.graph, "w") as f: f.write(html) except Exception as e: - print("Error saving graph: " + str(e)) else: - laserfree.fire(modules, contracts[0].address) + if (args.dynld): + states = StateSpace(contracts, dynloader=DynLoader(eth), max_depth=args.max_depth) + else: + states = StateSpace(contracts, max_depth=args.max_depth) + + report = fire_lasers(states) + + if (len(report.issues)): + print(report.as_text()) + + else: + + print("The analysis was completed successfully. No issues were detected.") else: parser.print_help() diff --git a/mythril/analysis/__init__.py b/mythril/analysis/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/mythril/disassembler/callgraph.py b/mythril/analysis/callgraph.py similarity index 65% rename from mythril/disassembler/callgraph.py rename to mythril/analysis/callgraph.py index d166223a..19404eba 100644 --- a/mythril/disassembler/callgraph.py +++ b/mythril/analysis/callgraph.py @@ -78,8 +78,30 @@ graph_html = '''


@@ -91,25 +113,33 @@ colors = [ "{border: '#9e42b3', background: '#842899', highlight: {border: '#9e42b3', background: '#933da6'}}", "{border: '#b82323', background: '#991d1d', highlight: {border: '#b82323', background: '#a61f1f'}}", "{border: '#4753bf', background: '#3b46a1', highlight: {border: '#4753bf', background: '#424db3'}}", + "{border: '#26996f', background: '#2f7e5b', highlight: {border: '#26996f', background: '#28a16f'}}", + "{border: '#9e42b3', background: '#842899', highlight: {border: '#9e42b3', background: '#933da6'}}", + "{border: '#b82323', background: '#991d1d', highlight: {border: '#b82323', background: '#a61f1f'}}", + "{border: '#4753bf', background: '#3b46a1', highlight: {border: '#4753bf', background: '#424db3'}}", ] -def serialize(_svm, color_map): +def serialize(statespace, color_map): nodes = [] edges = [] - for node_key in _svm.nodes: + for node_key in statespace.nodes: - code = _svm.nodes[node_key].as_dict()['code'] + code = statespace.nodes[node_key].as_dict()['code'] code = re.sub("([0-9a-f]{8})[0-9a-f]+", lambda m: m.group(1) + "(...)", code) - color = color_map[_svm.nodes[node_key].as_dict()['module_name']] + code_split = code.split("\\n") + + truncated_code = code if (len(code_split) < 7) else "\\n".join(code_split[:6]) + "\\n(click to expand +)" - nodes.append("{id: '" + node_key + "', color: " + color + ", size: 150, 'label': '" + code + "'}") + color = color_map[statespace.nodes[node_key].as_dict()['module_name']] - for edge in _svm.edges: + nodes.append("{id: '" + str(node_key) + "', color: " + color + ", size: 150, 'label': '" + truncated_code + "', 'fullLabel': '" + code + "', 'truncLabel': '" + truncated_code + "', 'isExpanded': false}") + + for edge in statespace.edges: if (edge.condition is None): label = "" @@ -129,19 +159,17 @@ def serialize(_svm, color_map): -def generate_callgraph(svm, main_address, physics): - - svm.sym_exec(main_address) +def generate_graph(statespace, physics = False): i = 0 color_map = {} - for k in svm.modules: - color_map[svm.modules[k]['name']] = colors[i] + for k in statespace.modules: + color_map[statespace.modules[k]['name']] = colors[i] i += 1 - html = graph_html.replace("[JS]", serialize(svm, color_map)) + html = graph_html.replace("[JS]", serialize(statespace, color_map)) html = html.replace("[ENABLE_PHYSICS]", str(physics).lower()) return html diff --git a/mythril/analysis/modules/__init__.py b/mythril/analysis/modules/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/mythril/analysis/modules/call_to_dynamic_with_gas.py b/mythril/analysis/modules/call_to_dynamic_with_gas.py new file mode 100644 index 00000000..6198abac --- /dev/null +++ b/mythril/analysis/modules/call_to_dynamic_with_gas.py @@ -0,0 +1,73 @@ +from z3 import * +from mythril.analysis.ops import * +from mythril.analysis.report import Issue +import re +import logging + + +''' +MODULE DESCRIPTION: + +Check for call.value()() to an untrusted address +''' + +def execute(statespace): + + logging.debug("Executing module: CALL_TO_DYNAMIC_WITH_GAS") + + issues = [] + + for call in statespace.calls: + + if (call.type == "CALL"): + + logging.debug("[CALL_TO_DYNAMIC_WITH_GAS] Call to: " + str(call.to) + ", value " + str(call.value) + ", gas = " + str(call.gas)) + + if (call.to.type == VarType.SYMBOLIC and (call.gas.type == VarType.CONCRETE and call.gas.val > 2300) or (call.gas.type == VarType.SYMBOLIC and "2300" not in str(call.gas))): + + description = "The function " + call.node.function_name + " contains a function call to " + + target = str(call.to) + is_valid = False + + if ("calldata" in target or "caller" in target): + + if ("calldata" in target): + description += "an address provided as a function argument. " + else: + description += "the address of the transaction sender. " + + is_valid = True + else: + m = re.search(r'storage_([a-z0-9_&^]+)', str(call.to)) + + if (m): + index = m.group(1) + + try: + + for s in statespace.sstors[index]: + + if s.tainted: + + description += \ + "an address found at storage position " + str(index) + ".\n" + \ + "This storage position can be written to by calling the function '" + s.node.function_name + "'.\n" \ + "Verify that the contract address cannot be set by untrusted users.\n" + + is_valid = True + break + + except KeyError: + logging.debug("[CALL_TO_DYNAMIC_WITH_GAS] No storage writes to index " + str(index)) + continue + + if is_valid: + + description += "The available gas is forwarded to the called contract. Make sure that the logic of the calling contract is not adversely affected if the called contract misbehaves (e.g. reentrancy)." + + issue = Issue(call.node.module_name, call.node.function_name, call.addr, "CALL with gas to dynamic address", "Warning", description) + + issues.append(issue) + + return issues diff --git a/mythril/analysis/modules/delegatecall_forward.py b/mythril/analysis/modules/delegatecall_forward.py new file mode 100644 index 00000000..1da2b18c --- /dev/null +++ b/mythril/analysis/modules/delegatecall_forward.py @@ -0,0 +1,53 @@ +from z3 import * +import re +from mythril.analysis.ops import * +from mythril.analysis.report import Issue +import logging + + +''' +MODULE DESCRIPTION: + +Check for invocations of delegatecall(msg.data) in the fallback function. +''' + +def execute(statespace): + + logging.debug("Executing module: DELEGATECALL_FORWARD") + + issues = [] + visited = [] + + for call in statespace.calls: + + # Only needs to be checked once per call instructions (essentially just static analysis) + + if call.addr in visited: + continue + else: + visited.append(call.addr) + + if (call.type == "DELEGATECALL") and (call.node.function_name == "main"): + + stack = call.state.stack + + meminstart = get_variable(stack[-3]) + + if meminstart.type == VarType.CONCRETE: + + if (re.search(r'calldata.*_0', str(call.state.memory[meminstart.val]))): + + issue = Issue(call.node.module_name, call.node.function_name, call.addr, "CALLDATA forwarded with delegatecall()", "Informational") + + issue.description = \ + "This contract forwards its calldata via DELEGATECALL in its fallback function. " \ + "This means that any function in the called contract can be executed. Note that the callee contract will have access to the storage of the calling contract.\n" + + if (call.to.type == VarType.CONCRETE): + issue.description += ("DELEGATECALL target: " + hex(call.to.val)) + else: + issue.description += "DELEGATECALL target: " + str(call.to) + + issues.append(issue) + + return issues diff --git a/mythril/analysis/modules/delegatecall_to_dynamic.py b/mythril/analysis/modules/delegatecall_to_dynamic.py new file mode 100644 index 00000000..3aeb1faa --- /dev/null +++ b/mythril/analysis/modules/delegatecall_to_dynamic.py @@ -0,0 +1,67 @@ +from z3 import * +from mythril.analysis.ops import * +from mythril.analysis.report import Issue +import re +import logging + + +''' +MODULE DESCRIPTION: + +Check for invocations of delegatecall/callcode to a user-supplied address +''' + +def execute(statespace): + + logging.debug("Executing module: DELEGATECALL_TO_DYNAMIC") + + issues = [] + + for call in statespace.calls: + + if (call.type == "DELEGATECALL" or call.type == "CALLCODE"): + + if (call.to.type == VarType.SYMBOLIC): + + if ("calldata" in str(call.to)): + issue = Issue(call.node.module_name, call.node.function_name, call.addr, call.type + " to dynamic address") + + issue.description = \ + "The function " + call.node.function_name + " delegates execution to a contract address obtained from calldata.\n" \ + "Recipient address: " + str(call.to) + + issues.append(issue) + else: + m = re.search(r'storage_([a-z0-9_&^]+)', str(call.to)) + + if (m): + index = m.group(1) + logging.debug("DELEGATECALL to contract address in storage") + + try: + + for s in statespace.sstors[index]: + + if s.tainted: + issue = Issue(call.type + " to dynamic address in storage", "Warning") + issue.description = \ + "The function " + call.node.function_name + " in contract '" + call.node.module_name + " delegates execution to a contract address stored in a state variable. " \ + "There is a check on storage index " + str(index) + ". This storage index can be written to by calling the function '" + s.node.function_name + "'.\n" \ + "Make sure that the contract address cannot be set by untrusted users." + issues.append(issue) + break + + except KeyError: + logging.debug("[ETHER_SEND] No storage writes to index " + str(index)) + + else: + + issue = Issue(call.node.module_name, call.node.function_name, call.addr, "DELEGATECALL to dynamic address", "Informational") + + issue.description = \ + "The function " + call.node.function_name + " in contract '" + call.node.module_name + " delegates execution to a contract with a dynamic address." \ + "To address:" + str(call.to) + + issues.append(issue) + + return issues diff --git a/mythril/analysis/modules/ether_send.py b/mythril/analysis/modules/ether_send.py new file mode 100644 index 00000000..e6839de2 --- /dev/null +++ b/mythril/analysis/modules/ether_send.py @@ -0,0 +1,133 @@ +from z3 import * +from mythril.analysis.ops import * +from mythril.analysis import solver +from mythril.analysis.report import Issue +from mythril.exceptions import UnsatError +import re +import logging + + +''' +MODULE DESCRIPTION: + +Check for CALLs that send >0 Ether to either the transaction sender, or to an address provided as a function argument. +If msg.sender is checked against a value in storage, check whether that storage index is tainted (i.e. there's an unconstrained write +to that index). +''' + +def execute(statespace): + + logging.debug("Executing module: ETHER_SEND") + + issues = [] + + for call in statespace.calls: + + if ("callvalue" in str(call.value)): + logging.debug("[ETHER_SEND] Skipping refund function") + continue + + # We're only interested in calls that send Ether + + if call.value.type == VarType.CONCRETE: + if call.value.val == 0: + continue + + interesting = False + + description = "In the function '" + call.node.function_name +"' " + + if re.search(r'caller', str(call.to)): + description += "a non-zero amount of Ether is sent to msg.sender.\n" + interesting = True + + elif re.search(r'calldata', str(call.to)): + description += "a non-zero amount of Ether is sent to an address taken from function arguments.\n" + interesting = True + + else: + m = re.search(r'storage_([a-z0-9_&^]+)', str(call.to)) + + if (m): + + idx = m.group(1) + + try: + + for s in statespace.sstors[idx]: + + if s.tainted: + description += "a non-zero amount of Ether is sent to an address taken from storage slot " + str(idx) + "." \ + " This storage slot can be written to by calling the function '" + s.node.function_name + "'.\n" + interesting = True + continue + + except KeyError: + logging.debug("[ETHER_SEND] No storage writes to index " + str(idx)) + break + + + if interesting: + + description += "Call value is " + str(call.value) + ".\n" + + node = call.node + + can_solve = True + constrained = False + + index = 0 + + while(can_solve and index < len(node.constraints)): + + constraint = node.constraints[index] + index += 1 + logging.debug("[ETHER_SEND] Constraint: " + str(constraint)) + + m = re.search(r'storage_([a-z0-9_&^]+)', str(constraint)) + + overwrite = False + + if (m): + + constrained = True + idx = m.group(1) + + func = statespace.find_storage_write(idx) + + if (func): + description += "\nThere is a check on storage index " + str(index) + ". This storage slot can be written to by calling the function '" + func + "'." + overwrite = True + else: + logging.debug("[ETHER_SEND] No storage writes to index " + str(index)) + can_solve = False + break + + # CALLER may also be constrained to hardcoded address. I.e. 'caller' and some integer + + elif (re.search(r"caller", str(constraint)) and re.search(r'[0-9]{20}', str(constraint))): + constrained = True + can_solve = False + break + + + + if not constrained: + description += "It seems that this function can be called without restrictions." + + if can_solve: + + try: + model = solver.get_model(node.constraints) + logging.debug("[ETHER_SEND] MODEL: " + str(model)) + + for d in model.decls(): + logging.debug("[ETHER_SEND] main model: %s = 0x%x" % (d.name(), model[d].as_long())) + + issue = Issue(call.node.module_name, call.node.function_name, call.addr, "Ether send", "Warning", description) + issues.append(issue) + + except UnsatError: + logging.debug("[ETHER_SEND] no model found") + + return issues diff --git a/mythril/analysis/modules/integer_underflow.py b/mythril/analysis/modules/integer_underflow.py new file mode 100644 index 00000000..d74b930e --- /dev/null +++ b/mythril/analysis/modules/integer_underflow.py @@ -0,0 +1,76 @@ +from z3 import * +from mythril.analysis import solver +from mythril.analysis.ops import * +from mythril.analysis.report import Issue +from mythril.exceptions import UnsatError +import re +import logging + + +''' +MODULE DESCRIPTION: + +Check for integer underflows. +For every SUB instruction, check if there's a possible state where op1 > op0. +''' + +def execute(statespace): + + logging.debug("Executing module: INTEGER_UNDERFLOW") + + issues = [] + + for k in statespace.nodes: + node = statespace.nodes[k] + + for instruction in node.instruction_list: + + if(instruction['opcode'] == "SUB"): + + stack = node.states[instruction['address']].stack + + op0 = stack[-1] + op1 = stack[-2] + + constraints = copy.deepcopy(node.constraints) + + if type(op0) == int and type(op1) == int: + continue + + if (re.search(r'calldatasize_', str(op0))) \ + or (re.search(r'256\*.*If\(1', str(op0), re.DOTALL) or re.search(r'256\*.*If\(1', str(op1), re.DOTALL)) \ + or (re.search(r'32 \+.*calldata', str(op0), re.DOTALL) or re.search(r'32 \+.*calldata', str(op1), re.DOTALL)): + + # Filter for patterns that contain possible (but apparently non-exploitable) Integer underflows. + + # Pattern 1: (96 + calldatasize_MAIN) - (96), where (96 + calldatasize_MAIN) would underflow if calldatasize is very large. + # Pattern 2: (256*If(1 & storage_0 == 0, 1, 0)) - 1, this would underlow if storage_0 = 0 + + # Both seem to be standard compiler outputs that exist in many contracts. + + continue + + logging.debug("[INTEGER_UNDERFLOW] Checking SUB " + str(op0) + ", " + str(op1) + " at address " + str(instruction['address'])) + + constraints.append(UGT(op1,op0)) + + try: + + model = solver.get_model(constraints) + + issue = Issue(node.module_name, node.function_name, instruction['address'], "Integer Underflow", "Warning") + + issue.description = "A possible integer underflow exists in the function " + node.function_name + ".\n" \ + "The SUB instruction at address " + str(instruction['address']) + " may result in a value < 0." + + issue.debug = "(" + str(op0) + ") - (" + str(op1) + ").]" + + issues.append(issue) + + for d in model.decls(): + logging.debug("[INTEGER_UNDERFLOW] model: %s = 0x%x" % (d.name(), model[d].as_long())) + + except UnsatError: + logging.debug("[INTEGER_UNDERFLOW] no model found") + + return issues diff --git a/mythril/analysis/modules/tx_origin.py b/mythril/analysis/modules/tx_origin.py new file mode 100644 index 00000000..41d7d52a --- /dev/null +++ b/mythril/analysis/modules/tx_origin.py @@ -0,0 +1,31 @@ +from mythril.analysis.report import Issue +import re +import logging + + +''' +MODULE DESCRIPTION: + +Check for constraints on tx.origin (i.e., access to some functionality is restricted to a specific origin). +''' + +def execute(statespace): + + logging.debug("Executing module: DEPRECIATED OPCODES") + + issues = [] + + for k in statespace.nodes: + node = statespace.nodes[k] + + for instruction in node.instruction_list: + + if(instruction['opcode'] == "ORIGIN"): + + issue = Issue(node.module_name, node.function_name, None, "Use of tx.origin", "Warning", \ + "Function " + node.function_name + " retrieves the transaction origin (tx.origin) using the ORIGIN opcode. Use tx.sender instead.\nSee also: https://solidity.readthedocs.io/en/develop/security-considerations.html#tx-origin" + ) + + issues.append(issue) + + return issues diff --git a/mythril/analysis/modules/unchecked_retval.py b/mythril/analysis/modules/unchecked_retval.py new file mode 100644 index 00000000..a160991f --- /dev/null +++ b/mythril/analysis/modules/unchecked_retval.py @@ -0,0 +1,83 @@ +from z3 import * +import re +from mythril.analysis.ops import * +from mythril.analysis.report import Issue +import logging +from laser.ethereum import helper + + +''' +MODULE DESCRIPTION: + +Test whether CALL return value is checked. + +For direct calls, the Solidity compiler auto-generates this check. E.g.: + + Alice c = Alice(address); + c.ping(42); + +Here the CALL will be followed by IZSERO(retval), if retval = ZERO then state is reverted. + +For low-level-calls this check is omitted. E.g.: + + c.call.value(0)(bytes4(sha3("ping(uint256)")),1); + +''' + +def execute(statespace): + + logging.debug("Executing module: UNCHECKED_RETVAL") + + issues = [] + visited = [] + + for call in statespace.calls: + + # Only needs to be checked once per call instructions (it's essentially just static analysis) + + if call.addr in visited: + continue + else: + visited.append(call.addr) + + # The instructions executed in each node (basic block) are saved in node.instruction_list, e.g.: + # [{address: "132", opcode: "CALL"}, {address: "133", opcode: "ISZERO"}] + + start_index = helper.get_instruction_index(call.node.instruction_list, call.addr) + 1 + + retval_checked = False + + # ISZERO retval should be found within the next few instructions. + + for i in range(0, 10): + + try: + instr = call.node.instruction_list[start_index + i] + except IndexError: + break + + if (instr['opcode'] == 'ISZERO' and re.search(r'retval', str(call.node.states[instr['address']].stack[-1]))): + retval_checked = True + break + + if not retval_checked: + + issue = Issue(call.node.module_name, call.node.function_name, call.addr, "Unchecked CALL return value") + + if (call.to.type == VarType.CONCRETE): + receiver = hex(call.to.val) + elif (re.search(r"caller", str(call.to))): + receiver = "msg.sender" + elif (re.search(r"storage", str(call.to))): + receiver = "an address obtained from storage" + else: + receiver = str(call.to) + + + issue.description = \ + "The function " + call.node.function_name + " contains a call to " + receiver + ".\n" \ + "The return value of this call is not checked. Note that the function will continue to execute with a return value of '0' if the called contract throws." + + issues.append(issue) + + return issues \ No newline at end of file diff --git a/mythril/analysis/modules/unchecked_suicide.py b/mythril/analysis/modules/unchecked_suicide.py new file mode 100644 index 00000000..e64c07e8 --- /dev/null +++ b/mythril/analysis/modules/unchecked_suicide.py @@ -0,0 +1,112 @@ +from z3 import * +from mythril.analysis import solver +from mythril.analysis.ops import * +from mythril.analysis.report import Issue +from mythril.exceptions import UnsatError +import re +import logging + + + +''' +MODULE DESCRIPTION: + +Check for SUICIDE instructions that either can be reached by anyone, or where msg.sender is checked against a tainted storage index +(i.e. there's a write to that index is unconstrained by msg.sender). +''' + +def execute(statespace): + + logging.debug("Executing module: UNCHECKED_SUICIDE") + + issues = [] + + for k in statespace.nodes: + node = statespace.nodes[k] + + for instruction in node.instruction_list: + + if(instruction['opcode'] == "SUICIDE"): + + logging.debug("[UNCHECKED_SUICIDE] suicide in function " + node.function_name) + + description = "The function " + node.function_name + " executes the SUICIDE instruction." + + state = node.states[instruction['address']] + to = state.stack.pop() + + if ("caller" in str(to)): + description += "\nThe remaining Ether is sent to the caller's address.\n" + elif ("storage" in str(to)): + description += "\nThe remaining Ether is sent to a stored address\n" + elif ("calldata" in str(to)): + description += "\nThe remaining Ether is sent to an address provided as a function argument." + elif (type(to) == BitVecNumRef): + description += "\nThe remaining Ether is sent to: " + hex(to.as_long()) + else: + description += "\nThe remaining Ether is sent to: " + str(to) + "\n" + + constrained = False + can_solve = True + + index = 0 + + while(can_solve and index < len(node.constraints)): + + constraint = node.constraints[index] + index += 1 + + m = re.search(r'storage_([a-z0-9_&^]+)', str(constraint)) + + overwrite = False + + if (m): + constrained = True + index = m.group(1) + + try: + + for s in statespace.sstors[index]: + + if s.tainted: + description += "\nThere is a check on storage index " + str(index) + ". This storage index can be written to by calling the function '" + s.node.function_name + "'." + break + + if not overwrite: + logging.debug("[UNCHECKED_SUICIDE] No storage writes to index " + str(index)) + can_solve = False + break + + except KeyError: + logging.debug("[UNCHECKED_SUICIDE] No storage writes to index " + str(index)) + can_solve = False + break + + + # CALLER may also be constrained to hardcoded address. I.e. 'caller' and some integer + + elif (re.search(r"caller", str(constraint)) and re.search(r'[0-9]{20}', str(constraint))): + can_solve = False + break + + + if not constrained: + description += "\nIt seems that this function can be called without restrictions." + + if can_solve: + + try: + model = solver.get_model(node.constraints) + logging.debug("[UNCHECKED_SUICIDE] MODEL: " + str(model)) + + + for d in model.decls(): + logging.debug("[UNCHECKED_SUICIDE] main model: %s = 0x%x" % (d.name(), model[d].as_long())) + + issue = Issue(node.module_name, node.function_name, instruction['address'], "Unchecked SUICIDE", "Warning", description) + issues.append(issue) + + except UnsatError: + logging.debug("[UNCHECKED_SUICIDE] no model found") + + return issues diff --git a/mythril/analysis/modules/weak_random.py b/mythril/analysis/modules/weak_random.py new file mode 100644 index 00000000..23bf789c --- /dev/null +++ b/mythril/analysis/modules/weak_random.py @@ -0,0 +1,123 @@ +import re +from z3 import * +from mythril.analysis.ops import * +from mythril.analysis import solver +from mythril.analysis.report import Issue +from mythril.exceptions import UnsatError +import logging + +''' +MODULE DESCRIPTION: + +Check for CALLs that send >0 Ether as a result of computation based on predictable state variables such as +block.coinbase, block.gaslimit, block.timestamp, block.number + +TODO: +- block.blockhash(block.number-1) +- block.blockhash(some_block_past_256_blocks_from_now)==0 +- external source of random numbers (e.g. Oraclize) +''' + + +def execute(statespace): + + logging.debug("Executing module: WEAK_RANDOM") + + issues = [] + + for call in statespace.calls: + + if ("callvalue" in str(call.value)): + logging.debug("[WEAK_RANDOM] Skipping refund function") + continue + + # We're only interested in calls that send Ether + + if call.value.type == VarType.CONCRETE: + if call.value.val == 0: + continue + + description = "In the function '" + call.node.function_name + "' " + description += "the following predictable state variables are used to determine Ether recipient:\n" + + # First check: look for predictable state variables in node & call recipient constraints + + vars = ["coinbase", "gaslimit", "timestamp", "number"] + + found = [] + for var in vars: + for constraint in call.node.constraints + [call.to]: + if var in str(constraint): + found.append(var) + + if len(found): + for item in found: + description += "- block.{}\n".format(item) + if solve(call): + issue = Issue(call.node.module_name, call.node.function_name, call.addr, "Weak random", "Warning", + description) + issues.append(issue) + + # Second check: blockhash + + for constraint in call.node.constraints + [call.to]: + if "blockhash" in str(constraint): + description = "In the function '" + call.node.function_name + "' " + if "number" in str(constraint): + m = re.search('blockhash\w+(\s\-\s(\d+))*', str(constraint)) + if m and solve(call): + + found = m.group(1) + + if found: # block.blockhash(block.number - N) + description += "predictable expression 'block.blockhash(block.number - " + m.group(2) + \ + ")' is used to determine Ether recipient" + if int(m.group(2)) > 255: + description += ", this expression will always be equal to zero." + elif "storage" in str(constraint): # block.blockhash(block.number - storage_0) + description += "predictable expression 'block.blockhash(block.number - " + \ + "some_storage_var)' is used to determine Ether recipient" + else: # block.blockhash(block.number) + description += "predictable expression 'block.blockhash(block.number)'" + \ + " is used to determine Ether recipient" + description += ", this expression will always be equal to zero." + + issue = Issue(call.node.module_name, call.node.function_name, call.addr, "Weak random", + "Warning", description) + issues.append(issue) + break + else: + r = re.search(r'storage_([a-z0-9_&^]+)', str(constraint)) + if r: # block.blockhash(storage_0) + + ''' + We actually can do better here by adding a constraint blockhash_block_storage_0 == 0 + and checking model satisfiability. When this is done, severity can be raised + from 'Informational' to 'Warning'. + Checking that storage at given index can be tainted is not necessary, since it usually contains + block.number of the 'commit' transaction in commit-reveal workflow. + ''' + + index = r.group(1) + if index and solve(call): + description += 'block.blockhash() is calculated using a value from storage ' \ + 'at index {}'.format(index) + issue = Issue(call.node.module_name, call.node.function_name, call.addr, "Weak random", + "Informational", description) + issues.append(issue) + break + return issues + + +def solve(call): + try: + model = solver.get_model(call.node.constraints) + logging.debug("[WEAK_RANDOM] MODEL: " + str(model)) + + for d in model.decls(): + logging.debug("[WEAK_RANDOM] main model: %s = 0x%x" % (d.name(), model[d].as_long())) + return True + + except UnsatError: + logging.debug("[WEAK_RANDOM] no model found") + return False diff --git a/mythril/analysis/ops.py b/mythril/analysis/ops.py new file mode 100644 index 00000000..3a3ed260 --- /dev/null +++ b/mythril/analysis/ops.py @@ -0,0 +1,61 @@ +from z3 import * +from enum import Enum +from laser.ethereum import helper + + +class VarType(Enum): + SYMBOLIC = 1 + CONCRETE = 2 + + +class Variable: + + def __init__(self, val, _type): + self.val = val + self.type = _type + + def __str__(self): + return str(self.val) + + +class Op: + + def __init__(self, node, addr): + self.node = node + self.addr = addr + self.state = node.states[addr] + + +class Call(Op): + + def __init__(self, node, addr, _type, to, gas, value = Variable(0, VarType.CONCRETE), data = None): + + super().__init__(node, addr) + self.to = to + self.gas = gas + self.type = _type + self.value = value + self.data = data + +class Suicide(Op): + + def __init__(self, node, addr, call_type, to, value): + super().__init__(node, addr) + self.to = to + +class SStore(Op): + + def __init__(self, node, addr, value): + super().__init__(node, addr) + self.value = value + self.tainted = False + + +def get_variable(i): + try: + return Variable(helper.get_concrete_int(i), VarType.CONCRETE) + except AttributeError: + return Variable(simplify(i), VarType.SYMBOLIC) + + + diff --git a/mythril/analysis/report.py b/mythril/analysis/report.py new file mode 100644 index 00000000..70fa96e6 --- /dev/null +++ b/mythril/analysis/report.py @@ -0,0 +1,59 @@ +import hashlib + +class Issue: + + def __init__(self, contract, function, pc, title, _type="Informational", description="", debug=""): + + self.title = title + self.contract = contract + self.function = function + self.pc = pc + self.description = description + self.type = _type + self.debug = debug + self.code = None + + + def as_dict(self): + + return {'title': self.title, 'description':self.description, 'type': self.type} + + +class Report: + + def __init__(self): + self.issues = {} + pass + + def append_issue(self, issue): + m = hashlib.md5() + m.update((issue.contract + str(issue.pc) + issue.title).encode('utf-8')) + self.issues[m.digest()] = issue + + def as_text(self): + text = "" + + for key, issue in self.issues.items(): + + text += "==== " + issue.title + " ====\n" + text += "Type: " + issue.type + "\n" + + if len(issue.contract): + text += "Contract: " + issue.contract + "\n" + else: + text += "Contract: Unknown\n" + + text += "Function name: " + issue.function + "\n" + text += "PC address: " + str(issue.pc) + "\n" + + text += issue.description + "\n--------------------\n" + + if issue.code: + text += "Affected code:\n\n" + issue.code + "\n--------------------\n" + + if len(issue.debug): + text += "++++ Debugging info ++++\n" + issue.debug + "\n" + + text+="\n" + + return text diff --git a/mythril/analysis/security.py b/mythril/analysis/security.py new file mode 100644 index 00000000..e64d675b --- /dev/null +++ b/mythril/analysis/security.py @@ -0,0 +1,29 @@ +from mythril.analysis.report import Report +from mythril.analysis import modules +import pkgutil +import logging + + +def fire_lasers(statespace): + + issues = [] + _modules = [] + + for loader, name, is_pkg in pkgutil.walk_packages(modules.__path__): + _modules.append(loader.find_module(name).load_module(name)) + + logging.info("Starting analysis") + + for module in _modules: + logging.info("Executing " + str(module)) + issues += module.execute(statespace) + + report = Report() + + if (len(issues)): + + for i in range(0, len(issues)): + report.append_issue(issues[i]) + + + return report diff --git a/mythril/analysis/solver.py b/mythril/analysis/solver.py new file mode 100644 index 00000000..b1543d4c --- /dev/null +++ b/mythril/analysis/solver.py @@ -0,0 +1,17 @@ +from z3 import * +from mythril.exceptions import UnsatError +import logging + +def get_model(constraints): + s = Solver() + s.set("timeout", 2000) + + for constraint in constraints: + s.add(constraint) + + if (s.check() == sat): + + return s.model() + + else: + raise UnsatError \ No newline at end of file diff --git a/mythril/analysis/symbolic.py b/mythril/analysis/symbolic.py new file mode 100644 index 00000000..c8f302ef --- /dev/null +++ b/mythril/analysis/symbolic.py @@ -0,0 +1,133 @@ +from mythril.analysis import solver +from mythril.exceptions import UnsatError +from laser.ethereum import svm +from .ops import * +import logging + + +class SStorTaintStatus(Enum): + TAINTED = 1 + UNTAINTED = 2 + + +class StateSpace: + + ''' + Symbolic EVM wrapper + ''' + + def __init__(self, contracts, dynloader = None, max_depth = 12): + + # Convert ETHContract objects to LASER SVM "modules" + + modules = {} + + for contract in contracts: + modules[contract.address] = contract.as_dict() + + self.svm = svm.SVM(modules, dynamic_loader=dynloader, max_depth=max_depth) + + self.svm.sym_exec(contracts[0].address) + + self.modules = modules + self.nodes = self.svm.nodes + self.edges = self.svm.edges + + # Analysis + + self.calls = [] + self.suicides = [] + self.sstors = {} + + self.sstor_taint_cache = [] + + + for key in self.svm.nodes: + + for instruction in self.nodes[key].instruction_list: + + op = instruction['opcode'] + + if op in ('CALL', 'CALLCODE', 'DELEGATECALL', 'STATICCALL'): + stack = copy.deepcopy(self.svm.nodes[key].states[instruction['address']].stack) + + if op in ('CALL', 'CALLCODE'): + gas, to, value, meminstart, meminsz, memoutstart, memoutsz = \ + get_variable(stack.pop()), get_variable(stack.pop()), get_variable(stack.pop()), get_variable(stack.pop()), get_variable(stack.pop()), get_variable(stack.pop()), get_variable(stack.pop()) + + if (to.type == VarType.CONCRETE): + if (to.val < 5): + # ignore prebuilts + continue + + if (meminstart.type == VarType.CONCRETE and meminsz.type == VarType.CONCRETE): + self.calls.append(Call(self.nodes[key], instruction['address'], op, to, gas, value, self.svm.nodes[key].states[instruction['address']].memory[meminstart.val:meminsz.val*4])) + else: + self.calls.append(Call(self.nodes[key], instruction['address'], op, to, gas, value)) + else: + gas, to, meminstart, meminsz, memoutstart, memoutsz = \ + get_variable(stack.pop()), get_variable(stack.pop()), get_variable(stack.pop()), get_variable(stack.pop()), get_variable(stack.pop()), get_variable(stack.pop()) + + self.calls.append(Call(self.nodes[key], instruction['address'], op, to, gas)) + + elif op == 'SSTORE': + stack = copy.deepcopy(self.svm.nodes[key].states[instruction['address']].stack) + + index, value = stack.pop(), stack.pop() + + try: + self.sstors[str(index)].append(SStore(self.nodes[key], instruction['address'], value)) + except KeyError: + self.sstors[str(index)] = [SStore(self.nodes[key], instruction['address'], value)] + + # self.sstor_analysis() + + + ''' + def sstor_analysis(self): + + logging.info("Analyzing storage operations...") + + for index in self.sstors: + for s in self.sstors[index]: + + # 'Taint' every 'store' instruction that is reachable without any constraint on msg.sender + + taint = True + + for constraint in s.node.constraints: + if ("caller" in str(constraint)): + taint = False + break + + if taint: + s.tainted = True + + try: + solver.get_model(s.node.constraints) + s.tainted = True + except UnsatError: + s.tainted = False + ''' + + + + def find_storage_write(self, index): + + # Find a an unconstrained SSTOR that writes to storage index "index" + + try: + for s in self.sstors[index]: + taint = True + + for constraint in s.node.constraints: + if ("caller" in str(constraint)): + taint = False + break + + return s.node.function_name + + return None + except KeyError: + return None + diff --git a/mythril/disassembler/disassembly.py b/mythril/disassembler/disassembly.py index 2dc4b11d..8a21d11a 100644 --- a/mythril/disassembler/disassembly.py +++ b/mythril/disassembler/disassembly.py @@ -1,6 +1,7 @@ from mythril.ether import asm,util import os import json +import logging class Disassembly: @@ -11,13 +12,23 @@ class Disassembly: self.func_to_addr = {} self.addr_to_func = {} - # Parse jump table & resolve function names + try: + mythril_dir = os.environ['MYTHRIL_DIR'] + except KeyError: + mythril_dir = os.path.join(os.path.expanduser('~'), ".mythril") + + # Load function signatures - script_dir = os.path.dirname(os.path.realpath(__file__)) - signature_file = os.path.join(script_dir, 'signatures.json') + signatures_file = os.path.join(mythril_dir, 'signatures.json') - with open(signature_file) as f: - signatures = json.load(f) + if not os.path.exists(signatures_file): + logging.info("Missing function signature file. Resolving of function names disabled.") + signatures = {} + else: + with open(signatures_file) as f: + signatures = json.load(f) + + # Parse jump table & resolve function names jmptable_indices = asm.find_opcode_sequence(["PUSH4", "EQ"], self.instruction_list) diff --git a/mythril/disassembler/signatures.json b/mythril/disassembler/signatures.json deleted file mode 100644 index 66f075ab..00000000 --- a/mythril/disassembler/signatures.json +++ /dev/null @@ -1 +0,0 @@ -{"0x06fdde03": "name()","0x95d89b41": "symbol()", "0x313ce567": "decimals()", "0x18160ddd": "totalSupply()", "0x70a08231": "balanceOf(address)", "0xa9059cbb": "transfer(address,uint256)", "0x23b872dd": "transferFrom(address,address,uint256)", "0x095ea7b3": "approve(address,uint256)", "0xdd62ed3e": "allowance(address,address)", "0xfc0f392d": "activateSafeMode()", "0xa0b7967b": "getNextSequenceId()", "0x979f1976": "tryInsertSequenceId(uint sequenceId)", "0x45550a51": "recoverAddressFromSignature(bytes32 operationHash, bytes signature)", "0x7df73e27":"isSigner(address signer)", "0xa68a76cc": "createForwarder()" ,"0x39125215": "sendMultiSig(address,uint256, bytes data, uint256 expireTime, uint256 sequenceId, bytes signature)","0xe46dcfeb": "initWallet(address[],uint256,uint256)", "0x7d03f5f3": "newGame()", "0x9183fd01": "getSeedPrice()", "0x416c8701": "beyond()", "0xc4bc5da5": "resumeContract()", "0xe82b7cb2": "proxySetCosignerAddress(address,bytes32)", "0xa9d0ddc7": "addContractWithInfo(string,string)", "0xc5a1d7f0": "metadataHash()", "0xa33d4968": "Tripler()", "0x4e6ba0a9": "testCreateCostMultisig()", "0x056e1059": "oraclize_query(uint256,string,string,uint256)", "0x5e11544b": "newPeriod()", "0x0178b8bf": "resolver(bytes32)", "0xf2371fb3": "grantGiveableKudos(address,uint256)", "0x99a5d747": "calculateFee(uint256)", "0x4a8b5389": "allocateBountyAndEcosystemTokens()", "0xc040e6b8": "stage()", "0xac4bd53a": "currentLeader()", "0x87ebd76c": "initContract(string,string,uint256,uint256)", "0xcacc24eb": "transferFromViaProxy(address,address,address,uint256)", "0xf8018a79": "prepend(address,address)", "0xd83a8d11": "testProposing()", "0x547916ea": "finishRound()", "0xfcc101ba": "getCommunityDescription(uint256)", "0x1d82e9c7": "EXTRA_GAS()", "0x362e2565": "returnDeposits()", "0x388f3cd3": "cashin(address,uint256)", "0x7bc49a95": "play(uint256,uint256)", "0x4ac7becf": "SimpleSign()", "0x9a9c29f6": "settle(uint256,uint256)", "0x39f4debc": "fillOrderAuto()", "0x83d51a38": "concatString(string)", "0x177766e6": "getOptionChain(uint256)", "0x6d1f00a6": "ThroneMaker(uint256)", "0x5a58cd4c": "deleteContract()", "0x29de91db": "setMsg(address,uint256)", "0x489306eb": "oraclize_query(string,string)", "0xef5daf01": "_dumpToCompany()", "0x92e9fd5e": "ColdWallet(address,address)", "0x0edfb0f7": "withdrawCollectedInterest()", "0xabcf1328": "InterestBank()", "0x0c9fcec9": "setApproval(address,address,uint256)", "0x6be505f5": "selectWinner(bytes32)", "0x6461fe39": "transferFromWithReference(address,address,uint256,string)", "0xc01a8c84": "confirmTransaction(uint256)", "0x3c0870ae": "challenge(uint256,uint256,uint256,bool)", "0x58e2cd76": "watch(address)", "0x566735d8": "PreVNK(uint256,string,string,uint8)", "0xc1e5304a": "CreateNewDraw(uint256,bytes)", "0x1ed6f423": "changeDescription(address,string)", "0x24600fc3": "withdrawFunds()", "0x2b25a7e4": "giveKudos(address,uint256)", "0xe9e99d81": "getChannelFeed(address,uint256,uint256,uint256)", "0x4f09eba7": "proxyApprove(address,uint256,bytes32)", "0xf0e959f9": "TokenSales(address)", "0x505ff574": "register(address,uint256,bool)", "0xec2ec781": "testFailGetUnsetToken()", "0x4306cc3f": "queryEarnings(address)", "0x4551b1d7": "ProxyPayment(address,address)", "0x1c31f710": "setBeneficiary(address)", "0xcc2c5453": "add_sword(uint16)", "0xef19c332": "_checkSigned(bytes32,uint256,uint8,bytes32,bytes32)", "0x5a7a8850": "rollWithSeed(bytes32)", "0xc262df45": "isKnownRequest(address,address)", "0xbb3ce7fe": "DepositHolder()", "0x446294ad": "multiAccessGetOwners()", "0xa5f4af33": "playerWithdrawPendingTransactions()", "0x69bdfd3a": "toContractDie(bytes,bytes,uint256)", "0x7ef09476": "transfer(uint64,address)", "0xea3ebae6": "getConfigBool(bytes32)", "0x540cafe0": "storeHeaderWithFee(bytes,int256,address)", "0xed498fa8": "userTokens(address)", "0xffb4c857": "_confirmAndCheck(bytes32)", "0x62e05175": "setMotionDB(address)", "0x29090202": "Resolver(address)", "0x12ab7242": "setupStackDepthLib(address)", "0x930a80b4": "testAuthorizedSetPackage()", "0x770c6cbb": "WithDrawPreForkChildDAO()", "0xf6368f8a": "transfer(address,uint256,bytes,string)", "0x4da47ba0": "TokenSale(address,uint256)", "0x64ef212e": "proxyTransferWithReference(address,uint256,bytes32,string)", "0xa0bd3c0f": "scheduleCall(address,bytes,bytes,uint256)", "0xfb114f57": "oraclize_query(uint256,string,string[3],uint256)", "0x6dbe31eb": "testSubBalance()", "0x984ac378": "lotteryTitle()", "0x983ef725": "getDifficulty(uint256)", "0x48d9a374": "blockTransfer(address,uint256)", "0xd207e757": "ownerSetOraclizeSafeGas(uint32)", "0xf48c3054": "proxyPayment(address)", "0x598647f8": "bid(uint256,uint256)", "0x8a3bc2bc": "iPropose(bytes,uint256,bool)", "0xd69450d5": "setUUID4Bytes(bytes)", "0x942b90d3": "getRewardTable()", "0x18a4155e": "calculatePrice(uint256,uint256,uint256,address,uint256)", "0x2f1e4968": "makeNewProposal(string,uint256)", "0xad9ec17e": "setGreyToken()", "0x9f35d3b2": "start(string,string,uint256,uint256,uint256,uint256)", "0x71dd99fe": "BigRisk()", "0x0c255c94": "max256(uint256,uint256)", "0x7bd703e8": "getBalanceInEth(address)", "0xea3d2827": "selectWinner(string)", "0xe3a9b508": "EnableDisableTokenProxy()", "0x4b3b6168": "SetNewBigContract(address)", "0xbd9a5673": "oraclize_query(string,string[5])", "0xef4ffee2": "Honestgamble()", "0x2268a358": "changeMultisig(address)", "0xa6b206bf": "doSomething(uint256)", "0x4401a6e4": "safeSend(address)", "0xe417291b": "undelegateDAOTokens(uint256)", "0x6e0d98fe": "setProbabilities(uint32[])", "0x88eb7af7": "_isHuman()", "0xee725d44": "toChannelID(string)", "0x525b25b1": "getDeploymentReward()", "0x5f72f450": "check(uint256)", "0x84734476": "copyBytes(bytes,uint256,uint256,bytes,uint256)", "0x49fb2dc5": "add_to_association(uint256,uint256,uint256)", "0x4f073130": "takeOrder(bool,uint256,uint256)", "0x83f7b8e1": "getNumberOfPhotos()", "0xaa64c43b": "transferPool(address,address,uint256)", "0x28f90e4b": "Etheramid2()", "0x0cd865ec": "recover(address)", "0x88b9e10e": "seizeTokens(address,uint256)", "0x46e44f63": "getCheckRecordTS(bytes)", "0x98f3b81a": "getShares(address,bytes32[],int256[])", "0x77372213": "setName(bytes32,string)", "0xed4b1d0d": "scheduleTransaction(uint256)", "0xe1c7392a": "init()", "0x69307c80": "rotateBits(bytes,int256)", "0x33f472b9": "MPO()", "0x00100a18": "NewPoll(string,string,uint256,uint256)", "0x5819dde2": "getNumbersFromBytes(bytes3)", "0xdef2489b": "convert(address)", "0x7f602231": "tip(bytes32,address,uint256)", "0x7e32a592": "repairTheCastle()", "0xa1616429": "testBitOrSuccess()", "0xb524abcf": "totalSupply(bytes32)", "0x9d118770": "destroy(uint256)", "0xf0cbe059": "proxyTransferFromWithReference(address,address,uint256,bytes32,string)", "0x01bb85a4": "__startBlock(string)", "0x1fb6e99d": "paymentNeeded(uint64)", "0xcae523c1": "testOwnedTryAuthUnauthorized()", "0xcd9a3c98": "any(bool[7])", "0x4cd11943": "NewManualInvestor(address,uint256)", "0x370b6939": "AdminSetDrawer(address)", "0x811de206": "isConfirmedByOwners(uint256)", "0x90b98a11": "sendCoin(address,uint256)", "0x4f10acc1": "updateGoldFeeData(uint256)", "0xe1108706": "rfind()", "0xd1f0bb2d": "populateAllowedFreeExchanges()", "0x55b775ea": "setFeed(address)", "0x8fd28bcf": "testFailAuthorityAuth()", "0x3ac5cb73": "GeometricPonzi()", "0xc31d0031": "CrowdFundDAO(string,uint8,string)", "0xb3559460": "getGenerationSize(uint256)", "0xd7a58658": "changeHouseedge(uint8)", "0x21f8a721": "getAddress(bytes32)", "0xf824384a": "addInvestorAtID(uint256)", "0xa140e79c": "setMinimumDebatePeriod(uint256)", "0xbaeb91ae": "invest(uint128)", "0x984413b8": "_eraseNode(bytes32)", "0x1ebe5c0f": "sendWithAllOurGasExcept(address,uint256,uint256)", "0x1f83f440": "getPaymentByAddress(address)", "0x94106200": "testFailCreateSameNonce()", "0x8ac78c80": "Docsign()", "0xe422ebe9": "getBot()", "0x90cf581c": "voteYes()", "0x53b7b2e9": "cEthereumlotteryNet(bytes)", "0x990f3f53": "computeResponseSecondHalf(uint256,uint16)", "0x4f052648": "XaurumDataContract()", "0x2262cd94": "wroom()", "0x611daa7e": "EmergencyBalanceReset(uint256)", "0x47274dbe": "disableUser(address,address)", "0xb5d1990d": "numRecords()", "0x337b5988": "testSimpleNameRegister()", "0x246c02e6": "check_depth(uint16)", "0x76d66f5d": "_Transfer(address,address,bytes32)", "0xe816a515": "takeFlight()", "0x2ff92323": "oraclize_query(uint256,string,string[4])", "0x5fc5d48b": "burnUnsoldCoins(address)", "0x46bdca9a": "equal(string,string)", "0x17ff0caa": "WeatherBet(uint256,address,address,address)", "0x47872b42": "unsealBid(bytes32,uint256,bytes32)", "0x7af30442": "testToggleBitFailIndexOOB()", "0x1f7b6d32": "length()", "0xffe302d1": "setPlz(string)", "0x2187a833": "setGreenToken()", "0x8f283970": "changeAdmin(address)", "0x52a554a1": "voteBoardProposal(uint256,address,bool)", "0xb6db75a0": "isAdmin()", "0x2885b593": "extractMasterKeyIndexLength()", "0x1f7b8622": "getVotingDeadline()", "0x76999896": "KingOfTheEtherThrone()", "0x3211bb90": "OwnerAddFunds()", "0xb1662d58": "setModule(address,bool)", "0xd4607048": "buyForEverybody()", "0xf460590b": "updateSigner(address,bool)", "0xb6f98e53": "needsAllowancePayment()", "0xd7ad4931": "buyNow(bytes32)", "0xfadf87b1": "testGetBitsSuccess()", "0xb759f954": "approve(uint256)", "0xbff974e8": "getContentReplies(uint256)", "0x083b2732": "callback()", "0xfe4a3ac9": "setExecPrice(uint256)", "0xd5563f31": "createAuction(uint256)", "0xfadc51cf": "isAlpha(bytes1)", "0x63334c58": "transferETC(address)", "0xdb7ca38a": "XaurmProxyContract()", "0x9eb9dd3b": "getBetsProcessed()", "0x78205f67": "testThrowTransferEnableNotTransferable()", "0x38f77d69": "getDistributeProfitsInfo()", "0xf8ec4bf2": "setAllowTransactions(bool)", "0x1a7a98e2": "getDomain(uint256)", "0x8afc3605": "Ownable()", "0x0790e880": "setBlockappsAddr(address)", "0x899942b8": "Devcon2Token()", "0xc431f885": "addToContribution()", "0x24664106": "mintRep(int256,address,uint256)", "0xd0679d34": "send(address,uint256)", "0x6af2da2f": "testKeyedHash()", "0x7bb6a4c6": "uno(uint256)", "0x3a4faf7f": "max64(uint64,uint64)", "0xa05e822a": "howManyOwners()", "0xde0ff7c5": "getEther()", "0xf84f420b": "getRandomNumber(address,uint256)", "0xdf55b41a": "owner(string)", "0x2a0d79ef": "totalSupply(bytes)", "0xb549793d": "scheduleCall(bytes4,bytes,uint256,uint256,uint8,uint256)", "0xbcf175c8": "oraclize_cbAddress()", "0xa4beffa7": "increaseInvestment()", "0x8ea98117": "setCoordinator(address)", "0x13831693": "getLevitatingUnicorns(bytes32,uint64)", "0x4ae8c55f": "getWwLength()", "0x1531c267": "fipsRegisterMulti(uint256,address,bytes)", "0x53d97e65": "setPrizes(uint32[])", "0x4c471cde": "scheduleCall(address,bytes4,bytes,uint256,uint256,uint8,uint256)", "0xe50a3bb1": "oraclize_query(string,string[],uint256)", "0x94f3f81d": "removeAuthorization(address)", "0x1d8ae626": "Security(string,string)", "0xd1feca67": "addSpendingRequest(address)", "0x3e5087cc": "testBasicThing()", "0xf245b9e4": "DVIP(address)", "0x5e1d7ae4": "changeFeeRebate(uint256)", "0xc032dc30": "execute(uint256,address)", "0xcb3e64fd": "unhalt()", "0x20339891": "addGridMember(address)", "0x6f36ce79": "insert_deal(address,address,uint64,uint128,uint32)", "0x78e80b39": "UserGetPrize()", "0xd2dc0869": "add(string,uint256,string,string,address)", "0x63a599a4": "emergencyStop()", "0x353928d8": "helpRed()", "0x4a5dddd2": "proxyPurchase(address)", "0x2a45a39a": "Post(address)", "0x57cb2fc4": "getInt8()", "0x5b372532": "press()", "0x2e9c91a8": "getStartParams(bytes32)", "0x2e788443": "resolve(string,address,uint256)", "0x45c41478": "getMarkets(bytes,address)", "0xd70cf105": "moveBalance(address,address,uint256)", "0x7cb97b2b": "set_owner(address)", "0xe75528cc": "buyBuilding(uint256,uint256)", "0x0ab03e1b": "testControlRegisterContractAgain()", "0x65b1fdf4": "scheduleIssuePOIs()", "0x9a0af2ec": "getStLength()", "0xc91d7e9c": "getFee(bytes32[])", "0x3ced842b": "make_offer()", "0x6bc3e0f0": "verifySecondHalf(uint256[4],uint256[4],uint256[4])", "0xb37217a4": "getRandomNumber(uint256)", "0x20130753": "testThrowSetNotRetractableNotOwner()", "0xe71d7bf0": "testControlTransferNotEnabled()", "0x01e3d346": "create(bytes1,bytes32,uint256)", "0x478e25bf": "resetAction(bytes32)", "0x0c9fd581": "assertTrue(bool)", "0xcec1365a": "ShortLimit(uint256)", "0x0bf318a3": "finalizeCrowdsale()", "0x88f6d5a4": "constructCoinbaseTx(uint256,uint256)", "0x866f6736": "trustedChildWithdraw()", "0x5cc15001": "getContent(bytes32)", "0x00873367": "comparisonchr(string)", "0x0c77a697": "claimFounders()", "0xaa1e84de": "hash(bytes)", "0x329bfc33": "getCurrentWinner()", "0x4228974c": "Videos()", "0xb15dcc25": "query(address,bytes2,uint256)", "0x464f37c9": "trustedChildRefund()", "0x1e5330ca": "checkBetResult(uint8,address,bytes32,bytes32)", "0x62c7855b": "getConfigBytes(bytes32)", "0xb845c9a2": "WEI()", "0x5fdf05d7": "two()", "0x934354e7": "finishSpin()", "0xdeb80111": "transfer_asset(address,uint256)", "0x8f4ffcb1": "receiveApproval(address,uint256,address,bytes)", "0x499af77c": "current_spin_number()", "0xe4dedc7f": "DeleteContract()", "0x70d53be5": "find()", "0xc53ad76f": "Kardashian()", "0xb3dfcdc3": "Contribution(uint256)", "0xc3434883": "buy(uint256,uint256,bool)", "0xe4c2db06": "getPreviousFile(bytes)", "0x7fe0518a": "asyncSend(address,uint256)", "0x37bdc99b": "release(uint256)", "0xf7888aec": "balanceOf(address,address)", "0xec21a913": "setUint256(int256,uint256)", "0xe0457884": "betResolution(uint8,uint8,uint8,bool)", "0x96e4ee3d": "convert(uint256,uint256)", "0x8a78f5e2": "changeMember(address,bool,bool,uint256)", "0x663e90d9": "setBuyNowListing(bytes32,uint256,bool)", "0x2ffb8631": "getReleaseLockfileURI(bytes32)", "0x40193d17": "getPongvalConstant()", "0x97d47a60": "registerAccountant(bytes,address)", "0x098ab6a1": "snapshotCount()", "0xc42cd8cf": "etherSplit(address,address)", "0x4fb4bcec": "step5()", "0xda25c0cd": "ThisExternalAssembly()", "0x42f6e389": "isModule(address)", "0x7c69b5d1": "NewDeposit(uint256)", "0xac3e7d24": "addChainyData(string)", "0x308d6613": "getSignData(uint256,uint8)", "0xd1f7a4e4": "createCertificate(bytes)", "0x730720b8": "testControllerValidTransfers()", "0xe706918c": "testToggleBitSuccess()", "0xbab2f552": "currentCycle()", "0x7e4f6b95": "MyAdvancedToken(uint256,string,string)", "0x468129a5": "setUnit(uint256,uint256,uint256)", "0x6860fd58": "Fees(uint256)", "0xfb46d4c5": "tweet(string)", "0xd6d02c51": "whois(string)", "0x30b0faab": "changeSettings(uint256,address,uint256)", "0x42402c2c": "fipsTransferMulti(bytes20[],address)", "0x4c123019": "tokenFallback(address,address,uint256,bytes)", "0x519a078f": "getCommunitybyIndex(uint256)", "0xfe0d94c1": "execute(uint256)", "0x18573bf9": "calculeReward(uint256,uint256)", "0xf4c5ab7c": "validateCallGas(uint256,uint256)", "0x18433bb7": "DrawPrepare()", "0xa8484938": "doApprove(address,uint256)", "0xe97db66e": "setJackpot()", "0x2c46d8d5": "EndRound(uint256)", "0x752d349c": "depthCheck(int256,int256)", "0xbb6a0853": "GreedPit()", "0xd5fa2b00": "setAddr(bytes32,address)", "0x2143da91": "GameOfThrones()", "0xc490a266": "toUInt(bytes)", "0xb6cb405b": "getContractor()", "0x2c7cce9e": "auctionMinPriceIncrease()", "0xa5f3c23b": "add(int256,int256)", "0xf4869726": "buyWithSignedAddress(uint128,uint8,bytes32,bytes32)", "0x09957e69": "newSale(bytes,uint256,uint256)", "0x4f60f334": "multiAccessAddOwner(address)", "0xbea124a6": "query(bytes,bytes,int256)", "0x11149ada": "getProof(uint256)", "0xc5f310c0": "register(bytes12)", "0x645dce72": "updateRelease(uint32,uint32,uint32,bytes20,bool)", "0xe6c3b4ab": "testBalanceAuth()", "0xecb0256b": "relayTx(bytes,int256,int256[],int256,int256,bytes,int256,int256[],int256,int256)", "0x62ee6d29": "changeHashtoLowOrHigh(uint256)", "0x590528a9": "sellShares(uint256,uint8,uint256,uint256)", "0x82ab890a": "update(uint256)", "0xa0e67e2b": "getOwners()", "0xc2ba5b40": "getPackageData(string)", "0x1b855044": "getHash(uint256,uint256)", "0x0a4d564c": "TieUpLooseEnds()", "0x4664b235": "bytes32_to_bytes(bytes,bytes,bytes)", "0x3b343a13": "getNodeAddress(bytes)", "0x57ee24af": "getNum(bytes32,uint256)", "0xe7329e71": "scheduleCall(bytes,bytes,uint256,uint256,uint8,uint256)", "0x37664643": "retractLatestRevision(bytes32)", "0x4c0bcfe5": "getTransferableBalance(address)", "0xc1c723f4": "validateProposedMonarchName(bytes)", "0x305b73d9": "configure(address,address,uint256,uint8,bytes32,bytes32)", "0xc853c03d": "newDraw(uint256,uint8[3],uint256,uint256,uint256,uint256)", "0xde4b3262": "setBasePrice(uint256)", "0xf639365d": "testSetGet()", "0x419ffa03": "fipsRegister(address)", "0xbfcf63b0": "claimEther(address,uint256)", "0x0c0662a8": "getLastWithdrawal()", "0x5e404de3": "setMaximumCredit(uint256)", "0x7d3d6522": "goalReached()", "0xfe8b6642": "setEnforceRevisions(bytes32)", "0x27ea6f2b": "setLimit(uint256)", "0xd48bfca7": "addToken(address)", "0xce79add1": "givableBalanceOf(address)", "0x01095962": "oraclize_setCustomGasPrice(uint256)", "0x4f573cb2": "withdrawRevenue()", "0x1cf52f2b": "isActiveRegistrant(address)", "0x73e9f3e6": "Crowdsale(address,uint256,uint256,uint256,address,address)", "0xd1734eac": "isInNextGeneration(address)", "0x0b6142fc": "breach()", "0x48f05187": "scheduleCall(address,bytes4,bytes,uint256)", "0x8fe58eb9": "Triger()", "0xd26c8a8a": "coinBalance()", "0xb61c0503": "fireEventLog1()", "0x8f367001": "numTokensAbleToPurchase()", "0x41b9dc2b": "has(bytes32,bytes32)", "0x84054d3d": "cashout()", "0xfc63d4fb": "order(bool,uint32,uint128)", "0xf362d78f": "testBitNotEqualSuccess()", "0x8691162a": "TlcCoin()", "0x6a7fc8b7": "setDailyWithdrawLimit(uint128)", "0x6d12301c": "getBetValue(bytes32,uint8)", "0xff74927b": "strConcat(string,string)", "0xa80d4e9a": "EtherAuction(uint256)", "0x648bf774": "recover(address,address)", "0xfebefd61": "startAuctionsAndBid(bytes32[],bytes32)", "0xe5fe4f31": "buy(uint8,bytes32,bytes32)", "0xc67d376d": "getClosedCandidates()", "0x2432eb23": "testThrowRetractLatestRevisionNotUpdatable()", "0x7620f4bb": "fipsNotaryLegacy68b4()", "0x181be00d": "getValue(uint8)", "0x96286cc9": "isTokenOwner(address)", "0x98596726": "note(uint224)", "0x213b9eb8": "setAddr(string,address)", "0x1f8947c1": "extractUint(int256,bytes,uint256,uint256)", "0x08b7c13b": "getExists(bytes20)", "0xd1d3bb92": "testSetPkg()", "0xb1c6517a": "LookAtNumberOfPlayers()", "0xa5bfa9a9": "claimToken(bytes32)", "0x465e759b": "testRestart()", "0x2d116186": "deityBalance()", "0x60116397": "Registrar(address,bytes32,uint256)", "0xa7eeea37": "NewContributor(uint256)", "0x1c879c47": "getMarketHashes(bytes)", "0xd63547e6": "GetFreeCnt()", "0xed684cc6": "trigger(uint256)", "0x0f3eb785": "add(string,uint256,uint256,uint256)", "0x8c0e2a31": "regProxy(address)", "0xd3437fe0": "assertFact(uint256,bytes)", "0xdd36e18b": "ContractStatus()", "0xcefdfcf3": "testControlRetractNotRetractable()", "0x8f2c44a2": "UnicornMilker()", "0xf4ea95b9": "validateReleaseVersion(uint32[3])", "0x881be8f7": "undo()", "0x8cae1374": "editBlock(uint8,uint8,uint256,int8[5])", "0x4bb4b260": "cashAllOut()", "0x35b09a6e": "someFunction()", "0x37930615": "extend(bytes16[],uint64)", "0x4cb71b9b": "getAllReleaseHashes()", "0x0381cb3b": "setRowcol(uint256,uint256[2])", "0x4551dd59": "isCrowdsale()", "0xdc3ab866": "checkEarnings(address)", "0xb5d3a379": "CanaryTestnet()", "0xeb7492d1": "testTotalSupply()", "0xc5096a69": "feeFor(address,address,uint256)", "0x27a5c7c6": "voteDecline(uint256)", "0xe65d6b49": "getCommission()", "0xe56c8552": "spinTheWheel(address)", "0xd3ea3322": "testBuildTokenSystemCost()", "0x347632e8": "getShareholderAdressByID(uint256)", "0xebae35a6": "DAOTokenCreationProxyTransferer(address,address)", "0xa3a48785": "unsetClaim(uint256)", "0xddd41ef6": "transferDirector(address)", "0x3647b87a": "buildFactory()", "0x084d72f4": "getWinningOutcome(uint256)", "0xe23941bc": "testDepositWithdraw()", "0x27121069": "verify(bytes,uint8,bytes,bytes)", "0x6d568c43": "weiToCents(uint256)", "0x3b9901cc": "getChannelsByRanks(address,uint256,uint256)", "0xad447a19": "getBalanceDB()", "0x8f4ed333": "step2()", "0xe2bbb158": "deposit(uint256,uint256)", "0x10142785": "assign(bytes,uint256,bytes1)", "0xaf92a693": "addRegistrar(address)", "0x089327de": "MyToken()", "0xfd958695": "isAlphaNumeric(bytes1)", "0x89ed0b30": "setOraclizeGas(uint32)", "0x11103599": "Token_Offer(address,address,uint16)", "0xb870ecbb": "testNormalWhitelistAdd()", "0x4f197ee7": "transferPackageOwner(string,address)", "0xf14fcbc8": "commit(bytes32)", "0xdbfef710": "getDefaultRequiredGas()", "0xe2acf75d": "auctionCancel(bytes32)", "0x3462f32d": "execWithGasLimit(bytes32,bytes32,uint256,uint256)", "0x8de93222": "purchase(address,uint256)", "0x71e11354": "updateRegistration(string,string)", "0x4ca7fbd0": "updateTokenPriceWeekTwo()", "0x1f6e5117": "getCallbackAddress()", "0xb47fa7e0": "DepositLimit(uint256)", "0x3cbfed74": "getBondBalance()", "0x269975d0": "GameDetails(uint256)", "0xb00140aa": "getHash(bytes)", "0xf7c3ee7a": "immortality()", "0x3c067945": "fundBalance()", "0xcf984f16": "testFailRestartEnforceRevisions()", "0xfbeaebc6": "murder()", "0x63052d82": "getOwnersIndex(address)", "0x928a00d2": "deleteCoin(uint256)", "0xaa5d4719": "getTransferable(bytes20)", "0x5b303e16": "eatUnicorns(uint256)", "0xbf187478": "shift_left(uint64,uint256)", "0x14ba5c09": "getDay()", "0xc5b1a53c": "deposit(bytes16[],uint64)", "0x744d8b4f": "recordWin(uint256,uint256)", "0xfea2920e": "createNewDraw()", "0xc3d0a564": "getAccountBalance(bytes)", "0x8f7fe231": "ValidetherOracle()", "0x7d298ee3": "beforeExecute(address,uint256)", "0x927ed13a": "newClient(uint256,address)", "0x727b1cd6": "next_draw(bytes32,uint256,uint256,uint256,uint256,uint256)", "0xb3a0b1ef": "basicInfoGetter()", "0x6c494843": "multiAccessChangeOwnerD(address,address,address)", "0x79cc6790": "burnFrom(address,uint256)", "0x561e91a1": "makeBet()", "0x9fd4f7d1": "replaceWizard(address)", "0x5d96ec65": "setAdministrator(address,string,bool)", "0xa230c524": "isMember(address)", "0x4bd70ea3": "testFailGetUnset()", "0xfe97ee88": "hasPhone(address)", "0xc1be4031": "XaurumProxyERC20()", "0x4f223fe3": "StatefulFactory(string,string,string)", "0x71589d6b": "newponzi()", "0xaefc8c72": "unsealBid(bytes32,address,uint256,bytes32)", "0xadf59f99": "query(uint256,string,string)", "0xf446c1d0": "A()", "0xa0d605c6": "addCertificationDocumentInternal(address,bytes32)", "0x13a396d8": "getRequiredDeposit(bytes)", "0x0aa46c12": "testClearBitFailIndexOOB()", "0x0b15650b": "randInt(uint256,uint256)", "0x12424e3f": "approve()", "0x91b4a0e7": "Difficulty()", "0x40a3d246": "toggle()", "0xb2bfd948": "checkNumbers(uint8[3])", "0xd2b8035a": "draw(uint256,uint256)", "0xbf4d89b5": "parseInt(string,uint256)", "0xddb1bdc8": "credit(address,uint256,uint256)", "0x85d5c971": "logTransfer(address,address,bytes32)", "0xb76e4890": "Tester()", "0xae6215d8": "getBlockHeight(bytes)", "0xbd8c1d33": "checkTransferFromToICAPWithReference(address,bytes32,uint256,string)", "0xedfbf7b6": "setVotingDeadline(uint256)", "0xc1d4f708": "getMwLength()", "0x689b3e2d": "Moonraker(address,address)", "0x480b70bd": "scheduleCall(address,bytes4,uint256,uint256)", "0x78ec81a0": "sendEarnings(address)", "0x594151e0": "Dice()", "0xd120a284": "getBytesFromNumbers(uint8[3])", "0x591c515f": "append(string,string)", "0x2ba0b09f": "AddNewCategory(bytes4,uint8,uint8,address)", "0x1e223143": "getFirst()", "0x003b9d88": "setLowerFeePercentage(uint8)", "0x92b4bb50": "rps()", "0xb95594e5": "lineOfPlayers(uint256)", "0xa48a663c": "transferFromToICAPWithReference(address,bytes32,uint256,string)", "0x4b91ab35": "unfollow(bytes32)", "0x57b07cd9": "getReleaseHash(uint256)", "0xd239ea8b": "getSchemasLenght()", "0x1b9f9647": "accessMyWallet(address)", "0x16ce8a69": "setBuilding(uint256,uint256)", "0xa27c672a": "owner_reveal_and_commit(uint8,bytes32,bytes32)", "0xaee84f6b": "setTime(address,uint256)", "0x0a2282ae": "JackPot()", "0xbed34bba": "compareStrings(string,string)", "0x9d5c6061": "getMsgGas()", "0x20bf0c52": "Derived(uint256)", "0x5d495aea": "pickWinner()", "0x550ed1f0": "getMaxBetAmount()", "0x11d12402": "testEasyPropose()", "0xefa7e56b": "GameEnds()", "0xa8d95fb2": "claim(address,string)", "0xfe992c98": "balanceOfAll(address)", "0x70de8c6e": "start(string,uint64,uint8,uint32)", "0xe73a914c": "setDAO(address)", "0xe597f402": "create(bytes1,bytes32,bytes)", "0xcb96012e": "hashTo256(bytes32)", "0xc02f081a": "shiftBits(bytes,int256)", "0x18968a03": "finalize(uint256,address,address)", "0xad82dcac": "testBlockhashCorrectFee()", "0xe839e65e": "query2(string,string,string)", "0xf5c8d71b": "forceMove(address,address,uint256)", "0xf5b53e17": "getInt256()", "0x5263ba87": "getLatestPatchTree(bytes32,uint32,uint32)", "0x45596e2e": "setFeeRate(uint256)", "0x6a3c1198": "_projectCancelNew()", "0x22fa85ca": "testFailRegisterContractAgain()", "0x06394c9b": "changeOperator(address)", "0xdb6fcf01": "is_destroyed(uint256)", "0x1c895915": "getNumberOfPayments(uint256)", "0x6bd92f7c": "activateAllowanceRecord(address,address)", "0x6dee2032": "getOpenOrdersOf(address)", "0x69f30401": "bid(address,uint256[],uint256[])", "0xfa544161": "getOwner(address)", "0xd644e356": "index(uint256,address,uint256,uint256)", "0x5a6c787e": "updateWithMPO()", "0x0acc4382": "getMinDailyWithdrawLimit()", "0x355e6b43": "setCommission(uint256)", "0xfc108f70": "GamblerPerAddress(address)", "0xce87f626": "replaceWizardRP(address)", "0x65343fcb": "TrustEth()", "0x3fbb539d": "scheduleCall(address,bytes,uint256,bytes)", "0x3fc6bc94": "payDAO()", "0x081780f4": "clearRecord(bytes32)", "0x7d287697": "testTryGetUnset()", "0xec2ac54e": "deposit(address,uint256,bytes32,uint256)", "0x4ac1ad78": "getWeekday(uint256)", "0xa289673b": "fipsChangeOwner(bytes20,address,address)", "0x743e0c9b": "receiveTokens(uint256)", "0xfe63300a": "registerExternalBill(uint256,address,address,uint256,uint256,uint256)", "0xb16562fe": "fipsRegister(address,bytes)", "0x3d8e2947": "getFileAddress(bytes)", "0xf34f43f6": "getRepTokenAddress()", "0xb1adc241": "BalanceDB()", "0x58ea80e5": "setThroneCreationPrice(uint256)", "0x3cc86b80": "GetMoney(uint256,address)", "0x0fcda174": "getAccountTokenBalance(address,address)", "0xe1bc3003": "reveal(bytes,string)", "0xa23744f0": "tryCreateCheckRecord(bytes)", "0x81accd0b": "create(bytes1,bytes32,bytes32)", "0xbe45fd62": "transfer(address,uint256,bytes)", "0xb36a0b15": "getSignDetails(uint256,uint8)", "0x5718b994": "checkEvent(address,bytes,bytes,uint256)", "0x40e58ee5": "cancel(uint256)", "0x53caf582": "testThrowSetNotUpdatableNotOwner()", "0xecb4136e": "NotAnotherPonzi()", "0x340f5e4e": "get_all_num_levels()", "0x7e93163b": "tip(bytes32,bytes32)", "0x27dc297e": "__callback(bytes32,string)", "0x511b1df9": "addr(string)", "0xd22c391a": "validateProposedThroneRules(uint256,uint256,uint256,uint256,uint256)", "0x691bfc89": "goods(uint16,uint256)", "0xe2b8766c": "testFailTransferNotTransferable()", "0x60f8af90": "refundRound()", "0x74580e2f": "changeCreator(address)", "0x92eefe9b": "setController(address)", "0xb651cbaf": "add_level(address,bytes)", "0xd063f55f": "toLittleEndian(uint64)", "0x0c4326a0": "getMajorMinorPatch(bytes32)", "0x801c334e": "auctionIncreaseBid(bytes32)", "0x99c724ef": "skipInLine(uint256,uint256)", "0x758b5172": "setPlayersPerRound(uint256)", "0xa15afb48": "Replicator()", "0x42ce0f30": "testThrowUpdateLatestRevisionNotOwner()", "0x179fc99f": "etherBalanceOf(address)", "0xaf8b7525": "CollectAndReduceFees(uint256)", "0x30a24abd": "create(bytes4,bytes)", "0xd0b52156": "getIpfsHash(address,address)", "0x990c8f79": "returnValue()", "0x9380b8e7": "testFailAddingMembers()", "0x6d522b19": "multiAccessChangeRequirementD(uint256,address)", "0xe33734fd": "changeProposalDeposit(uint256)", "0x1dbf3bc7": "spend(uint256)", "0xe41cc093": "getItemStore(bytes12)", "0x64371977": "set(uint256,string)", "0x5e6ad49d": "_setCosignerAddress(address)", "0x6f3fe404": "updateBalances()", "0x57bcccb6": "revokePermanentApproval(address)", "0x98866c1a": "personUpdateDOD(uint256,int256)", "0x853255cc": "sum()", "0xbc058968": "updateThingData(bytes32[],bytes32[],uint88)", "0xbfc3d84b": "CT()", "0x6ac6205c": "addDataPoint(int256,uint256,bool,string)", "0xaa8dea8c": "fipsAddToLedger(bytes20,address,bytes)", "0x268bb78e": "propose(address,bytes,uint256,uint256)", "0x56105a08": "DgxSwap()", "0x26c7edaa": "flip4(bytes)", "0x3197cbb6": "endTime()", "0xed01bf29": "budget()", "0xd366fbab": "startLottery(bytes32,uint256,uint256,uint256,uint256,bool)", "0x6241bfd1": "Token(uint256)", "0xd648a647": "fundingStartBlock()", "0x0a3b1cd2": "setHotwallet(address)", "0xacfdfd1c": "deploy(uint256,string,string,address)", "0x36f9f49c": "etherandomSeed()", "0x127714c7": "getBudget()", "0xb5d03751": "YoutubeViews()", "0x50ea1932": "lookupISO3116_1_alpha_2(bytes)", "0x8389f353": "setNumCities(uint256)", "0x03750d94": "serverSeed(address,bytes32)", "0x980e8c81": "FutureBlockCall(address,uint256,uint8,address,bytes,uint256,uint256,uint256)", "0xf4dbeb9d": "getCredRanksByContents(address,uint256[])", "0xc43d0575": "scheduleCall(bytes4,uint256)", "0x5c19a95c": "delegate(address)", "0x902e64e5": "Oath()", "0x2c4cb4be": "removeRegistryFromNameIndex(address)", "0x89cc5ea8": "bid(string,address,uint256)", "0x9447fd0a": "until()", "0xa42e36c6": "scheduleTransaction(address,bytes,uint8,uint256[5],uint256)", "0x071bd079": "demo(uint256)", "0x8e768288": "isSane(address)", "0x5fa513d5": "findPtr(uint256,uint256,uint256,uint256)", "0xc12af1ce": "fipsRegister(uint256,bytes)", "0x67c2a360": "authorizeUser(address)", "0xb466b76f": "fresh()", "0x477bddaa": "setContractAddress(address)", "0x89f4ed7a": "getLastTag(uint256)", "0x23385089": "emitApprove(address,address,uint256)", "0x50e06b57": "Etherization()", "0xae404996": "oraclize_query(string,string[3],uint256)", "0x5f2e686d": "Ethereum_eight_bagger()", "0x63a9c3d7": "verify(address)", "0x6d98e9fc": "totalWei()", "0x6677febe": "get_all_accepted()", "0xe1a9109d": "setSeedPrice(uint256)", "0x42a745cb": "testBitEqualSuccess()", "0xb9f37c86": "Registrar()", "0x129484b6": "changeFeeRecipient(int256,int256,int256,int256,int256,int256)", "0xf64fca2e": "getNodeId(bytes)", "0xdd467064": "lock(uint256)", "0xd21cbffc": "getIfVoted(uint256,address)", "0xdabf7dc8": "PayoutDividendEarly(uint256,bool)", "0xd4859dbc": "UniversalFunctionSecure(uint8,bytes32,bytes32,bytes32,bytes32,bytes32)", "0x7ef1925b": "getShareRange(uint256,uint8)", "0xd3d6a975": "testThrowsTransferNotEnabled()", "0x0358d965": "addPayout(uint256)", "0xf67a1d37": "BlockChainChallenge()", "0x30aceb89": "validateRequestParams(address[3],address,uint256[11],uint256,bytes,uint256)", "0x0c26e42e": "getReleaseHashForNameHash(bytes32,uint256)", "0x8d51faec": "setOwnerTestValue(uint256)", "0xad8ed335": "__proxy(address)", "0xfb3a1fb2": "getReleaseDb()", "0x2c02d622": "precalculate()", "0x8b7bcc86": "numWinners()", "0x54741525": "getTransactionCount(bool,bool)", "0x9ee035c9": "lookupCanonicalFormat(bytes)", "0x283a4576": "Tomeka()", "0xa33dd801": "setTreasuryBalance(uint256)", "0xede8acdb": "startAuction(bytes32)", "0xd1cf113e": "multiAccessSetRecipient(address)", "0xb3fb14ad": "getGameResult()", "0x70ab8ba8": "creditUpdate()", "0xd9e947f3": "kickOutMember(address)", "0xf4e36afd": "findThroneByNameHash(uint256)", "0xe6cbcba9": "PlusOnePonzi()", "0xf4dc2d21": "Deed(uint256)", "0xeec3cb41": "placeBet(bool[],uint256,uint256)", "0x51d6e547": "getNonce(bytes)", "0x86a5ff97": "changeStatus(string)", "0x9dbf0087": "TokenERC20(uint256,string,string)", "0x5dbe47e8": "contains(address)", "0xc8e4acef": "playerByAddress(address)", "0x10867877": "eatUnicornWithoutCorn()", "0x24c93343": "error(string)", "0x5c242c59": "query1(uint256,string,string,uint256)", "0xa0ec4e09": "getUltimateOutcomes(bytes32[])", "0x0386a016": "closeProposal(uint256)", "0x9f0e3107": "get_timestamp(bytes32)", "0x313b7b19": "finance()", "0xd588acc4": "claimMiningReward()", "0x003538c5": "TestRegistrar(address,bytes32)", "0xa6780857": "fireEventLog0Anonym()", "0x081e806d": "PayOut(uint256)", "0xf24a534e": "Oracle()", "0x2c85f8e0": "oraclize_query(string,string,string,uint256)", "0xb78bd4a5": "breakCookie(string)", "0x1acb2719": "getNextRequest(address,address)", "0x688dcfd7": "setProofType(bytes1)", "0xe2233ada": "smartDoor(address[])", "0xaf27c7b3": "Security_HasPasswordSha3HashBeenAddedToBankAccount()", "0x110df916": "getChannelID(uint256)", "0x112e39a8": "scheduleCall(uint256)", "0x85dee34c": "query2_withGasLimit(uint256,string,string,string,uint256)", "0x05b34410": "creationDate()", "0x83a51ad0": "oraclize_setConfig(bytes32)", "0xf004073a": "performAction(uint256)", "0xa18c751e": "set(bytes,bytes)", "0x49d55d9d": "receiveTransfer(uint256)", "0x5e44daf3": "vote(uint256,int256)", "0xcb56d626": "testFailBlobStoreNotRegistered()", "0xcdcf0c4a": "dispute(string,address)", "0xeb4dd8f2": "confirm(address)", "0x7b1aa45f": "ownerDeposit()", "0x9dcb5c65": "resultsWeightedByEther()", "0x74e60a48": "cancelOrder(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)", "0x483ba09e": "setBitcoinBridge(address)", "0x23df9df5": "_refund(uint256)", "0x4a67fa7d": "setLotteryFee(uint256)", "0xa21931ea": "CreateProposal(string,string,string,uint32,string,string,string,uint32,uint32)", "0x992c870d": "transferName(bytes,address)", "0x137c638b": "getExtraGas()", "0xd62457f6": "callValue()", "0xee91877c": "usernames(address)", "0x279e0912": "getDownloadPrice()", "0xf314bf46": "setReleaseDb(address)", "0x01ffc9a7": "supportsInterface(bytes4)", "0xea2ea847": "testChallengeFinalize()", "0xb4628c8a": "ENSRegistrar()", "0x871113c3": "oraclize_query(string,string[1],uint256)", "0xf63da25b": "Emailer()", "0x5521d17b": "betOnColor(bool)", "0xd8915fc5": "DCAssetBackend(bytes32,bytes32)", "0x943b0747": "RewardOffer(address,address,bytes,uint256,uint256,uint128,uint256)", "0x4b7fcee7": "ownerPausePayouts(bool)", "0xa5b9e922": "getContentTimetamp(uint256)", "0x2da8f764": "submitVideo(string,string)", "0x36344022": "testAuthorizedTransfer()", "0xc1829a14": "testFailTooFewConfirms()", "0x4889ca88": "receiveApproval(address,uint256,address)", "0x04fc11d5": "getActual()", "0x51a5f2f2": "ConsultingHalf(address,address)", "0x9d063ed8": "FIFSRegistrar(address,bytes32)", "0x2632bf20": "unblockMe()", "0xa1e95792": "eatUnicornsAlive(uint256)", "0x7b55c8b5": "scheduleCall(address,bytes4,bytes,uint8,uint256[4])", "0x891de9ed": "fromTLA(string)", "0xf42ac1de": "minQuorum(uint256)", "0x0ae08793": "confirmAndCheck(bytes32)", "0xa24d23eb": "ProcessGame(uint256,uint256)", "0xfa93f883": "getMinute(uint256)", "0x7df52ba8": "Arbitrate(uint32,uint32,bool)", "0xa1b9af31": "unlockBets()", "0x3c716e08": "updateAuthority(address)", "0x3cc7790a": "GSI()", "0x64a4a5d7": "testBitsEqualSuccess()", "0x09d33f1d": "addRequest(address,uint256)", "0x75a6a332": "testThrowRetractNotRetractable()", "0x3c335b0e": "getRetractable(bytes20)", "0xa5496e60": "newProposal(uint256,string,string,uint256,uint256)", "0x783ce458": "expmod(uint256,uint256,uint256)", "0x9844347b": "createCertificate(bytes,bytes,uint256,bytes)", "0x29d6f899": "BetOnBlue()", "0x482f63b0": "postMessage(bytes32,bytes)", "0xd845a4b3": "request(uint256)", "0x1d03842f": "onePlus(uint256)", "0x1327d3d8": "setValidator(address)", "0x3fd94686": "changeEligibleDonkeys(uint256)", "0xa3c2c462": "totalReceived()", "0x938c4307": "scheduleCall(bytes4,bytes,uint16,uint8,uint256,uint256,uint256,uint256,uint256)", "0x3517a740": "getNodeParent(bytes)", "0x0b80f8d3": "invmod(uint256,uint256)", "0xdb29fe12": "addShareholder(address)", "0x69c4113d": "setNewBudget(uint256,uint256,uint256,uint256)", "0x68402460": "scheduleCall(address,bytes4,uint256,uint256,uint8,uint256)", "0xe2deaa81": "set_reference(uint256,uint256,uint256)", "0xdf4ec249": "step3()", "0xe8223468": "sha3clone(bytes)", "0xf7654176": "split()", "0x27b752b8": "sha3HexAddress(address)", "0xb74bc710": "LuckyDoubler()", "0xbbd39ac0": "coinBalanceOf(address)", "0xf009347d": "KudosProxy(address)", "0x83d8a90f": "theDonkeyKing()", "0xf1fe42b8": "TransactionRequest(address[3],address,uint256[11],uint256,bytes)", "0x0e554bd8": "scheduleCall(bytes,uint256,uint256,uint8)", "0x9a01b4d5": "getChannel(address)", "0xa932ed0d": "whitelistRemove(address)", "0xfdacd576": "setCompleted(uint256)", "0xd9fcb31f": "comm_channel()", "0x4594d06a": "delMinter(int256,address)", "0xe1efda6d": "airaSend(address,address,uint256)", "0x5437b39b": "hasUnprocessedDividends(address)", "0x08f75d17": "move_reveal(bytes32,uint8)", "0xa3747fef": "register(bytes,bytes)", "0x6cbdb7d0": "takers(uint256)", "0x8af49ab7": "maintain(uint256,uint256)", "0xeff6be2f": "changeBaseFee(uint256)", "0x13827950": "getShareholderDB()", "0x4a00a522": "homebase(int256,int256)", "0xb796a339": "addRegistryIntoOwnerIndex(address,address)", "0x7975c56e": "oraclize_query(uint256,string,string)", "0x0e38901a": "unvault(uint256)", "0x38e48f06": "save(string)", "0xc5487661": "proxyTransferToICAPWithReference(bytes32,uint256,string)", "0x2f54bf6e": "isOwner(address)", "0xce3f865f": "collect(uint256)", "0x46f7a883": "BuyTicket(uint8,uint8,uint8)", "0x3b355af6": "baseData()", "0xfcf0f55b": "eventOracles(bytes32,uint256)", "0xafd09bab": "quadrupler()", "0x1b4fa6ab": "getDefaultStackCheck()", "0xd7ef1356": "best_adjustment(bool)", "0xbb814e9e": "versionExists(bytes32)", "0x0f5381f1": "testUserCanIncreaseVersionNumber()", "0x2852b71c": "accept()", "0xd7789a9f": "unsetEndorsement(address,uint256)", "0xa715ff59": "EtherandomProxy()", "0xe6e7237f": "claim_time_victory(uint256)", "0x5e07f240": "shiftBitsLeft(bytes,uint256)", "0xfe13a823": "computeResponseFirstHalf(uint16)", "0x3dfb4843": "renewDeed(bytes32)", "0xcccf7a8e": "has(uint256)", "0x71c79588": "releaseName(bytes32)", "0x6dc3edcf": "executeExecutable(uint256,uint256)", "0x8cfd8901": "_incBlock()", "0x03f9c793": "invest(address)", "0xd02528e6": "GetGameIndexesToProcess()", "0x19f02ceb": "set(address,address,uint256)", "0xaa677354": "register(address,address)", "0x79c3ddc1": "isPackageOwner(string,address,address)", "0xb29c2493": "token(uint256,string,uint8,string)", "0x6617e11a": "NiceGuyTax()", "0xc91540f6": "getCurrentCompetitionValues(string)", "0xc971442c": "getDBs()", "0xe6cb9013": "safeAdd(uint256,uint256)", "0x01b869f1": "release(uint32,uint32,uint32,bytes)", "0x9718b524": "newTreasury(address)", "0xb4427263": "createTokens()", "0x7c79ebce": "expired(uint64)", "0x294f3d4d": "setUpLimit(uint256)", "0xa59d6986": "recoverLostFunds()", "0xa1b7ae62": "setdirectorName(string)", "0xba7dc45f": "_removeOperation(bytes32)", "0x63bfe3d8": "SkillBeatsLuck()", "0x02e8d8c0": "scheduleTransaction(address,uint256,uint256)", "0x84e10a90": "getTotals()", "0x63f80de3": "issueCoin(address,uint256,uint256)", "0x2e5d1042": "requestPayout(uint256,uint256,bytes32,uint256,uint256)", "0x5ccd2f9b": "_deleteAllPackedRevisionBlockNumbers(bytes20)", "0x8a519fb9": "BlockChainEnterprise()", "0x9a19a953": "setInt8(int8)", "0xef4bdfdd": "Set_your_game_number_between_1_15(string)", "0x6ea056a9": "sweep(address,uint256)", "0x26826bf8": "setImage(bytes)", "0xd216d55d": "etherandomExec(bytes32,bytes32,uint256)", "0x116c6eab": "getProfitShare(address)", "0xf28a7912": "quick2()", "0xc0b92612": "changePig(address)", "0x457dd8b3": "setMasterKey(address)", "0xeec2b628": "beforeExecute(address)", "0xb3485dca": "UpdatePrice(uint8,uint32)", "0xe9b93569": "OwnerGetFee()", "0xd6a619e3": "transferIfPuritanical(address)", "0xf240f7c3": "dispute()", "0x0b467b9b": "revoke(bytes)", "0xcc189d00": "Vault(address,uint256)", "0xd1da09ee": "extractImportFeeChargeLength()", "0x4d561721": "etherandomSetNetwork()", "0x856deacf": "findTag(string)", "0x58cb7323": "MainnetETCSurvey()", "0x7fa22001": "assertEq0(bytes,bytes,bytes)", "0x36b33415": "modifyMemberInfo(string,string,string,string)", "0xd0febe4c": "buyTokens()", "0xb154224e": "TimeLockMultisig(address,address[],uint256)", "0x07ad9ecb": "safeSend(address,uint256)", "0x3aa5f4f7": "changeTokenSettings(uint16,uint256,uint256)", "0x10cf5d47": "awaitingPayout()", "0x1aa86370": "updateXIPFSPublicKey(string)", "0xb47d89ad": "Details()", "0xd2ef7398": "challenge()", "0x67546967": "EthBtcEscrow()", "0x81a60c0d": "getResults(uint256)", "0xadfe6b80": "InvestAdd()", "0x4f059a43": "getClaimAmountForBlock()", "0xfbf1f78a": "unapprove(address)", "0x7f791833": "toTimestamp(uint16,uint8,uint8,uint8)", "0x1bf20668": "testAdminTransfer()", "0x2526d960": "clawback()", "0xd78c20ff": "voteApprove(uint256)", "0x1afccfa5": "Proposal(address,address,address,bytes,bool)", "0x06ab5923": "setSubnodeOwner(bytes32,bytes32,address)", "0x26a4861c": "CROWDFUNDING_PERIOD()", "0x99753de7": "clear_level()", "0xa5468081": "Pyramid(address)", "0xebd83378": "get_blocks_for(uint256)", "0xd8c34127": "isKnownSignature(string)", "0xe7faecec": "testFailInsufficientFundsTransfers()", "0x0ca35682": "recover(uint256)", "0x74a93e6c": "setTokenHolder(address,address)", "0xdc6dd152": "playerRollDice(uint256)", "0x617fba04": "getRecord(address)", "0xc7489441": "closeMarketMaker(uint256)", "0xdd93890b": "setMeta(uint256,bytes32,bytes32)", "0xa68393a2": "debug_getCoinbaseTxOutputLen(uint256)", "0xa88c5ef7": "NextPayout()", "0x71dd8862": "IndexOf()", "0x13df7091": "mintAll(int256)", "0x96c824a8": "createAccountFundContract()", "0x1c1b8772": "update(address)", "0xc9bd2893": "fines()", "0xf4993bbd": "executeEmergencyWithdrawal()", "0x6f4812e2": "testFailControllerInsufficientFundsTransfer()", "0x616fca9b": "adopt(address)", "0x5ddae283": "transferRegistrars(bytes32)", "0x0fd1f94e": "firstClaimBlock()", "0x5c17f9f4": "approve(address,uint256,bytes)", "0x29d28aad": "Broker(address)", "0x46b305d6": "lockBetsForWithdraw()", "0xc7f86c37": "withdrawFundsRP()", "0xf42aa287": "getBlobStore(bytes12)", "0x7fc90182": "Pool(uint256)", "0xf7bc39bf": "owns(address)", "0x2fea7b81": "getIdentity(address)", "0xd4088e33": "setPrice(uint256,uint256,uint64)", "0x7997b997": "doMelt(uint256,uint256)", "0x2e0ef395": "voteOnNewEntryFees_only_VIP(uint8)", "0xf359671c": "withdrawWithReference(address,uint256,string)", "0xbb7859b5": "periodThree()", "0xd002462b": "setDeploymentFee(uint256)", "0xb7760c8f": "transfer(uint256,address)", "0xb599afc8": "totalBetCount()", "0xf3c7d275": "prenup(string,string,string,string,string,address,address)", "0x6bae05cf": "preRegister(address)", "0x1c8d5d38": "allowance(address,address,bytes32)", "0x42da3b6b": "getAmount(uint256,address)", "0x93f0bb51": "order(address,uint256,address,uint256,uint256,uint256,uint8,bytes32,bytes32)", "0x639d57f2": "testGetBitSuccess()", "0xae999ece": "reserve(string)", "0x2ffda1e0": "setBlackflag(uint256,bool)", "0x9fa5e5d5": "setARKowner(address)", "0xb36df681": "ExecutableBase()", "0x55ff440a": "castStringToUInt(string)", "0x8d72a473": "deductFunds(address,uint256)", "0x89ef40e7": "numberOfHealthyGenerations()", "0x87612102": "loadRefund()", "0xfac5bb92": "getPreRelease(bytes32)", "0xef41e06f": "testThrowSetEnforceRevisionsNotOwner()", "0x48107843": "getNextCallSibling(address)", "0xfb1669ca": "setBalance(uint256)", "0xac92fdb5": "getSaleDate(bytes16,uint256)", "0x72479140": "CreateTicket(address,uint8,uint8,uint8)", "0xc4bd8ebc": "num_monsters()", "0x705eeb90": "MultipleConstructorTest(bool)", "0x1c14179a": "GavCoin()", "0x712ca0f8": "getOrder(string)", "0xc062f578": "updateStage()", "0x7b02b2c9": "sendMsg(address,string)", "0xa04a0908": "execute(address,bytes,uint256)", "0x7c582304": "updateInvestmentTotal(address,uint256)", "0x01a7a8c0": "batFundDeposit()", "0xfcc11241": "addOrder(uint256,uint256,uint256,uint256,uint256,uint8)", "0xc64e8bc0": "executeN(uint256)", "0x70983e91": "startBoardProposal(uint256,address)", "0xbf8ecf9c": "authProposals()", "0xf79b22e0": "betOnATeam(uint256)", "0x565a2ecf": "classicTransfer(address)", "0x0eb0afa6": "createDebt(address,address,uint256)", "0x8f8bde82": "MicroDAO()", "0xd4d5d32a": "collectFee()", "0x4cdc6a73": "Marriage()", "0xc6236a5c": "scheduleCall(bytes,uint256,uint256,uint8,uint256)", "0x1cf43b63": "extractExportFeeChargeLength()", "0x1df47aad": "ReplayProtection()", "0x31db4b95": "doTriggerAuth()", "0xded04fe9": "testFailCreateNewRevisionNotOwner()", "0xcbe9ef39": "BasicCoin(uint256,address)", "0x5bb47808": "setFactory(address)", "0x6837ff1e": "newContract(address)", "0xd1d1c8ae": "ConvertNumbers(bytes)", "0xd7e11e9d": "AddTicket(bytes)", "0xacab021c": "getTOS(address)", "0x5aa97eeb": "getMarkets(bytes32[],address)", "0x05d87fe2": "issueLetterOfCredit(uint256,uint256,uint256)", "0x94d9cf8f": "CreateProxyWithControllerAndRecovery(address,address[],uint256,uint256)", "0x29e206bd": "forceDivestAll(bool)", "0x39d1f908": "actualBalance()", "0x691f3431": "name(bytes32)", "0xb8d3bfe3": "MeatGrindersAssociation(address,address,uint256,uint256,uint256,address)", "0x63bd1d4a": "payout()", "0xe2cdd42a": "vote(uint256,address,bool)", "0xb782fc9b": "getFirstActiveDuel2()", "0x0ed21029": "getIssueAssignee(uint256,bytes32)", "0x900d85fa": "updatePreReleaseTree(bytes32)", "0xe87508be": "investorDeposit()", "0x1d124fe4": "setUtils2(address)", "0xf651bf44": "move_to(uint16)", "0x7ba38916": "changeAdminFromBoard(address)", "0x2ddbc04a": "play2(address,uint256)", "0x766a3f2e": "Security_ConnectBankAccountToNewOwnerAddress(uint32,string)", "0x71ffcb16": "changeFeeAccount(address)", "0x90a85119": "checkBetResult(uint8)", "0x686e8aaa": "GetMoney()", "0x83ea0620": "packageExists(string)", "0x267127ec": "getTokenSettings()", "0x8eaa1e29": "getContentByData(address,uint256,string,string)", "0xc127c247": "addMember(address,string)", "0xa69df4b5": "unlock()", "0x11af3c68": "divest(address)", "0x665bcc32": "ProcessGames(uint256[],bool)", "0xe039e4a1": "getOwner(uint8,uint8)", "0xba8661a2": "TimestampScheduler(address)", "0xdc206e5f": "oraclize_query(uint256,string,string[])", "0x19a9c2f1": "generateId(string)", "0x3f415772": "releaseExists(bytes32)", "0x33298e25": "invoke(uint256,uint256)", "0x4ae85627": "grindUnicorns(uint256)", "0x1998aeef": "bid()", "0x8da5cb5b": "owner()", "0xbb504317": "divest(address,uint256)", "0x8ca17995": "divest(uint256)", "0x4fc9c91a": "identityOf(bytes32)", "0xeb782d8c": "ContentSeries(address)", "0x0ec3b247": "testControlSetEnforceRevisionsNotOwner()", "0x60f66701": "useCoupon(string)", "0x769796fe": "resetAction(uint256)", "0xc489744b": "getTokenBalance(address,address)", "0x3c959aca": "CheckTickets()", "0xf10ae2ab": "__dig_then_proxy(uint256,address,bytes)", "0x922fc84b": "taskProcessedNoCosting(uint256)", "0x6572ae13": "calculateWinner(uint256,uint256)", "0x8c3f914a": "spread(bool)", "0x8940aebe": "publicKey(uint256)", "0x8b676ae8": "scheduleCall(address,bytes4,uint256,uint256,uint8,uint256,uint256)", "0x1af716ba": "transferFrom(address,address,uint256,string)", "0x63a8dac2": "changeSettings(uint256,uint256,uint256,uint8,uint256,uint256,uint8,uint8)", "0x4d782cbc": "executeSellOrder()", "0x8e2c6f4d": "initiateVerification(address,bytes,bytes)", "0xc537a210": "principalOutstanding()", "0xe1041d86": "__throw()", "0x2d7788db": "rejectRequest(uint256)", "0xb7bae9b7": "exists(bytes,bytes)", "0xcfe9a7b8": "getPackageName(uint256)", "0x1f6b0a9d": "getReleaseLockfileURI(string,uint32,uint32,uint32,string,string)", "0x07b2779f": "BasicRegulator(address,uint256,uint256)", "0x72b75585": "getOriginalClient()", "0xf0e10c0d": "play(address,uint256)", "0xbd8b452e": "eatUnicorns()", "0x59e148fc": "getLastOfferId()", "0x268eb055": "setDescription(uint64,bytes)", "0xcb10e0c5": "getLastDuel1()", "0x50ab6f7f": "getMsgs()", "0xcb553ac9": "sweepWizardCommission(uint256)", "0xa7e25683": "testShortOutput()", "0x0e1ca8a5": "Oraclize()", "0xc038a38e": "totals()", "0xaf640d0f": "id()", "0x58ae8bcf": "voteInMasterKey(address)", "0x68f5aa0f": "setShareholderDB(address)", "0x40695625": "testRetractLatestRevision()", "0xf3e3c629": "testBalanceOfStartsAtZero()", "0xa7e93e87": "retractLatestRevision(bytes20)", "0x058026d0": "checkTransferToICAPWithReference(bytes32,uint256,string)", "0xa5ea11da": "getParameters()", "0xf3a44fe1": "withdrawForWorkshop()", "0x3e83fe36": "getMyShares()", "0x7a02dc06": "getInfo(bytes32)", "0x9a93e940": "testFailCreateNewRevisionNotUpdatable()", "0xb181a8fc": "resetContract()", "0x0f825673": "deleteCoupon(string)", "0xab67aa58": "transferFrom(address,address,uint256,bytes)", "0x6d7da0b1": "MyContract()", "0x00601d6c": "board(uint256,uint8,uint8)", "0x5938748e": "changeVotingRules(address,address,uint256,uint256,uint256)", "0x2525f5c1": "cancelBid(address,bytes32)", "0xd65ab5f2": "startGame()", "0xba904eed": "removeRegistrar(address)", "0xff27c476": "shiftBitsRight(bytes,uint256)", "0x69a5e902": "multiAccessCall(address,uint256,bytes)", "0x52efea6e": "clear()", "0x9348cef7": "reveal(uint256,uint256)", "0x8f420866": "DEFAULT_SEND_GAS()", "0xc4e41b22": "getTotalSupply()", "0xebb045fa": "PublicResolver(address)", "0xc864e760": "recordCommissionEarned(uint256)", "0x0194db8e": "sum(uint256[])", "0x7ac4b05e": "returnMyMoney(uint256)", "0x092a2e37": "multiAccessAddOwnerD(address,address)", "0x249b4d4f": "transferContractUser(address)", "0x9a863892": "NewProposal(uint256)", "0xe54d4051": "receiveInteger(bytes,uint256,uint16)", "0xc63ff8dd": "claim(bytes)", "0x9cb31079": "setLowLimit(uint256)", "0x455259cb": "getGasPrice()", "0x1d2e2cc4": "ENS()", "0x64bd87d6": "scheduleCall(address,bytes,bytes,uint256,uint256)", "0xf363441f": "getCreatorDotBalance()", "0x8f03850b": "numContributors()", "0x83f6d9a4": "validateNameInternal(string)", "0x6b9b1006": "TransactionRecorder()", "0x31119b4d": "changeDeveloper(address)", "0x8b7f0ddd": "register(address,address,string,string,bytes32[],uint256,string)", "0xd716222c": "is_owner(uint256,address)", "0xe42d5be0": "getPaymentOf(address)", "0x5ed84aa6": "getNymCenterAPIURL()", "0x04a2b2c2": "testOwnerCanBreach()", "0xb2d37e95": "remove_order(uint32)", "0xdc583801": "doubleyour5()", "0x2d2c44f2": "Vault()", "0x17fb6c6e": "approveRequest(uint256,bool,string)", "0x8e7fd292": "trySetSubnodeOwner(bytes32,address)", "0x1ac61e8c": "testBlobCreate()", "0xc2412676": "Token()", "0x4b8e1ba8": "isMinter(int256,address)", "0xae1a0b0c": "launchLength()", "0x31be6985": "testBitXorSuccess()", "0xafc24e3d": "getChallengeAnswer(uint256)", "0x4e077f2a": "addGasEther()", "0xf11c4482": "approveFromProxy(address,address,uint256)", "0x856f3080": "WhatWasMyHash(bytes32)", "0x32921690": "checkDepth(address,uint256)", "0xdf5dd1a5": "addOracle(address)", "0x4abb9d39": "depletable()", "0x0ee07836": "adjustDifficulty(uint256)", "0x96c52fc3": "____forward(address,uint256,uint256,bytes)", "0x27bc39c0": "submitCanonicalCandidate(bytes,bytes,bytes,bytes)", "0x35930e13": "setMinimalRewardedBalance(uint256)", "0xa2b5591c": "oraclize_query(uint256,string,string[],uint256)", "0xa6f2ae3a": "buy()", "0x89029d8c": "get_all(uint256,uint256)", "0x86269a88": "checkBetNumber(uint8)", "0x36555b85": "add(string,uint256)", "0xc00ca383": "getByOwner(address,uint256)", "0x76f30ca1": "toContentID(address,uint256,string,bytes)", "0xcdcb7c8f": "chase()", "0xd1738b72": "wroomWroom()", "0x4c0eceb5": "plusOnePonzi()", "0x795b9a6f": "scheduleCall(address,bytes4,uint256,bytes)", "0x32cea83e": "birth(bytes)", "0xfbf58b3e": "transfer(string,address)", "0xeac24932": "setEarlyParicipantWhitelist(address,bool)", "0x56d88e27": "len()", "0x39b333d9": "Play(uint8,uint8,uint8,uint8)", "0xe73b7d77": "testControlCreateNewRevisionNotUpdatable()", "0x58150c8b": "GameRegistry()", "0xc5575ef0": "checkTransferFrom(address,address,uint256)", "0x06638e92": "GetNumbersFromHash(bytes32)", "0x4bb278f3": "finalize()", "0x95669952": "debtor(address,uint256)", "0xbf8783e0": "callAndGetReturn(address,bytes,uint256)", "0xcf4a1612": "scheduleTransaction(uint256,address,bytes,uint256)", "0x50b7b7a2": "setRating(bytes32,uint256)", "0x0a9254e4": "setUp()", "0x0af658ca": "personUpdateActivity(uint256,bool)", "0x4e71d92d": "claim()", "0xb1418cf4": "payHouse()", "0xfedc2a28": "_rewardWinners(string,uint8,address[])", "0x4f995d08": "getPeople()", "0xe8efc1a0": "updatedValue(bytes32)", "0xaa237e21": "set(bool,uint256)", "0xce869a64": "fails()", "0x8b9e5385": "MeterSlock(uint256,uint256,address)", "0x912de8de": "fixBalance()", "0x140b4465": "executeSpendingRequests()", "0xe2b178a0": "getAuthority()", "0x804e11dc": "testThrowsDisownNotTransferable()", "0x200ebe34": "addTokensToGive(address)", "0x6f85c7e4": "WAITING_PERIOD()", "0x1c4e6cd0": "NameReg()", "0x014e5fde": "ARKController_1_00()", "0xfed4614b": "funeral(bytes,int256)", "0x02aa274b": "setForward(bytes4,address)", "0xa163a624": "Test()", "0x54ae8492": "CustodialForward()", "0x62fb09b2": "getRefDescr(uint256)", "0x001f8d11": "removePackage(bytes32,string)", "0x311d5a2a": "recordBalance(address)", "0x8023ffbd": "getOverallSize()", "0x2e898ddc": "validateTemporalUnit(uint256)", "0x043753ba": "makeDecision(uint256,bool)", "0x09861b81": "flooredSub(uint256,uint256)", "0xf2f03877": "commit(uint256,bytes32)", "0xe044c2de": "newLoan(bytes,address,uint256,uint256,uint256,uint256,uint256,uint256)", "0xf249cf19": "get_all_challenges()", "0xb303dcbd": "Owned()", "0x2dabbeed": "reclaim(uint256)", "0x3f0ec70b": "RequestFactory(address)", "0x67ce940d": "getOverhead()", "0x90f2c86d": "convertToWei(uint256,string)", "0x76d690bb": "BountyList()", "0x828d671c": "dyn_sig()", "0xcfb3a493": "getMyBounty(uint256)", "0x4296a9cb": "getNodeRightChild(bytes)", "0xa51aea2d": "changeMaxMultiplier(uint256)", "0xcff2fa42": "_returnFee(address,uint256)", "0xfdc193a4": "test3Fails()", "0x9f181b5e": "tokenCount()", "0xc9bbc8c0": "donkeyName(address)", "0xc7e67360": "GAS_BUFFER()", "0xc3a2c0c3": "scheduleCall()", "0xfaf0952b": "testThrowRestartNotOwner()", "0x5dddea66": "updateState(uint256,uint8,uint256)", "0x7bcd7fad": "getRecordAtIndex(uint256)", "0xa6cbcdd5": "numSignatures(bytes4)", "0xec0f1025": "testBitsOrSuccess()", "0x8c0e156d": "scheduleCall(bytes4,uint256,uint256)", "0xfa7d68f1": "getAccountInfo(uint256,uint256)", "0xf1bca7a4": "doCall(uint256)", "0x847f8a10": "Refund(uint32)", "0x4d268ddd": "payImporterBankForGoodsBought()", "0xfd6f5430": "setContent(string,bytes32)", "0xbc0e7adb": "testThrowsDisownNotOwner()", "0xd526b9bd": "_allow()", "0x77fe38a4": "transferToICAPWithReference(bytes32,uint256,string)", "0x9a969768": "distributeProfits(uint256)", "0x70e71ea3": "etherandomSeedWithGasLimit(uint256)", "0xbca86986": "testSetup()", "0x337c1e28": "getIndexRoot(bytes)", "0x3d9ce89b": "scheduleCall(bytes4,bytes,uint256)", "0xd1a8d447": "get_all_bet_values()", "0x83b23b40": "cEthereumlotteryNet()", "0xe1fa8e84": "register(bytes32)", "0x18f303a1": "SetInternalValues(uint8,uint256)", "0x346cabbc": "scheduleCall(address,bytes4,uint256,bytes,uint256)", "0x8c172fa2": "getEvent(bytes32)", "0x62b3b833": "createCoupon(string)", "0x2bf4e53d": "getCurrentShareholders()", "0xa5b1e13d": "settle(address,address,uint256,uint256)", "0xceebe28d": "repoInterfaceVersion()", "0x82fc49b8": "setCosignerAddress(address)", "0x1da6822c": "testThrowsTransferEnableNotTransferable()", "0xebc697d1": "testControlRestartNotOwner()", "0xe50dce71": "testControllerApproveSetsAllowance()", "0xf16fa954": "debug_resizeRealPrefix(uint256,uint256)", "0x47448e8a": "set(bytes32,string,bytes32)", "0x58e9b208": "Controlled()", "0x2406cedb": "setPackageOwner(bytes32,address)", "0x00e43ee9": "setMigrationStatus(uint256,address)", "0x58d9fa04": "addUser(uint256,address)", "0xac4b2bae": "newParameters(int256,uint256,int256,uint256)", "0xc1c0e9c4": "exec()", "0x2fac1d36": "isReadyFor(address)", "0xdd012a15": "setIt(uint256)", "0x87bb7ae0": "getTicketPrice()", "0xffd10e07": "enterPool(address)", "0x3bed33ce": "withdrawEther(uint256)", "0x96ef7aa0": "cash_transfered(string)", "0xa1cb31b7": "_state()", "0x57e871e7": "blockNumber()", "0x233120aa": "getChainyURL()", "0xc8690233": "pubkey(bytes32)", "0xc3ee6311": "lockAndCall(string)", "0x8e4afa51": "checkTransferToICAP(bytes32,uint256)", "0xc913b552": "getVersions(bytes)", "0xc3c5a547": "isRegistered(address)", "0x4da74ee6": "setVoteIntention(uint256,bool,bool,string)", "0x953a7fab": "testMoveBalance()", "0x0bf77989": "debug_coinbaseTxSha(bytes,uint256)", "0x00faf4dd": "getTokenDivisor()", "0x6a5da6e5": "followCampaign(uint256)", "0xdbde1988": "transferFromWithoutReward(address,address,uint256)", "0x43243797": "fundsOf(address)", "0x77c78df9": "getCurrentLevel()", "0xd126dac4": "cashout(address,address,uint256)", "0x4188d79c": "releaseExists(string,uint32,uint32,uint32,string,string)", "0x7dd56411": "ownerOf(bytes32)", "0x0e1d88fc": "addTender(uint256,uint256,address,uint256)", "0x75949c13": "sendHalf(address)", "0xba13a572": "lottery()", "0x05459f42": "WeeklyLotteryB(address)", "0x37c390e3": "allow_move(uint16)", "0x0761a004": "step(uint256,bytes)", "0x5ca1c5a0": "getNodeValue(bytes)", "0x9bf68006": "testControlSetNotTransferableNotOwner()", "0xd810f298": "computeSettlementAmount()", "0x15abc160": "createValidatedRequest(address[3],address,uint256[11],uint256,bytes)", "0xf6d339e4": "setAddress(bytes32,string,address)", "0xb33a8a11": "setTokenReference(address)", "0xd509b16c": "testWithdraw()", "0x2037fcbf": "withdrawInvestment(uint256)", "0x78ae88d1": "newDeal(uint256,uint256,uint256,uint256,uint256)", "0x32d8eee5": "testFailSetNotUpdatableNotOwner()", "0xe0c6190d": "checkTime()", "0xb0349184": "clearRecords(bytes32[])", "0x67bd69a6": "getLastDuel2()", "0xd499555b": "getFirstActiveDuel()", "0x2a228fc2": "processWithdrawals()", "0x05a17fc6": "getAccountFeed(address,uint256,uint256,uint256)", "0xe71264fa": "addNewTokens(uint256)", "0x2dae9878": "BankOwner_EnableConnectBankAccountToNewOwnerAddress()", "0x3e82055a": "addSignature(uint256,bytes16,bytes)", "0xa9eed530": "reduceOrderQty(uint256,uint256)", "0x288c6ed2": "getSeedCost(uint256)", "0x96ed10a4": "issuePOIs()", "0xd35b9d83": "codeAt(address)", "0x13c89a8f": "getAllowedTime(bytes32)", "0xb6ac24df": "updatePatchTree(bytes32)", "0x041d0c0b": "MyTokenLoad(uint256,string,uint8,string,address)", "0x17a601b5": "MAX_STACK_DEPTH_REQUIREMENT()", "0x6f52167d": "payDuel(address,string,address,string)", "0x69573648": "remove(bytes,bytes)", "0x24804cef": "Deed()", "0xf29617da": "registrationDeposit(address)", "0x1d2bca17": "MyToken(uint256,string,uint8,string)", "0x18b31f94": "registerLengthFunction(string,string,address)", "0x323082d7": "Vote(string)", "0x779beca0": "getNumOfSalesWithSameId(bytes)", "0xf72457af": "CertifierDb()", "0x43e332c5": "Last_block_number_and_blockhash_used()", "0xe59f611f": "InputLimit(uint256)", "0xaa67c919": "depositFor(address)", "0xc1441172": "setBlackFlagRequest(uint256,uint256)", "0xf25eb5c1": "removeReverse()", "0x58d3b617": "Notifier(string)", "0x3aa94b1d": "getCoinStats(uint256)", "0xd0821b0e": "bet(uint8)", "0x521eb273": "wallet()", "0xa2fb342d": "lend(address,uint256)", "0x22dc36e2": "processed(uint64)", "0x49407a44": "claimEther(uint256)", "0xd052fbf6": "getHistory(string,uint256)", "0xa79deb4f": "acceptTradeDeal()", "0x06459119": "testThrowsTransferNotTransferable()", "0x173cb7de": "getNumReleasesForNameHash(bytes32)", "0x15cff546": "isOperationBlocked()", "0x05261aea": "finalize(uint256)", "0xa01bc729": "monster_attack(uint256)", "0xfee35ff8": "newInvest(uint256,address,uint256)", "0xfd735602": "executeN()", "0x3def449b": "FipsNotary()", "0xb39a64cd": "getNumCalled()", "0x97709cde": "ARK_VOTER_1_00(uint256,uint256,uint256,uint256,uint256,uint256)", "0x2f7f3ecf": "findNextHour(uint256,bytes)", "0x1896f70a": "setResolver(bytes32,address)", "0xe59d843a": "Replicator(bytes,uint256,uint256,address)", "0xfd7c460d": "ciberLottery()", "0xb8017221": "get_party2_balance()", "0x10e6e06c": "vote(bool,uint256)", "0xde78e78a": "tokenLaunched()", "0x07b6f631": "testTestHarnessAuth()", "0xc8691b2a": "getHistory(uint256)", "0x2f62a6ff": "fipsRegister(uint256,address,bytes)", "0x75438e49": "fillGas()", "0x853552d7": "_slotAddNew(address)", "0x67cb61b6": "getChoice()", "0x6189be15": "columnround(uint256,uint256)", "0x776d1a01": "unvest(uint256,uint256,uint256,uint256,uint256,bool)", "0x6ce1417e": "Fund()", "0x0ff0a4df": "reFund()", "0x2625e2e1": "post(address,address,bytes32)", "0x0cf45ba5": "updateFirstDuel2(uint256)", "0xe20bbd8d": "RecoveryWithTenant()", "0xdabf7ec4": "helper(uint256)", "0x7a837213": "setAllowedAccount(address)", "0xf340fa01": "deposit(address)", "0xc23697a8": "check(address)", "0x57dc9760": "DaoChallenge()", "0x8606f905": "balanceOf(address,bytes)", "0xcbcaacab": "checkTransferWithReference(address,uint256,string)", "0x8a4fb16a": "getWithdrawal(uint256)", "0xf3fef3a3": "withdraw(address,uint256)", "0xe3280126": "addOrder(string,bool)", "0xa9d2293d": "lastClaimBlock()", "0xd1b4ff7e": "multiAccessRevokeD(bytes32,address)", "0x60689557": "Rock()", "0xe4690a0b": "popRequest()", "0xe2f8feb2": "internal_tester(int256)", "0x03cf4fd6": "expire(uint256,uint256,uint8,bytes32,bytes32,bytes32)", "0xb8f71f26": "scheduleTransaction(uint256,address)", "0x2ef761d3": "buyTile(uint8,uint8)", "0x25ea269e": "Scissors()", "0x4665096d": "expiration()", "0x8279c7db": "setReceiverAddress(address)", "0xc90d080a": "registerEvent(bytes)", "0x7fd238ba": "doCoinage(address[],uint256[],uint256,uint256,uint256)", "0x9a92b7e7": "EthVenturesFinal()", "0x03048a42": "createRequest(address,uint256,string,bytes,bytes)", "0x05888fcd": "tradeBalances(address,uint256,address,uint256,address,uint256)", "0xd90a88cd": "getContentReplies(uint256,uint256)", "0xc8117b5b": "extractBalanceOfLength()", "0x9070b18d": "_getAllRevisionBlockNumbers(bytes32)", "0xe50d0473": "SetRank(uint8,address,uint16)", "0x81ebdeea": "testThrowCreateWithNonceRetracted()", "0x71bde852": "_startNextCompetition(string,uint32,uint88,uint8,uint8,uint16,uint64,uint32,bytes32,uint32[])", "0xd3c0715b": "vote(uint256,bool,string)", "0xe46164c5": "waitingForPayout()", "0x9054bdec": "toTimestamp(uint16,uint8,uint8,uint8,uint8,uint8)", "0xcc872b66": "issue(uint256)", "0xce8d054e": "_setupNoCallback()", "0x7281854d": "GetCategoryValue(uint8)", "0xa005b87b": "NullMapTest()", "0x71b6663e": "play1(address,uint256)", "0xd409ddda": "EtherizationUtils()", "0xd55ec697": "upgrade()", "0x7d4cf602": "buildDSBalanceDB()", "0xd148288f": "setHoldingPeriod(uint256)", "0xe22b0c46": "verify(uint256,uint256,uint8,bytes,bytes)", "0xe99543aa": "Trash(uint256)", "0x88a49164": "testErrorUnauthorizedTransfer()", "0xf4a81d08": "getKudosGiven(address)", "0x9af605cb": "__proxy(address,bytes,uint256)", "0x07a9574a": "changeLeaderMessage(string)", "0x579badf6": "UniversalFunction(uint8,bytes32,bytes32,bytes32,bytes32,bytes32)", "0x7ca55e00": "etherandomVerify(bytes32,bytes32,bytes32,uint256,uint256)", "0xa4e2d634": "isLocked()", "0x35ee2783": "Alarm()", "0x1c02708d": "killContract()", "0xf00d4b5d": "changeOwner(address,address)", "0xb73405a9": "roundMoneyDownNicely(uint256)", "0x6eacd48a": "ownerPauseGame(bool)", "0x773c84ee": "exec(address,bytes,uint256,uint256)", "0xb4c4e005": "testTransferToAcceptAuthority()", "0xb18c6847": "manualUpdateBalances()", "0x7ac91cc2": "testFailOwnedAuth()", "0xe68d3ae3": "escrow(uint256,string,address,uint256)", "0x5ca8bc52": "returnIt()", "0x7d32e7bd": "transfer(address,bytes32)", "0xfd83f3e3": "QueueUserMayBeDeliveryDroneCotnrol()", "0x3e239e1a": "getHour(uint256)", "0xc3b2556d": "lookup(bytes)", "0xc0df77d0": "getRefName(uint256)", "0x1e9fcc77": "activateAllowance(address,address)", "0x8f5e9ca7": "acceptTOS(address,bool)", "0x32afa2f9": "claimEtherOwner(uint256)", "0x80acaafb": "profitDistribution()", "0xa24835d1": "destroy(address,uint256)", "0x0b7373d6": "giveAllBack()", "0xb3c25835": "addUser(address,string,string,uint256)", "0xb2b0aefb": "verifyPendingShares(uint256[],uint256[],uint256,uint256[],uint256[],bytes,bytes,uint256)", "0x8e19899e": "withdraw(bytes32)", "0x2d2800f1": "react()", "0x06900c41": "ZeroPonzi()", "0x32fefb4c": "add_account(address,address)", "0x1d007f5f": "changeDAO(address)", "0xbab86ea8": "test(string,string)", "0xec93cfae": "FountainOfWealth()", "0x3c314a91": "playerGetPendingTxByAddress(address)", "0xfd6b7ef8": "safeWithdrawal()", "0x67eae672": "sendCoinFrom(address,uint256,address)", "0x8b7afe2e": "contractBalance()", "0x8cdcdae1": "testControlUpdateLatestRevisionNotOwner()", "0xc37ff3d9": "sha(uint256,uint256)", "0x2675c123": "CloseContract()", "0x95e911a8": "feeBase()", "0x7948f523": "setAmbiAddress(address,bytes32)", "0xfedfd535": "Config()", "0xadf54e0c": "betOnLowHigh(bool,bool)", "0xa2f3ede2": "computeNameHash(bytes)", "0x737c8ea1": "_getRevisionBlockNumber(bytes32,uint256)", "0x1ef3755d": "restart()", "0xca1d209d": "fund(uint256)", "0x3f5e268f": "convictInitial(uint256,uint256)", "0xa1c0539d": "scheduleCall(address,bytes4,bytes)", "0x3169ff3e": "LooneyLottery()", "0x4ecd73e2": "DistributeDividends(uint256)", "0x9919b1cc": "getContentsByRanks(address,uint256,uint256,uint256)", "0xf7ae9421": "checkInvestorBalance(address)", "0xcc70bb1a": "publish(string,string,string,address)", "0x1a10cfc3": "delete_entry(uint256,uint256,uint256)", "0xd992bd5b": "testResultNotZero()", "0x4d70d1d7": "generateId(uint256)", "0x05d2f92a": "check_depth(address,uint256)", "0x2030f721": "num_objects()", "0x64325ddb": "currentClaimPrice()", "0x481b659d": "permitPermanentApproval(address)", "0xd6d902c4": "claimThroneFor(bytes,address)", "0x6d2cb794": "airaTransfer(address,address,uint256)", "0xc9030ea0": "addMember(address,bool)", "0x5e855f14": "Dice(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "0xea1bf386": "getNextSellerBOTdata(uint256)", "0x991ffd4e": "scheduleCall(address,bytes,bytes,uint256,uint256,uint8,uint256)", "0xe56b9dce": "GetPrize(uint256)", "0xa6b1caa3": "gasScalar(uint256)", "0x4bc9fdc2": "calcMaxWithdraw()", "0x2551858e": "getFlags(bytes32)", "0xa4502cb8": "setExportFee(address,uint256)", "0x12253a6c": "stopContract()", "0xac940823": "betOnLowHigh(bool)", "0x7ef95c6f": "extractAccountAllowanceRecordLength(address)", "0xc1812b15": "reorganizeOwners()", "0x1747dfd4": "ContractPlay()", "0xecfc7ecc": "placeBid()", "0x61591a7c": "personUpdateDOB(uint256,int256)", "0xdd5244b4": "testTryProxyCallWithValue()", "0xe56556a9": "getPlayerID(address)", "0x752bacce": "getExecPrice()", "0xdce5c757": "cool()", "0x1d3b9edf": "times(uint256,uint256)", "0x0b7e9c44": "payout(address)", "0x06005754": "nameRegAddress()", "0xc6427474": "submitTransaction(address,uint256,bytes)", "0x0bf75567": "voteSuperQuorum(uint256,bool)", "0xf3ee6305": "removeCertificationDocument(address,bytes32)", "0xfae9d06d": "calculateTxFee(uint256,address)", "0x53fefd7d": "changeMaxDeposit(uint256)", "0xb94e962a": "allocateTickets(uint256)", "0x021c309a": "solveBet(address,uint8,bool,uint8)", "0x90fd53ec": "farmTile(uint8,uint8,int8)", "0xc633084f": "sendGreeting(address,string)", "0x43d24a5e": "addUpdater(address)", "0xa268b332": "testBitXorFailIndexOOB()", "0xc80c28a2": "getNumberOfParticipants()", "0xe0e3ba5a": "getLosesShare(address)", "0xf3227dc4": "cancelDeal(string)", "0x09a69f57": "getRewardAmount()", "0x66ad484c": "newfirst_player(address)", "0x940c154b": "lockBet(uint256)", "0xc1fd4339": "createMarket(bytes32,uint256,uint256,address)", "0x7365870b": "bet(uint256)", "0x349501b7": "checkDepth(uint256)", "0x522103fa": "changeUnicorn(uint256,address)", "0x316b08a0": "scheduleTransaction(address,bytes,uint256[7],uint256)", "0xe8641652": "strCompare(string,string)", "0xf3283fba": "setMultisig(address)", "0x4c488dac": "getChannelValidUntil(bytes)", "0x2f4ee5d4": "registerThrone(bytes,uint256,address,uint256,uint256)", "0x87914c6f": "prolongateContract()", "0xdd90c403": "getAccountFeed(address,uint256,uint256)", "0x57e2880d": "scheduleTransaction(uint256,uint256)", "0x41395efa": "dgxBalance()", "0xee0dc478": "testSetEnforceRevisions()", "0x4dc7cc55": "terminateAlt()", "0xa2f16d80": "dexWithdrawCollectedFees()", "0x42909a9e": "create_game()", "0x1dea0c57": "getRealBet(uint256)", "0x89d8ca67": "drawPot(bytes32,bytes32)", "0x06fe1fd7": "getPackageName(bytes32)", "0xf1c760ae": "fixBalanceInternal(address)", "0x7f0899f2": "AddTicket(bytes5[])", "0x9e1e6528": "uncertify(address)", "0xb3c1a588": "parseMsgData(bytes)", "0x95978868": "strConcat(string,string,string,string,string)", "0xfaee13b9": "set(int8)", "0x7399646a": "theRun()", "0x6ed43eb0": "getInvestorList(uint256)", "0xa6f9dae1": "changeOwner(address)", "0xb29d7914": "getRefResults(uint256)", "0x15c91115": "pbkdf2(bytes,bytes,uint256)", "0x33fd066d": "doBalanceFor(address)", "0x11f72496": "testT()", "0xdf7cec28": "cancelBid(bytes32)", "0x89859b50": "updateLatestTree(bytes32)", "0xb8c86aa6": "getArraySettingResult()", "0x0456860a": "acceptAtCommunity(address,uint256)", "0xcec7260b": "move_monster(uint16,uint16)", "0xfb34fc6f": "WatchNextBlockReward()", "0x27fbcac5": "getChannelFeed(address,uint256,uint256)", "0xbe040fb0": "redeem()", "0xf0caea2b": "SmartRoulette()", "0x0b74edc6": "testFinalHash()", "0x5e717e2d": "readDeal(string,address)", "0x3092afd5": "removeMinter(address)", "0xe571fd2d": "addPrescription(uint256,string)", "0xa039e3c7": "testSetNotTransferable()", "0x340ddda6": "MeatConversionCalculator(uint256,uint256)", "0x29605e77": "transferOperator(address)", "0x338cdca1": "request()", "0x2812f8b8": "FutureCall(address,uint256,uint16,address,bytes4,bytes,uint256,uint256,uint256)", "0xf8b2cb4f": "getBalance(address)", "0x74e4435f": "getUserAddress(uint256,bytes32)", "0x4d7edc15": "assignTokens(address,uint256)", "0xa9fbc614": "lookupTicketHolder(uint256)", "0x17623e5b": "unauthorizeManager(address)", "0x7f924c4e": "testDeposit()", "0xae6c0b03": "canWithdrawBond(uint256)", "0xfcc6b5d5": "fillTheirOrder(address)", "0xfef1dc7d": "seekerValue()", "0x6389654e": "changeDailyWithdrawalLimit(uint256)", "0x391f2e96": "InvestCancel()", "0xf67abd87": "entryDetails(uint256)", "0xa6b197aa": "Order(address,uint256)", "0x138cc941": "testErrorTransferToRejectAuthority()", "0x155dd5ee": "withdrawFunds(uint256)", "0x4a1f0bf6": "inheritToNextGeneration(address)", "0x77ac3da5": "oraclize_query(uint256,string,string[1],uint256)", "0xb05e390a": "TokenEther(string,string)", "0x711953ef": "setGameAddress(address)", "0xa8893a6e": "getNumOfSalesWithSameId(bytes16)", "0x6949a058": "sendOwnerEther()", "0xb44bd51d": "getConfig(string)", "0xcf832ce2": "ownerRefundPlayer(bytes32,address,uint256,uint256)", "0x60e519c0": "computeMarginAmount()", "0x720c4798": "workshop()", "0x62ba9687": "toTimestamp(uint16,uint8,uint8,uint8,uint8)", "0x63deb2c5": "changeMemberAddress(address)", "0xd6b44859": "scheduleUndoIt(uint256)", "0x9fb25d9e": "LeaderMessage()", "0x4a23dc52": "FileStore()", "0x5a6b26ba": "withdrawal(address,uint256)", "0x318a3fee": "relayTx(bytes,int256,int256[],int256,int256)", "0x74087040": "testBitsNotEqualSuccess()", "0x2f695053": "getCertifierAtIndex(uint256)", "0x6fbaaa1e": "currentMultiplier()", "0xb0414a2d": "setMinimumGasLimit(uint256)", "0xf06d335e": "_recoverAccount(address,address)", "0xf38e5ca2": "getBlobStoreFromFullBlobId(bytes32)", "0xb7266456": "StandardToken()", "0x08bf2d0d": "getOrderBook(uint256,uint256)", "0xcbf1304d": "balances(address,uint256)", "0x76285b5b": "_is360thDay()", "0xb623f5e5": "checkSetCosignerAddress(address)", "0xd5df7559": "removeDocument(uint256)", "0x459f93f7": "getBuyers(uint256,address)", "0xe571c35e": "ReverseRegistrar(address,bytes32)", "0x062b01ce": "isPricingSane()", "0x04106c8b": "startGeneration()", "0xf2fde38b": "transferOwnership(address)", "0x76da5667": "admin_kill()", "0x69c5c229": "testControlUpdateLatestRevisionNotUpdatable()", "0xb3f98adc": "vote(uint8)", "0xd0e0813a": "promote(address)", "0xc8c01a55": "request(address,uint256)", "0xe6b972f5": "userName(address)", "0xdda44b10": "buyRecipient(address,uint8,bytes32,bytes32)", "0xa37fd390": "setHomeAdv(uint256,string)", "0x526b91d1": "transferSysAdmin(address)", "0x1fdf6e0c": "protectKingdom()", "0x15a0df43": "testThrowCreateNewRevisionNotOwner()", "0x4042b66f": "weiRaised()", "0x821e9169": "testFailControllerChargeMoreThanApproved()", "0x3e0dfbdf": "getInvestorByAddress(address)", "0xb3760c80": "orderMatch(uint256,uint256,uint256,int256,uint256,uint256,address,uint8,bytes,bytes,int256)", "0x3ce1f4e7": "testFailUpdateLatestRevisionNotUpdatable()", "0xffcce369": "changeIPFSHash(string)", "0x43b1c529": "getSig(string,bytes4)", "0x384b1393": "follow(uint256)", "0x1b437d0c": "compareLastCalldata(bytes)", "0x0e757a2e": "testSetAndGet()", "0xb45c48dc": "Security_AddPasswordSha3HashToBankAccount(bytes)", "0x812cddf2": "getSavedString()", "0xb3c06f50": "transferFrom(address,address,bytes32)", "0xc179520c": "ManageAccount()", "0x81788e2b": "addAllowedAddress(address)", "0xadaccd74": "getNickname(address)", "0x4ce01d86": "totalBetValue()", "0x44691f2b": "Dispute()", "0x2324c67c": "getAllSignatureHashes(bytes4)", "0xea4ba8eb": "getOutcome(bytes)", "0x3855dcd6": "getContrarians_by_index(uint256)", "0x920c94df": "BuyTicketForOther(address,uint8,uint8,uint8)", "0x3115b4c4": "bulkStoreHeader(bytes,uint256)", "0x3e2ee39e": "debug_resetuser()", "0x3ea3f6c5": "activateRegistrar()", "0xe5a27038": "Pluton(uint256,string,uint8,string)", "0x2af7ceff": "testPrice(uint256)", "0x8ab1a5d4": "sell(uint256,uint256,bool)", "0x2635f4de": "registerLibrary(bytes,address)", "0x262c0b72": "getPayoutFreezePeriod()", "0x16181bb7": "shortSellShares(bytes32,uint8,uint256,uint256)", "0xed3058e0": "transferRight(address,bytes)", "0x6f7920fd": "tokenCreationCap()", "0x4094ef5e": "addDataRequest(string)", "0xc55c1cb6": "queryN_withGasLimit(uint256,string,bytes,uint256)", "0x2f30283e": "testSomething()", "0x3a7d280c": "login(string)", "0xd917deb5": "Donate()", "0x478aa69e": "unauthorizeUser(address)", "0x860e9960": "BetPriceLimit()", "0xf578fd85": "assertEq0(bytes,bytes)", "0xa2ec191a": "addDSource(string,uint256)", "0xaa9669c1": "roll(uint256,bytes)", "0x38eee93e": "scheduleCall(address,bytes,bytes,uint16,uint8,uint256[5])", "0xbfc3cd2f": "testFailChargeMoreThanApproved()", "0x100c8ada": "setCAmodulus(bytes)", "0xae815843": "query(uint256,string,string,uint256)", "0xcdda62ad": "FutureBlockCall(address,uint256,uint8,address,bytes4,bytes,uint256,uint256,uint16,uint256,uint256)", "0xad605729": "getParticipantCount()", "0x53d9d910": "create(address[],uint256,uint256)", "0x60063887": "transferDebt(address,address,address,uint256)", "0xf51cbc72": "Level()", "0xcb7acdd9": "hola()", "0x8b2e6dcf": "publish(bytes32)", "0x7b12df39": "userProfits()", "0xf3b50c04": "rescind()", "0x16216f39": "return13()", "0xdd10d97e": "getPlayerWaiting()", "0x50baa622": "withdrawToken(uint256)", "0xe1152343": "payout(uint256)", "0xc0ae6a3a": "ultimateOutcomes(bytes)", "0xc8bb73ef": "testGetBitsFailIndexOOB()", "0x95f0684b": "getPackageNameHash(uint256)", "0xc10dd4c6": "getEvents(bytes32[],address)", "0x452d44dc": "checkBothNotNull()", "0x7682e6ff": "getTrustSetting(address)", "0x0e47c76f": "rotate(uint64,uint256)", "0xb238ad0e": "getDaysInMonth(uint8,uint16)", "0xdf811d7d": "numberOfPlayersInCurrentRound()", "0x884b5dc2": "fill(uint256[])", "0x51b42b00": "deactivate()", "0xf3541901": "execute(address,bytes,uint256,uint256)", "0x9c6034a7": "sendIfNotForked()", "0x1bcad37a": "getTotalCost()", "0xdab80d6f": "addSponsor(address)", "0x2ad95786": "winner(address)", "0x686f2c90": "collectAllFees()", "0xe51ace16": "record(string)", "0x99a88ec4": "upgrade(address,address)", "0xc96593a0": "The10ETHPyramid()", "0x82661dc4": "splitDAO(uint256,address)", "0x083ae1fe": "setPackage(string)", "0x5ca3400c": "WithBeneficiary(address)", "0xe9dc0614": "vote(bytes)", "0xe9c31315": "checkBetParity(uint8,address,bytes32,bytes32)", "0x7075b1d8": "latestMonarchInternal()", "0x5b151fd2": "fifty_fifty()", "0xbb4d7cd1": "tag(uint256,string)", "0xf709dd51": "getTrademark()", "0x23de6651": "emitTransfer(address,address,uint256)", "0x721a1f57": "endorseCredit(address,uint256,uint256)", "0xa7c5052e": "buildDSTokenRegistry()", "0x0178fe3f": "getData(uint256)", "0x67a59d91": "scheduleCall(address,bytes,bytes,uint256,uint256,uint8)", "0x2004dff6": "Basics()", "0xdad99989": "burnCoins(address)", "0xbe600276": "move(uint16)", "0x8a3e44d4": "assetMoveInformation(address,address)", "0xa055fe64": "_projectCommitNew(address)", "0xc9cfac55": "refundCurrency(address,uint256,uint256)", "0x3943807b": "insert(bytes,bytes,int256)", "0x11b9fee8": "ForkChecker(uint256,bytes32)", "0x5fb3e119": "Auction()", "0x738ddabe": "getContentIndexedAccountCred(uint256,address,address)", "0x29a6f31b": "oraclize_query(uint256,string,string[2],uint256)", "0xa84c5330": "createNewRevision(bytes20,bytes)", "0x5d3c1d4c": "_getRequest(uint256)", "0xbd322b77": "enableApi(address)", "0xff81fb91": "unhint(int256,bytes32)", "0x9d16aca6": "changeExchangeContract(address)", "0xfc36e15b": "vote(string)", "0x9890220b": "drain()", "0x96f0aa8f": "findNextSecond(uint256,bytes)", "0x805210b7": "AmIPlayer2()", "0xb7482509": "deposit(address,string)", "0x0bad342a": "EscrowContract(address,address,address,address,uint256,uint256,uint256,uint256)", "0xb8cf14e7": "updateStatusPlayer()", "0x07bc6fad": "withdraw(address,uint256,bytes32,uint256)", "0x53850db3": "getParticipantById(uint256)", "0xec096f8d": "addTransaction(address,uint256,bytes)", "0xa28ecf0b": "sendCryptedHand(bytes)", "0x3f15457f": "ens()", "0x7154ae61": "CheckNumbers(uint8[5])", "0x1a0919dc": "unregister(bytes32)", "0x2880ebe7": "underdogPayoutMarkup()", "0x29ce1ec5": "addFactory(address)", "0x1b5ee6ae": "mintToken(int256,address,uint256)", "0x67fbd289": "destroyTokens(uint256)", "0x6d1669e1": "approveAndCall(address,address,uint256,bytes)", "0xeacfc0ae": "Authorized()", "0xcf7315c6": "retract(bytes20)", "0x0ac28725": "requestTradeDeal(uint256,uint256,string)", "0xcfed9199": "timePassed(uint256)", "0x7d89ae63": "__findRef(string)", "0x5eda5b9a": "interestCollected()", "0xe241c1d9": "deriveKey(uint256,uint256,uint256)", "0xcc9ae3f6": "getMyReward()", "0xefef39a1": "purchase(uint256)", "0x29917954": "exitPool()", "0xf91a792e": "decryptHand(string,uint256,uint256,uint256)", "0x6a28db13": "getQrLength()", "0x15bef9cd": "changeMembers(address[],bool)", "0xfa968eea": "minBetAmount()", "0xbaccc92b": "RegulatorIfc(address)", "0x509f8633": "create_account()", "0x19c32e0b": "hmacsha256(bytes,bytes)", "0xec5c9036": "Crowdsale(address,uint256,uint256)", "0x3df16377": "make_move_and_claim_victory(uint256,uint8,uint8,uint8,uint8,uint8,uint8,uint8)", "0x07718a3b": "BankOwner_WithdrawDonations()", "0xeb1ff845": "changeId(uint256,uint256,uint256)", "0x1b83b823": "notifyPlayer(uint256)", "0x483a83df": "setKYC(address)", "0xf6b44d03": "validFactories()", "0xbbd4f854": "buyShares(bytes32,uint8,uint256,uint256)", "0x1ab06ee5": "set(uint256,uint256)", "0x7183616c": "notarize(string)", "0xa06db7dc": "gracePeriod()", "0x5b7d47a9": "betOnColor(bool,bool)", "0x6f698fb5": "setMinimumQuorum(uint256)", "0x75862df4": "TokenWithEStop(address)", "0x227185d6": "Send1Get2()", "0x0b811cb6": "executeProposal(uint256,bytes32)", "0x77fcb91d": "forward(address,bool)", "0xa02b9aac": "getPaymentDataByAddress(address)", "0x32254992": "getPrevHash(int256)", "0xf2ddc772": "confirm(bytes)", "0x08933d11": "getJoinBlock(address)", "0x4b0697e4": "Manager(address)", "0x5445e38c": "_isCycleValid(uint256)", "0x0ccec396": "getNumReleases()", "0x7ee65635": "LookAtDepositsToPlay()", "0xb5299ca6": "giveMeat()", "0xba45b0b8": "transfer(address,address)", "0x3a96fdd7": "compare(string,string)", "0x3ccfd60b": "withdraw()", "0x893d20e8": "getOwner()", "0xac767539": "testFailItemStoreNotRegistered()", "0xe465c465": "like(address)", "0x50a9eddb": "testControlSetNotUpdatableNotOwner()", "0xf0350c04": "transfer_ownership(address)", "0xc204505a": "testFailRetractLatestRevisionDoesntHaveAdditionalRevisions()", "0x1995333b": "burnFunds(uint256)", "0x2667f407": "__proxy(address,bytes)", "0x36f66528": "EtherDelta(address,uint256,uint256)", "0x3369dace": "flipTheCoinAndWin()", "0x938b5f32": "origin()", "0x43046844": "placeBet(uint8)", "0x749aa2d9": "endRound()", "0x22017c5f": "DSTokenBase(uint256)", "0xa96f8668": "releaseTokens()", "0x37b0574a": "isClassic()", "0x921f98bb": "resolveFailVote()", "0xfc2c3e08": "getIteration()", "0xfdd3a879": "quick()", "0x48db5f89": "player()", "0xdba1ac3d": "getEnforceRevisions(bytes20)", "0x4df53a0f": "testSetApprovalDb()", "0x550bcd8d": "testThrowUpdateLatestRevisionEnforceRevisions()", "0xc2a95cc9": "updateTrustSettings(address,uint256)", "0x5bec9e67": "infinite()", "0x1c0b6367": "processTransaction(bytes,uint256)", "0x3e450fff": "adminDeleteAccount()", "0x694e0d5b": "StringPasser(uint8[])", "0xd67cbec9": "release(uint32,uint32,uint32,bytes20)", "0x20620f37": "onAuctionEnd(string)", "0xd116c8c4": "releasePayment()", "0x776df027": "testFailDisownNotOwner()", "0xe6c1beb4": "prepend(address)", "0x02acdb44": "setAnyoneCanCall(address,bytes4,bool)", "0x82a62137": "activateAccount(address)", "0x144267e0": "refundSecurity(address,uint256,uint256)", "0x27f06fff": "requestFillUp(uint256)", "0xd263b7eb": "ownerkill()", "0x0eb3f5a0": "sweepCommission(uint256)", "0xed54746e": "lastAuction()", "0x4172d080": "tokenExchangeRate()", "0xf82c2301": "resignFromCommunity()", "0x1d49e081": "EXECUTE_EXTRA_GAS()", "0xe7e2aa0e": "buyer_cancel()", "0x28a45038": "testTryProxyCall()", "0x224993c2": "setTimeBlock(uint256)", "0xdd0d74ff": "IssueBank(address)", "0x7fd8ee68": "computeNameHashExt(bytes)", "0x04d10f1c": "isValidChainyJson(string)", "0xb719d1d0": "getRegInfo(address)", "0x9772c982": "scheduleCall(address,bytes4,bytes,uint256,uint256)", "0xd2756e11": "finalizeNumber(uint256)", "0xae152cf4": "oraclize_query(string,string,uint256)", "0x504ac982": "transfer(string,string)", "0x6cf761d4": "getMinConfirmationsByAddr(address)", "0xbac1e2e0": "testBitsAndSuccess()", "0x3e853128": "getGasForXau(address)", "0x90fa337d": "storeBlockWithFeeAndRecipient(bytes,int256,int256)", "0x4f8e624e": "Greeter(string)", "0xc2e9fab3": "SubUser()", "0x4b06fb28": "eatUnicornsAlive()", "0xe20056e6": "replaceOwner(address,address)", "0x88d695b2": "batchTransfer(address[],uint256[])", "0x248582b0": "receivePaymentForGoodsSoldEarly()", "0x6e1479c0": "testControlCreateNewRevisionNotOwner()", "0xb2ab530e": "testFailRetractLatestRevisionNotUpdatable()", "0x7a6e9df7": "getTimestamp(bytes)", "0x7648c929": "returnRemainingEther()", "0xa1a66e56": "deductFunds(uint256)", "0x6f9a5eab": "createTx(uint256,address,uint256)", "0x61b20d8c": "retrieveFunds()", "0xc7f758a8": "getProposal(uint256)", "0xb5931f7c": "safeDiv(uint256,uint256)", "0xe1376da2": "updateFirstActiveGamble(uint256)", "0x66d38203": "setup(address)", "0x96ff7e97": "requestIdentity()", "0x3f2885cb": "publish(string,string,address,bytes32)", "0x9d3e069c": "StartDraw()", "0x1209b1f6": "ticketPrice()", "0x23306ed6": "getMinimumBond()", "0x7c45ef6c": "stringToSig(string,string)", "0x85654c9c": "setMembershipRoster(address)", "0x5837e083": "move_history(uint256)", "0xdcff5581": "NewFeeAddress(address)", "0xce8b7151": "isHF()", "0xd591221f": "testTransfer()", "0xa06cab79": "Registrar(address,bytes32)", "0xc86a90fe": "sendCoin(uint256,address)", "0xf2a75fe4": "empty()", "0x74389991": "breakit()", "0xc5bf339c": "getLastNonPublished()", "0x8390b02a": "rfindPtr(uint256,uint256,uint256,uint256)", "0x152583de": "getAttributes()", "0xd7cc8362": "isLatestMajorTree(bytes32,bytes32)", "0x6ba0b4f2": "isKnownSelector(bytes4)", "0x775dec49": "keccak()", "0xee82ac5e": "getBlockHash(uint256)", "0xea2c23da": "createAccounts(uint256)", "0xa36c8ec2": "UpdateContractorAddress(address)", "0x72c3015c": "mint(int256,address,string)", "0x4316abbb": "newJester(address)", "0xdaa283c8": "__callback(bytes,string)", "0x2e6e504a": "trusteeWithdraw()", "0xe671f510": "onEtherandomExec(bytes32,bytes32,uint256)", "0x06909f69": "cancel(string,uint256)", "0x92d282c1": "Send()", "0xd22057a9": "register(bytes32,address)", "0x5af73f3f": "getMinimalBalance(uint256,address)", "0x996a8046": "__callback(bytes32,string,bool)", "0xb3ea3924": "PointlessCoin(int256,uint256,string,uint8,string,address)", "0x342b7e71": "setTokenList(address[])", "0x419945f8": "ExpiringMarket(uint256)", "0xf6232556": "Security_GetNumberOfAttemptsToConnectBankAccountToANewOwnerAddress()", "0x7d380265": "addOptionChain(uint256,string,uint256,uint256,bytes32,address,int256[])", "0x9a828a71": "oracalizeReading(uint256,string)", "0x4961b40c": "getReleaseValidator()", "0xfaa1a8ff": "getOwnedBot(address,uint256)", "0x21df0da7": "getToken()", "0xa3053236": "SafeInvestments()", "0x6103d915": "Winners(uint256)", "0x983b94fb": "finalizeAuction(bytes32)", "0x0b927666": "order(address,uint256,address,uint256,uint256,uint256)", "0x98b1e06a": "deposit(bytes)", "0xae30d35d": "ARK_TROGLOg_1_00()", "0xfc01abbe": "stringToBytes32(string,string)", "0x953aa435": "GetPrice(uint8)", "0x16870257": "getTileDescription(uint8,uint8)", "0x4cedf74e": "get_party1()", "0xdd79e33e": "splitIdentifiers(string)", "0xe30443bc": "setBalance(address,uint256)", "0xb0171fa4": "getCurrentGenerationId()", "0xfd747c0b": "rsaVerify(bytes,bytes,uint256,bytes)", "0x4b269a00": "withdraw(int256[])", "0x31757f2e": "collisionCount()", "0xad2fea7c": "removeMinter(int256,address)", "0x590e1ae3": "refund()", "0x5103a5a3": "certify(address,bytes32)", "0x4ed4831a": "all(bool[7])", "0xe854dfb4": "Order(address,uint256,uint256)", "0xacb6c69b": "setTrustedClient(address)", "0x4c8cc20b": "toContentID(address,string,string,address,uint256)", "0x44d75fa9": "updateMinorTree(bytes32)", "0xd7bb99ba": "contribute()", "0xac5e81a9": "historyPayout(address)", "0x0651844e": "activateBalance(address)", "0xea5ea470": "payFunding(uint256)", "0xd39eb301": "getStatus(uint8,uint8)", "0xef7507c8": "testWinner(uint256)", "0xb29b5366": "setRentable(bool)", "0xe5dd90a5": "HumanStandardToken(uint256,string,uint8,string)", "0x4166c1fd": "getElevation(uint8,uint8)", "0x8d68cf59": "sendFunds()", "0x8ed67a44": "setPrice(uint16)", "0x350fbe2e": "calcNextDrawTime()", "0xd18611d6": "reactivate()", "0xd500dd6a": "challengeTimeout(uint256,bool,address)", "0xe1f5ebc5": "_projectAddNew(address,uint256)", "0x918f1bb5": "ProjectKudos()", "0x4ca1fad8": "addRequest(uint256)", "0x7c3064f1": "refundStake()", "0x66aa6f26": "payFee(bytes)", "0x379607f5": "claim(uint256)", "0xefc81a8c": "create()", "0xac56c52b": "makeDealForTwo(string,uint256)", "0x8c88752a": "ContributorList(uint256)", "0xa10889fa": "setVersion(uint32,uint32,uint32,string,string)", "0x26745909": "PRNG_Challenge()", "0x19350aea": "nameFor(address)", "0x63e38ff3": "id_for_nym(uint256)", "0xfa8dc33a": "checkRecordExists(bytes)", "0x8d99b2eb": "endPoll()", "0xeef547d7": "deal_details(uint32)", "0x4ed3885e": "set(string)", "0x702fc7da": "ReviewModel()", "0x109df68e": "rotateBitsRight(bytes,uint256)", "0x99e9376c": "buyWithCustomerId(uint128)", "0xf239e528": "sendOneEtherHome()", "0x89b8b492": "read(uint64)", "0x42d16748": "getMinDailyWithdrawalLimit()", "0x64edfbf0": "purchase()", "0xdc19266f": "Total_of_Players()", "0x916dbc17": "getPlayersFromCompetition(string,uint8)", "0xfc687311": "betOn(int8)", "0x187a62d5": "voteEmergencyWithdrawal(bool)", "0xe02426c1": "getSignatureHash(bytes4,uint256)", "0xb7297cf3": "gameSettings()", "0x209a5b8a": "moneySumAtSettlement(address,uint256,int256,uint256)", "0x4f44728d": "ownerChangeOwner(address)", "0x66099706": "getChannelCred(address,uint256)", "0xefdecd9b": "check_withdrawdao()", "0xa0befa94": "getStake(uint256,uint256)", "0x43114842": "acceptChallenge(uint256,uint256,uint256)", "0x85dd2148": "getSaleDate(bytes16)", "0x4956eaf0": "deploy(address,uint256)", "0xb950556a": "setThingValid(bytes32[],bool)", "0x8c4dd5cd": "Democracy()", "0xb66a323c": "claimThrone(string)", "0xe8b5e51f": "invest()", "0x662dbe96": "getNodeHeight(bytes)", "0x26066ad5": "offer(uint256,bytes,uint256,bytes)", "0x8b9726c1": "multiAccessCallD(address,uint256,bytes,address)", "0x57a373a1": "uintInArray(uint256,uint256,int256,uint256[],uint256)", "0xa6b513ee": "finalPrice()", "0xe8930efd": "Investors(address)", "0xc494f71a": "LedgerFund(uint32,uint32,uint64,uint64)", "0xa54a2b8b": "testBlockHashFetch()", "0x7eb69ba1": "hint(int256,bytes32,string,bytes20)", "0x833b4596": "testApproveSetsAllowance()", "0x74d89c47": "testUpdateNameDb()", "0x5a3b7e42": "standard()", "0x9b29cb23": "getDailyPayment()", "0xf50d3914": "resetFoundationtList()", "0x9549355e": "oracalizeReading(uint256)", "0x5023d124": "TestFactory()", "0xea851885": "buyStake(bool)", "0x3ae9b510": "getLatestMajorTree(bytes32)", "0x25f3da52": "GetBankAccountNumber()", "0x267c8507": "authorizeManager(address)", "0xf06186c7": "testReality()", "0x0f23cbaa": "recycle()", "0x29161820": "Base(uint256)", "0x67387d6b": "testThrowCreateWithNonceExistingNonce()", "0xf597a499": "UserDatabase(uint256)", "0xec81e22e": "returnmoneycreator(uint8,uint256)", "0x1f0f711f": "discontinue()", "0x5c665f89": "getFunds(address,bool)", "0x157f8f51": "feePaid(int256,int256,int256,int256)", "0x05fefda7": "setPrices(uint256,uint256)", "0xec97cff7": "addCertificationDocument(address,bytes32)", "0x35cc59a9": "createSchema(bytes)", "0x46a1d95f": "closeMarket(bytes)", "0x266710ca": "manualUpdateBalances_only_Dev()", "0x8f1327c0": "getRound(uint256)", "0xd38d0f28": "updateSplit(uint256)", "0xf712d7ff": "testFailControllerTransferFromWithoutApproval()", "0x2aa3177a": "self_store()", "0x35ae41c9": "godAutomaticCollectFee()", "0x4671e65e": "proposeEmergencyWithdrawal(address)", "0xfff78f9c": "doThrow()", "0x9acade7e": "testFailTransferDisableNotEnabled()", "0xcdcd77c0": "baz(uint32,bool)", "0x674f220f": "previousOwner()", "0xc258ff74": "List()", "0xbade6033": "propose(bytes,uint256)", "0x7fdc8290": "isUnderscore(bytes1)", "0x5f6a1301": "clearPending()", "0xb9a0a708": "testChargesAmountApproved()", "0x5858ef10": "testErrorNonOwnerCantBreach()", "0x7c2e08a3": "isMinimumGoalReached()", "0xd393c871": "register(string,address,uint256)", "0x02394872": "getLastBlockHeight()", "0x7842a3a4": "payReward()", "0xc9d27afe": "vote(uint256,bool)", "0x0121b93f": "vote(uint256)", "0xb7538f3e": "ChangeClient(address)", "0xc3689f01": "testControlSetNotRetractableNotOwner()", "0x0afa9fb9": "contains(int256,address)", "0x5e58f141": "shares(address,bytes,int256)", "0xe4547f98": "documentExists(bytes)", "0xa6e16ba2": "testThrowsRetractLatestRevisionNotOwner()", "0xe0429b6c": "ShinySquirrels()", "0xd96aee49": "MultipleConstructorTest()", "0xd9fe60f3": "DTHPool(address,address,uint256,string,string,string)", "0x724121ae": "contentExists(uint256)", "0x36b81feb": "Deed(address)", "0xbbe42771": "closeDeed(uint256)", "0x20909fa0": "communityCurrency()", "0x26121ff0": "f()", "0x1c2353e1": "isCertifier(address)", "0x061e494f": "getBet(uint256)", "0xb3a2a6c0": "setOfficialWebsite(string)", "0xd7ccc2c3": "getLastPayment()", "0x0aece23c": "getFeeAmount(int256)", "0x010731c0": "sendCryptedHand(bytes32)", "0xa9f6def0": "HonestDice()", "0xa056469a": "extractFeeLength()", "0x0b590c6b": "SingularDTVToken()", "0xce5566c5": "cash(uint256,uint256)", "0xdfce8ac3": "fipsLegacyRegister(bytes20,address,bytes)", "0x49e347ae": "getContents(uint256[],uint256)", "0x39b35753": "authCancel(address)", "0xd1100691": "BookCafe()", "0xc01f9e37": "proposalDeadline(uint256)", "0x9f7f760c": "SimpleDice()", "0x5581004d": "createThrone(bytes,uint256,uint256,uint256,uint256)", "0xa6403636": "resolve(uint8,bytes32,bytes32,bytes32)", "0x5cbc85d0": "returnBounty(uint256)", "0xd10e99fe": "mint(int256,bytes32)", "0xe67cdfb7": "moveOldUser(uint256)", "0xacb6e9b1": "testControlItemStoreNotRegistered()", "0x421aeda6": "Set_your_game_number(string)", "0xd7f31eb9": "forward(address,uint256,bytes)", "0x8e2a6470": "allocateShares(address,uint256)", "0x1043dcdf": "LastIsMe(uint256,uint256)", "0x8435be4b": "getLastFarm(uint8,uint8)", "0x79cce1c5": "getReleaseHashes(uint256,uint256)", "0xc6ae3b57": "dEthereumlotteryNet(address,address)", "0x5944427b": "getRequestResult(uint256)", "0x3ef8ec78": "announce_numbers(uint8,uint8,uint8,uint8,uint32,bytes32)", "0x428d64bd": "getShares(address,bytes32[])", "0xfa566ddd": "doAllowance(address,address)", "0xcee6ee38": "aEthereumlotteryNet()", "0xf3d91708": "isEligibleForUpgrade(address)", "0x5ed7ca5b": "halt()", "0xe7334156": "processNextDeposit(address)", "0x85db2dda": "PayoutQueueSize()", "0x931df75f": "validateProposedThroneName(bytes)", "0xc1ae4044": "checkBetColor(uint8)", "0x3c21db0a": "theGames(uint256)", "0x46b04e53": "PlayerInfoPerZone(uint256,uint256)", "0x33ce7787": "transferInvestorAccount(address,address)", "0x50fe533b": "getLevitatingBirds(bytes32,uint64)", "0xbaac5300": "createTokenProxy(address)", "0x6e63015c": "getCertifiersCount()", "0xc89f8f08": "testGetController()", "0x14cabddb": "joinProof(uint256)", "0xface030b": "SpinTheWheel(address)", "0x4a2b0c38": "DividendProfit()", "0x8e25071a": "setProxyCurrator(address)", "0x0908178f": "NoFeePonzi()", "0x23cd7cd5": "Model()", "0xf29d2f28": "setTokenHolder(address)", "0x68e7bdba": "disableApi(address)", "0xdbbdf083": "register(uint256,address)", "0xea4af029": "ConferenceCertification()", "0x8da4d776": "newCommune(address)", "0xa9f8ec6c": "AlarmClockTipFaucet()", "0x3f887fad": "buyShares(uint256,uint8,uint256,uint256)", "0xdf06f906": "numBets()", "0x9babdad6": "removeShareholder(address)", "0xb1cc4348": "placeWager()", "0x2f30c6f6": "set(uint256,address)", "0x3e0a51b4": "TweetAccount()", "0x6fe5b536": "testFailSetEnforceRevisionsNotOwner()", "0x27d6c032": "unregister(bytes)", "0x1da0fb1b": "updateSettings(uint256,uint256,uint256,uint256,uint256,bool)", "0x49593f53": "submit(string,uint64,uint32,uint32,bytes32)", "0xa2e62045": "update()", "0xf6bd5893": "getGas(uint256)", "0x402d8883": "repay()", "0x5fbddcf3": "isLivingMonarch()", "0xbfad16f4": "new_offer(uint256,uint256)", "0xabf74a93": "pitFee()", "0x1aca00fd": "variable(uint256)", "0xfd408767": "fireEventLog4()", "0x3f3935d1": "confirmReverse(string)", "0x7057c20d": "CFD(address)", "0x5babb758": "testSetUp()", "0x4adcbd19": "isThisHardforkedVersion()", "0x55cc4e57": "setIssuer(address)", "0xb7c93330": "ResourcePoolTester()", "0xbbd8b602": "getOracleOutcomes(bytes,address[])", "0x79baa8a9": "BasicIncome_CoFund()", "0x5b764811": "_jMul(uint256,uint256,uint256,uint256)", "0xc8e7ca2e": "getMsgData()", "0x54738157": "OwnerCloseContract()", "0xc0a1a949": "x15()", "0x932db761": "profitsFromBitnationDebitCard()", "0x8089d001": "getHashOfBlock(uint256)", "0x1fb00cdc": "investWithId(uint128)", "0x98eaca94": "inKissBTC(uint256)", "0x4d536f9f": "validateNameExt(bytes)", "0x1a1df394": "Play(bool)", "0x9bee757b": "requestExecution(bytes,uint256)", "0xedb27f4e": "switchWizard(address)", "0xb56b2627": "add_owner(uint256,address)", "0x5c52c2f5": "resetSpentToday()", "0x8204ecdd": "getFee(bytes)", "0x6e2edf30": "ETCSurvey(address)", "0xdb37e42f": "multisetProofType(uint256[],address[])", "0x0c4f65bd": "getOwnerAddress()", "0x16f9ce49": "_slotCommitNew(address)", "0x528eedcb": "sendSafe(address,address,uint256)", "0x0c1fad51": "setSeedSourceA(address)", "0x98688a95": "Ai()", "0x547eeac1": "acceptTransfer()", "0xaaf73ef7": "registeredDeals()", "0xc0a239e3": "valuePerShare()", "0x83324e8c": "numGroups()", "0x3b143184": "Congress(uint256,uint256,int256,address)", "0xbc126ba1": "totalCents()", "0x1f794436": "getBlockHeader(int256)", "0xb7fba4d3": "getProxy(address)", "0xe6e91cfc": "voidFailedPayment(uint256)", "0xdcf537b1": "multiply7(int256)", "0x6716a692": "setDVIP(address)", "0x4c7f74df": "EtherDelta(address,address,address,uint256,uint256,uint256)", "0xa6c01cfd": "isInGeneration(uint256)", "0x5d268629": "Refund()", "0x4229616d": "collectPercentOfFees(uint256)", "0x75c589a0": "getMinimumCallCost()", "0xdbf45aa3": "EthBank()", "0x32b12eac": "setFallback(address)", "0x76ca0c77": "scheduleCall(address,bytes,uint256,bytes,uint256)", "0x1fb2f2a0": "testUpdateLatestRevision()", "0x2cce4abe": "_finishNoCallback()", "0x1840f0ca": "countVotes(uint256)", "0xc415b95c": "feeCollector()", "0x11fe773d": "memcpy(uint256,uint256,uint256)", "0x27e8c2d8": "burnUnicornShares()", "0xd1d80fdf": "setAddr(address)", "0x21e5383a": "addBalance(address,uint256)", "0x044f9ac8": "findThroneCalled(bytes)", "0x7a479160": "getRequestArgs(uint256)", "0x2afb21bc": "InvestWithdraw()", "0x8d7108e5": "isValidLocation(uint8,uint8,int8[5],int8[24])", "0x34c0d654": "setPackageDb(address)", "0x524f3889": "getPrice(string)", "0x9b0b9c07": "acceptBankDraft()", "0xf9391d24": "AllPayAuction()", "0x6e940a29": "changeHost(address)", "0x78524b2e": "halveMinQuorum()", "0xd04bfc9c": "buyer_pay()", "0xe7b48f74": "get(int256,address)", "0xb633620c": "getTimestamp(uint256)", "0x8f70ccf7": "setTrading(bool)", "0x09d2d0b9": "setServiceAccount(address,bool)", "0x6f9fb98a": "getContractBalance()", "0x166c4b85": "len(bytes32)", "0xa5e8c5d6": "setVoteRight(address,uint256)", "0x9c172f87": "EthVentures4()", "0xb75c7dc6": "revoke(bytes32)", "0x04bbc255": "isPricingStrategy()", "0x69953501": "setUtils(address)", "0x5aebfd14": "createFile(bytes)", "0xd38159b8": "testPass()", "0xe88b8ac6": "confirmAndCheck(bytes)", "0xf765088f": "UpdateClientAddress(address)", "0xaa497b9d": "scheduleCall(address,uint256,bytes,uint256,uint256,uint8)", "0xf76f950e": "uint2str(uint256)", "0x2ac9bf09": "bid(uint256,uint256,uint256)", "0x56b8c724": "transfer(address,uint256,string)", "0x6e67b803": "bid3(address,uint256[],uint256[])", "0x15e812ad": "getBaseFee()", "0xdf300b46": "getThing(bytes32[])", "0x3a314b24": "SendETH(address)", "0x60708ae3": "issueAndCommit(address,address,uint256,uint256)", "0x34b7ac9b": "END_MINTING()", "0xa6afd5fd": "getBets()", "0x0e1da6c3": "claimTimeout()", "0x19901f1d": "TokenSale(uint256,uint256)", "0x7dc5cd32": "_patternToNumber(bytes)", "0x8a00a82f": "withdrawRewardFor(address)", "0x9bb01b5f": "ElcoinDb(address)", "0x47c66140": "getProposalVotes(uint256)", "0x2ade6c36": "getNodeAddress(bytes32)", "0x2b1071c9": "testTransferToNullAuthority()", "0x5b6a54bc": "adjustTransactionFee(uint256)", "0x6423db34": "Reset()", "0xe0fe075e": "payoutReady()", "0xdabdc1f2": "ChangeActiveDigger(address)", "0xda9c6a46": "getReplyCount(uint256)", "0x7ed19af9": "multiAccessRevoke(bytes32)", "0x37ab8f20": "notifyPlayer(uint256,uint256,uint256,uint256)", "0x7adbf973": "setOracle(address)", "0xc47cf5de": "getAddress(bytes)", "0x780900dc": "create(uint256)", "0x715ef4ff": "resendFailedPayment(uint256)", "0xb78b52df": "allocate(address,uint256)", "0x30ccebb5": "getStatus(address)", "0xd1bf9aba": "nextRune()", "0x090637a1": "GetPart(bytes,uint256)", "0x99d1d002": "debug_blockHeaderMerkle(bytes)", "0xd1058e59": "claimAll()", "0x8173b813": "setNumCities(uint256,uint256)", "0x7eff1465": "setAccountAllowance(address,address,uint256)", "0x669dafe8": "toWei(uint256)", "0x2df8e00d": "becomeMortal(uint256)", "0xd81ab0c1": "invoke(uint256,address,address,bytes)", "0x65538c73": "fireEventLog0()", "0x76abc03b": "getShareDistribution(uint256)", "0xe0ad411d": "assets(bytes)", "0x6386c1c7": "getUserInfo(address)", "0x3c2e7d54": "priv_inMainChain__(int256,int256)", "0xf909d60d": "getMinimumGasLimit()", "0xe9794dc1": "CreateHash(uint8,string)", "0x699f200f": "addresses(bytes32)", "0x8af784dc": "expectEventsExact(address)", "0xb7a97a2b": "isValidChannel(uint256)", "0xe2b05077": "getSaleDate(bytes,uint256)", "0xacf4280c": "buildDSApprovalDB()", "0x938ae4cc": "testThrowDisownNotTransferable()", "0x650955d4": "HashToken()", "0x9d170c5d": "getRef(string)", "0x733480b7": "transferToICAP(bytes32,uint256)", "0x90b5561d": "insert(uint256)", "0x18489f50": "thingExist(bytes32[])", "0x5cd2f4d3": "approve(address,bytes32)", "0x45d27edf": "forward_method(bytes,address,uint256,bytes)", "0xda311588": "getCoin(uint256)", "0x1efb17ee": "changeHouseAddress(address)", "0xd44aadf7": "initROS()", "0x824dbc9a": "changeMembership(address,uint256,bool,string)", "0xe0117441": "setRegistrationPrice(uint256)", "0x89790192": "WithFee(address,uint256)", "0x23509e69": "donkeysEligibleForFees()", "0xba1162d7": "getFmLength()", "0x63aea3e0": "PlayerInfo(uint256)", "0x6663bbec": "orderMatch(uint256,uint256,int256,uint256,uint256,address,uint8,bytes,bytes,int256)", "0x7c4c27c8": "isThisPuritanicalVersion()", "0xf85aefba": "testBitsSetFailIndexOOB()", "0xc068eae0": "player_collect_winnings(uint256)", "0xfb6e155f": "availableVolume(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)", "0x013cf08b": "proposals(uint256)", "0xe116b17e": "getKudosLeftForProject(address,address)", "0xfb279ef3": "tip(uint256,address,uint256)", "0x73931bbf": "getGame(bytes32)", "0x8df554b3": "Dividend()", "0x6560a307": "suggestedGas()", "0xb774d3d7": "BankOwner_GetDonationsBalance()", "0xe2f8a017": "payInstallment(uint256)", "0xd56b2889": "finish()", "0xe44d3084": "testFailure()", "0x25010816": "get_length(uint256,uint256)", "0x3a9e7433": "scheduleCall(bytes4,uint256,uint256,uint8)", "0x2f0b15f6": "testGetUnset()", "0x5fcb568c": "release(string,uint32,uint32,uint32,string,string,string)", "0x4d366398": "runPeerBalance()", "0x8262fc7d": "addrBalance(address)", "0x901d7775": "voteOutMasterKey(address)", "0xcce81927": "EtherDice(address,address)", "0x9205fbc2": "testAuthorityAuth()", "0xa5f8cdbb": "buyTicket(address)", "0x44691f7e": "hasStarted()", "0x6a6d31db": "externalEnter()", "0x5c634241": "CanaryV6()", "0xf1e4a540": "unsetCoordinator()", "0x2ffb9e64": "updateGasForXaurData(uint256,uint256)", "0xa1add510": "hasRelation(bytes32,bytes32,address)", "0xea0a5237": "announce(string)", "0x0ae50a39": "GetOwner()", "0xb7dd1d17": "getAllRevisionBlockNumbers(bytes32)", "0x88c3ba85": "ParallelGambling()", "0x4788cabf": "getContractId()", "0x4c4aea87": "getReleaseData(bytes32)", "0x09b30ed5": "afterExecute(address)", "0x47b47102": "bakeCookie(string)", "0x69c8b344": "ownedToken(address)", "0x839930ba": "getMinimumBet()", "0x00a7d6b3": "checkTransferFromToICAP(address,bytes32,uint256)", "0xd6f42038": "PhoneToAddress()", "0xfab43cb1": "getPongAddress()", "0xbbdb31cb": "challenge(uint256,address,bool)", "0xfcce2622": "challengeAnswer(uint256,bytes)", "0x2f5a5c5b": "timegame()", "0x60585358": "getByte()", "0x384e5018": "etherandomCallbackAddress()", "0x034cb28e": "addressOf(address,bytes)", "0x538e0759": "refill()", "0x47f3d794": "configure(uint256,uint8,uint256,uint256,uint256,uint256)", "0x91e8d3dc": "testBitOrFailIndexOOB()", "0x60c311fd": "doBurnFromContract(address,uint256)", "0x1ff13086": "size(int256)", "0xe5bf93b9": "balanceEther(uint256)", "0x879d46fd": "DAOTrust(address,address,bytes,uint256,uint256,uint128)", "0x7a29332d": "buyAllOutcomes(uint256,uint256)", "0x27960c5f": "validateEndowment(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "0x31c2bd0b": "propose(address,bytes,uint256)", "0x69f18967": "testSetBitFailIndexOOB()", "0xa60bbcd3": "ModelCoordinator()", "0x05433a26": "GetNumbersFromHash(bytes)", "0x6d705ebb": "register(address,uint256)", "0x6a704d7b": "AddedToGeneration(address,uint256)", "0x38178fbe": "addString(string,string)", "0xc988d70f": "getDailyWithdrawLimit()", "0x934db458": "Big()", "0xd3aa831f": "testOwnedTryAuth()", "0x9da680f3": "adjustRegistrationFee(uint256)", "0x1b3a8e6f": "directionCount(int256,int256,int256,int256)", "0x7cc48875": "Slots()", "0xc976bbbb": "_compare(int256,bytes2,int256)", "0xc0eb2325": "scheduleTransaction(address,bytes,uint256)", "0xe548cf13": "betOnColumn(bool,bool,bool)", "0x0f2c9329": "split(address,address)", "0xf1736d86": "m_dailyLimit()", "0x179b73da": "killBoardProposal(uint256,address)", "0xab519020": "calcShare(uint256,uint256)", "0x62891b5d": "multiAccessChangeRequirement(uint256)", "0xafd8c8c4": "GasProxy(address,address)", "0x5216aeec": "totalInvested()", "0x45a3b0bf": "resolveFailPledge()", "0x4b5dc8cb": "roundMoneyDown3SFExt(uint256)", "0xb0bcc610": "scheduleTransaction(address)", "0x0ce3151c": "personUpdateRelation(uint256,string)", "0xf2080ba6": "Pong(int8)", "0x837e7cc6": "rollDice()", "0x640a4d0c": "_deposited(address,address,uint256)", "0x4cbee813": "logout(string)", "0xedca914c": "buyTicket()", "0xeb121e2f": "update(uint256,uint256[101][])", "0x54204ad4": "triple()", "0xcd2cdd5b": "claimOwnershi()", "0x85b4bb53": "getSettings()", "0x2b785960": "testBitAndSuccess()", "0xd81f53fd": "EtherId()", "0xafbec8df": "TheGrid()", "0xed64bea4": "JamCoin()", "0x65a4dfb3": "oraclize_query(uint256,string,string,string,uint256)", "0x038461ea": "getCertifiedStudentsCount()", "0xd5544f94": "getFundsAndAvailable(address)", "0x1865c57d": "getState()", "0x0af4626d": "testRetract()", "0x60213b88": "getInitialWithdrawal()", "0x3bc5de30": "getData()", "0xb11e3b82": "createEvent(bytes32,bool,int256,int256,uint8,address,address,bytes32[])", "0x580bdf3c": "disableBetting_only_Dev()", "0x9c1193ea": "GreeterA(bytes)", "0xda682aeb": "onApprove(address,address,uint256)", "0xb7d454a4": "setNotTransferable(bytes32)", "0x13651124": "WithdrawAmountFromBankAccount(uint256)", "0x172d8a30": "setDirectorLock(uint256,uint256)", "0x64d12ec6": "getRevisionIpfsHash(bytes20,uint256)", "0x6013aa44": "testControlCreateSameNonce()", "0x8b343e8f": "getMemberCredit(address)", "0x21462191": "bid3(address,uint8[],uint8[])", "0xd6febde8": "buy(uint256,uint256)", "0x3d90d44d": "addPowerSource(address,uint256,uint256)", "0x74f519db": "setLastTimestamp(uint256,uint256)", "0x0d8b5fa2": "testControllerValidTransferFrom()", "0x82381c96": "WatchCurrentMultiplier()", "0x4789aaef": "EthereumDice()", "0x2aee19c7": "testCreateWithNonce()", "0x2b68b9c6": "destruct()", "0x9cbf9e36": "createToken()", "0xa677fbd9": "example2Func()", "0xcd9f05b8": "balanceEtherAddress(address)", "0x656104f5": "_setOrganiser(address)", "0x5c3f9765": "endDateClose()", "0xa5d0bab1": "buyPartial(uint256,uint256)", "0x718e6302": "play(string)", "0x998446a8": "acceptRequest(uint256,bytes)", "0x6b76484e": "swap(address,address)", "0x9bb0e4df": "getUint(int256,bytes32,string)", "0x798974dd": "getNumProposals()", "0x2bffc7ed": "add(string,address)", "0x4464aec7": "testTryGet()", "0x6795dbcd": "getAddress(bytes32,string)", "0x4e116eb8": "unRegisterCertificationDb(address)", "0xa035b1fe": "price()", "0xeaa37394": "create(bytes,bytes32,bool,bool,bool,bool,bool)", "0x5ccc3eaa": "roundMoneyUpToWholeFinney(uint256)", "0x3fa4f245": "value()", "0x5bc7e259": "updateRelease(uint32,uint32,uint32,bytes,bool)", "0xf463edd1": "createDocument(uint256)", "0xbe26733c": "Kill()", "0x42cf0e72": "searchByOwner(address)", "0xb0aab296": "getNextNode(bytes)", "0x6f4dd69c": "testSetBalanceUpdatesSupply()", "0x7dee2cad": "CancelMyInvestment()", "0xb5f5962a": "CALL_GAS_CEILING(uint256)", "0x7266f4a4": "X3()", "0x76e4ca0d": "voteQuorum(uint256,bool)", "0x9b19251a": "whitelist(address)", "0x1917ab5c": "activate(string)", "0x6720ceb1": "sendPayment()", "0x74f8d96e": "getRevisionBlockNumber(bytes20,uint256)", "0xea295ec2": "calcRevenue(address)", "0xeef8e35f": "setChainyURL(string)", "0xbffbe61c": "node(address)", "0xb6509c12": "Ethereum_twelve_bagger()", "0x31ae0019": "KissBTC()", "0x752a3df6": "transferIfHardForked(address)", "0x90cb04e1": "buy(string,uint256,uint16)", "0xb122a0ef": "joinCommunity(uint256)", "0xbed411a0": "CheckPrize(address)", "0x1ff517ff": "totalDebt(address)", "0x08b7fa31": "PriceFeed()", "0x73b55eaf": "registerData(address,int256,bytes32,address)", "0xcabfb934": "replace(address)", "0x80ede329": "getDocumentDetails(uint256)", "0x8f70009d": "id_for_address(address,address)", "0x94bcdb4c": "Example2()", "0x3288eb0b": "ChineseCookies()", "0xb0ad38c4": "buildCity(string,uint256[2],uint256[2])", "0xddeae033": "claimFor(address)", "0xffb7bfba": "watchProposal(uint256)", "0xd30fbd0d": "safeSubtract(uint256,uint256)", "0x490825a9": "testControlTransferEnableNotTransferable()", "0x125b8f06": "isInNextGeneration()", "0x414053be": "best_adjustment_for(bool,uint128)", "0x185061da": "undoIt()", "0xf83d96c1": "InsuranceAgent()", "0x09405164": "getOpenCandidates()", "0x6662e4be": "isWinningBet(uint256)", "0xac996e7e": "resolvePledging()", "0x3a1a635e": "createNewRevision(bytes20,bytes32)", "0x3dd297da": "safeMultiply(uint256,uint256)", "0x4fcf8210": "eraseRecord(bytes32)", "0xebaf7f2f": "returnReward(uint256)", "0x67a09c23": "payment(address,uint256)", "0x7f0c949c": "setJurisdication(string)", "0x87287fd7": "setMinFee(uint8)", "0x1216e771": "expiration(uint64)", "0x6bf8f85a": "forceFinish()", "0x7fe1dc7e": "getToken(bytes)", "0xb6b55f25": "deposit(uint256)", "0x0fbf7151": "startsWith()", "0x9eab5253": "getMembers()", "0xfe777bcd": "etherForSale()", "0x21b36a08": "setFee(uint64,uint256)", "0xac6bc853": "startSpin()", "0x314e0fb6": "scheduleTransaction(address,bytes,uint256[3],uint256)", "0x1555e337": "ConferenceCertificate()", "0x216ef940": "proxyUpgrade(address,address,bytes)", "0xa3908e1b": "convert(uint256)", "0x00c721ab": "setHand(uint256)", "0x966acb38": "testThrowTransferNotTransferable()", "0x059a500c": "makeDeposit(uint256)", "0xb722a9ef": "getPreviousShareholder(address)", "0x0411bca8": "getChallengeAnswerResult(uint256)", "0x6a0e605f": "MyToken(uint256,string,uint8,string,address)", "0x1f4e996b": "challenge(bool)", "0x09a399a7": "personAdd(string,int256,int256,string)", "0x1a93fa4b": "reorganizeSubUsers()", "0x4d207d9a": "identify(address)", "0xe1c66292": "Create(uint32,address)", "0x750e443a": "voteAgainst(uint256)", "0x9eded57a": "paybackLast()", "0x6e50eb3f": "setEndsAt(uint256)", "0x04bb754c": "TradeFinancing()", "0xa3221c8e": "step8()", "0x4c6d1d9e": "checkOutTag(string)", "0x5d3278f0": "LooneyFifty()", "0xfb5d7376": "step4()", "0xef869443": "investWithCustomerId(address,uint128)", "0xf0586f0d": "doThrow(bool)", "0x93e84cd9": "play()", "0x77863b61": "CrossWhitehatWithdraw(uint256,address)", "0xe1725c92": "decimalPlaces()", "0xb81e43fc": "getEventName()", "0xeccf1b29": "CrystalDoubler()", "0xe49dcee9": "fixTokens()", "0x8d909ad9": "getSeedAndState(string,address)", "0x836e4158": "numOrdersOf(address)", "0xca0c1e62": "computeMerkle(int256,int256,int256[],int256,int256,int256[])", "0xf9983a12": "GetMyInvestmentBalance()", "0x24a852c6": "unset(bytes)", "0x5fd4b08a": "getName(address)", "0x33397816": "withdrawAccountBalance(address)", "0xbb6b4619": "SendETC(address)", "0x76196c88": "setDnsrr(bytes32,bytes)", "0x6da1833c": "getInstitutionByName(string)", "0x33637d5a": "getPendingBlock(uint256)", "0xc1246d39": "simulatePathwayFromBeneficiary()", "0xeb7c6f72": "step6()", "0x8b95ec0c": "testAddBalance()", "0x98391c94": "muteMe(bool)", "0x4dd850fb": "UfoPonzi()", "0x24fc65ed": "getId(uint256,uint256)", "0x13220305": "doTransferOther(address,address,address,uint256)", "0x217311ac": "getWords(uint64)", "0xc01706dd": "getContentByRank(address,uint256,uint256)", "0x257bcd6a": "placeBet(uint256,bytes32,bytes32)", "0x8e035ac1": "BetOnHashV82()", "0xfc94dd18": "verifyHumanStandardToken(address)", "0x1959a002": "userInfo(address)", "0xcac77df7": "__transferFromToICAPWithReference(address,bytes32,uint256,string)", "0x0a7493b4": "Etheropt(uint256,string,uint256,uint256,bytes,address,int256[])", "0x39aaba25": "get_status()", "0x550dd006": "calcCostsBuying(uint256,uint8,uint8,uint256)", "0x82a5285d": "getMinBetAmount()", "0x01984892": "name(address)", "0xab09ee80": "respond(uint256,uint256,uint256,uint256)", "0x2fac1a54": "newOrder(bool,uint256,uint256,uint256,uint256)", "0xd2d4bd72": "getCrossRate(bytes,bytes)", "0xbe6307c8": "getDraw(uint256)", "0x1a49803b": "investWithSignedAddress(address,uint128,uint8,bytes32,bytes32)", "0x61047ff4": "fibonacci(uint256)", "0x73f93a48": "getAccountContentTip(address,uint256)", "0x64e24f4b": "UpdateClientTokenAccount(address)", "0xa31d5580": "Registrar(address,bytes32,address)", "0x3b107682": "DualIndex()", "0xe63697c8": "withdraw(uint256,address,uint256)", "0x7140bdf3": "get_all_best_offers()", "0x407cfe5e": "get_all_players()", "0x414ceac0": "investorAddFee(uint256)", "0x4bbb216c": "_target(address)", "0xa7abc124": "activate(bool,bool)", "0x2043285d": "getMarketMakers()", "0x49c15bd9": "Purchase()", "0x13b2663b": "cash_received(string)", "0xf504e0da": "load_level(uint16)", "0x6981b5f4": "getLength(string)", "0xd8162db7": "lockedUntilBlock()", "0x5e68ac2c": "Kingdom(string,address,address,address,uint256,uint256,uint256,uint256,uint256)", "0x2f1927cb": "prepareRoll(uint256,uint256,uint256)", "0xc4b14e0b": "getSignature(bytes32)", "0x565a2e2c": "getBeneficiary()", "0x3ead67b5": "changeContractOwner(address)", "0x37881810": "setCallbackAddress(address)", "0x1cda37f2": "eraseRecords(bytes32)", "0x5404bbf7": "getEntropy()", "0xa9b8f7b8": "ProtectTheCastle()", "0x4847a79c": "_transfer(address,uint256)", "0x4974bc27": "download()", "0xd6c19fe0": "build(bytes,uint256,uint256,address)", "0xc89f2ce4": "funds()", "0x95d5a1be": "SignatureReg()", "0x19b05f49": "accept(uint256)", "0x5e968a49": "ownerSetMaxProfitAsPercentOfHouse(uint256)", "0xeebf9808": "PiggyBank()", "0xc0576b73": "monsters(uint256)", "0x0f24f5c8": "doTransfer(address,uint256)", "0x8e9ccd04": "computeIndexId(address,bytes)", "0x8cf4dbfb": "collectBalance()", "0x04d91c6a": "testFail()", "0xb0c80972": "setBalance(uint256,bool)", "0x29d017b5": "TestWithConstructor(address,uint256[])", "0xcb14d93b": "getHash(bytes,address,uint256)", "0x9a7a7c11": "makeRoll(uint256)", "0x84c344fe": "_register(bytes4,string)", "0x8a4068dd": "transfer()", "0xa1bdd146": "setEndorsement(address,uint256,uint256)", "0x531b97d7": "oneCentOfWei()", "0x8e3d4e5e": "Fibonacci(bytes)", "0xb6253539": "needsInitialization()", "0x6e0bd282": "destroy(bytes32)", "0x73e1743a": "buildDSBasicAuthority()", "0x19ea61db": "testFailTransferDisabled()", "0x0ab58ead": "SingularDTVFund()", "0xb0f07e44": "registerData()", "0xb6608467": "updateShares(uint256)", "0xb3ade772": "shipProducts(string,string)", "0x8efc777f": "isBeta(bytes)", "0xac35caee": "transferWithReference(address,uint256,string)", "0x5cb18a6d": "fipsLegacyRegisterMulti(bytes20[],address,bytes)", "0x788e26e7": "sponsorDeposit()", "0x1a092541": "getDescription()", "0x9a97043b": "depositIdx(address)", "0x670c884e": "setup(address,uint256,uint256,uint256,address)", "0x9e2262f5": "testCreateCostData()", "0xfb9a4595": "GitHubBounty()", "0xc52bd836": "setDappOwner(bytes32,address)", "0xff981099": "getVotes(uint256)", "0x2ca6d2c0": "getAccountSize(address)", "0x62c335c1": "checkCallback(address,uint256,bytes,bytes)", "0x7ff0346b": "getContents(bytes32[])", "0xdf5cc291": "get4(bytes,uint256)", "0x1099d3ec": "scheduleTransaction(uint256,uint256,uint256,bytes)", "0x8baced64": "isInPool(address)", "0x75c4aaa6": "addUnderDog(uint256)", "0x0a40f15f": "fundDeal(string,address)", "0xf00e8651": "createRequest(address[2],address,uint256[11],uint256,bytes)", "0xfaff50a8": "rootNode()", "0xa32f0f41": "testFailControllerUnapprovedTransferFrom()", "0x8b863095": "setContractorProposal(uint256,bytes)", "0xc1b056b0": "getNodeLeftChild(bytes)", "0xa0f029fc": "ContractorInterface(address,address,address)", "0xb2855b4f": "setFeeAddr(address)", "0x824d5603": "getIndex(uint16,uint16)", "0x9b9d0364": "_setFeeStructure(uint256,uint256,uint256)", "0x9bb5239a": "CheckPrize(address,uint256)", "0xf4aa1291": "withdrawFundsAdvanced(address,uint256,uint256)", "0xc7cf28fe": "canClaimTimeout()", "0xbc8fbbf8": "nuke()", "0x6b1781b6": "Emergency()", "0x80aed05f": "LooneyDice()", "0x49cbe338": "tryRead(uint64)", "0x3358d2d3": "buildDSTokenFrontend()", "0x1d834a1b": "insert(uint256,uint256)", "0x0db73c72": "noevent()", "0x313ce567": "decimals()", "0xe2fdcc17": "escrow()", "0x43d726d6": "close()", "0x9c851ebc": "new_entry()", "0x12819817": "setXauForGasCurrator(address)", "0xc9aa71b8": "getFlyingUnicorns(bytes32,uint64)", "0xa1c95ac2": "GSIToken(uint256,string,uint8,string,address)", "0x2c215998": "updateStatus(string)", "0x0b6fcdb0": "getEnforceRevisions(bytes32)", "0x7604b6d7": "testGetBlobStoreFromFullBlobId()", "0xc1b06513": "registerEvent(bytes32[])", "0x7c9cd7df": "changeDeveloper_only_Dev(address)", "0xe4360fc8": "getFileListElement(bytes)", "0x299a7bcc": "setOwner(address,address)", "0x4a3b0eec": "authorizeOpen(uint256,bool,string)", "0x4bc2a657": "setVoter(address)", "0xf09ea2a6": "offer(uint256,address,uint256,address)", "0x8a323b38": "Contract(uint256,string,uint8,string)", "0xf77a0923": "BitcoinProcessor(address)", "0x00a94b6e": "oraclize_query(uint256,string,string[5],uint256)", "0x5f09952e": "voteAllowTransactions(bool)", "0xf3dd3d8a": "newCurrency(string,string,uint8)", "0x901717d1": "one()", "0x02de2cf3": "isLatestPreReleaseTree(bytes32,bytes32)", "0xcea08621": "changeDailyLimit(uint256)", "0x86e4e178": "CheckTickets(address,uint256,uint256)", "0x3e476053": "moveFunds(address,uint256)", "0x7df23b6a": "ReleaseOracle(address[])", "0x91d8b14e": "BuyTickets()", "0x1c2f38ff": "paid(uint64)", "0x57f4d5ec": "processDividends(address,uint256)", "0xea3d508a": "selector()", "0xf1076703": "getVerificationId(address,bytes,bytes)", "0xb400d149": "betOnNumber(uint8)", "0x6c86888b": "testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address)", "0x5e983d08": "setPrices()", "0x777feff5": "getCertificationDbAtIndex(uint256)", "0x32d5fe98": "revealCampaign(uint256,uint256)", "0x83c51a38": "thesimplegame()", "0x9af8c4ba": "respond(uint256,address,bytes)", "0xbbed7177": "getContentTimestamp(uint256)", "0x622e88cb": "testBitsXorSuccess()", "0xb8d94b95": "buildDSNullMap()", "0x7b0383b2": "initializeDispute(uint256)", "0x29ef56b1": "getAskOrderBookStats()", "0xb7de47d3": "getIndex(uint256,uint256)", "0x3a76abff": "_eraseNode(uint256,bytes32[],bytes32)", "0xe9e7a667": "get_stake(bytes32)", "0x8396392d": "add(string,string,string,address)", "0xffe34512": "getNumChannels(address)", "0xf7c2b38c": "seconds_left()", "0x8757a2cd": "test_depth(uint256,uint256)", "0x6510ef4d": "oraclize_query(uint256,string,string[5])", "0x92698814": "reserved(bytes32)", "0x1f903037": "getBytes32()", "0xc8e49707": "activateExportFee(address)", "0xd42bf301": "doTriggerTryAuth()", "0xc8edf65e": "GetAndReduceFeesByFraction(uint256)", "0x3121369d": "validateRequiredStackDepth(uint256)", "0x53770f9a": "isStateless()", "0x4123cb6b": "m_numOwners()", "0x9507d39a": "get(uint256)", "0x3e58c58c": "send(address)", "0xb028ee13": "s2b(string)", "0xf697a0ed": "ppb(uint256,uint256)", "0x1ce624d6": "Crypted_RPS()", "0x5cff876b": "carrotsCaught()", "0x21a49ec2": "LCoin()", "0x163aba3c": "getQueryFee()", "0xad544dcb": "testSetNotUpdatable()", "0xad8d5f48": "exec(address,bytes,uint256)", "0xee95feaf": "isSeller(address)", "0xff1f7046": "requiresAuction(string)", "0xd7fa1007": "setHash(bytes32,bytes32)", "0xabe9f569": "oraclize_getPrice(string,uint256)", "0xd0c24e93": "setNotUpdatable(bytes20)", "0xbd66528a": "claim(bytes32)", "0x4b729aff": "buyNumber(uint256)", "0x477801b1": "getLastRoundResults_by_index(uint256)", "0xd05c78da": "safeMul(uint256,uint256)", "0x2cd78450": "activateExportFeeChargeRecord(address)", "0x726ab4ef": "getParentHash(bytes)", "0xd40a71fb": "step1()", "0xe2faf044": "createDAO(address,uint256,uint256,uint256)", "0x5a09f2f4": "setHouseFee(uint256)", "0x30cfac6c": "assignTo(uint256,address,uint256)", "0x776d62f6": "costs()", "0xae9a0785": "getChannelPostCount(address)", "0x576eac66": "setFundingGoal(uint256)", "0xf77c4791": "controller()", "0x6e173a7f": "storeBlockHeader(bytes,bytes)", "0x86723215": "createMarket(bytes,uint256,uint256,address)", "0xd6960697": "confirmPurchase()", "0x1b7db340": "sysAdmin()", "0x514dcfe3": "seller_accept()", "0xac8d6030": "removeRequest(address)", "0x51560da9": "topDogInfo()", "0xf00acc47": "prepareRoll(uint256,uint256)", "0x5c89c10d": "setBannedCycles(uint256[])", "0xc5ae6e0e": "Kernal()", "0x97950740": "roomForBirth()", "0x0220a5b4": "terminate(string)", "0x3edd90e7": "NewOwner(address)", "0x3df4ddf4": "first()", "0x13d1aa2e": "f(uint256,uint256)", "0xdf98ef33": "getResource(bytes,uint256,bytes)", "0xa587da29": "setPackage(bytes,uint8,uint8,uint8,bytes)", "0x7a791524": "setNextFeePercentage(uint8)", "0xba4c206e": "removeCertificationDocumentInternal(address,bytes32)", "0xf9e84395": "unexempt(address)", "0x61649472": "getPoolFreezePeriod()", "0xf4d94699": "EndowmentRetriever()", "0x8d59cc02": "register(address,string,string)", "0xa00ce377": "getIsContractValid()", "0xfb47a067": "_getRevisionBlockNumber(bytes20,uint256)", "0x22057bc7": "getAllRevisionBlockNumbers(bytes20)", "0xe0b1cccb": "updateBalance(address,uint256)", "0xba15e52e": "getInfo(bytes20)", "0xb189ad2a": "testErrorUnauthorizedAfterTransfer()", "0x602acca1": "InchainICO(address[],uint256)", "0x640f244b": "findSuitableGen()", "0x7137ed47": "setProxyContract(address)", "0x54385526": "setStatus(uint8,uint8,string)", "0x632f0ba6": "descriptionHashes(bytes)", "0x68f2ab8e": "Currency(string,string)", "0x67f809e9": "DynamicPyramid()", "0x420ef2b3": "TargetHash()", "0xdce293a7": "minLength(uint256)", "0x938199a5": "getDateOfLastPayment()", "0x43b0e8df": "set(uint256,uint256,uint256)", "0x2d67bb91": "World()", "0xf7bd2361": "LookAtBalance()", "0xb3cb8885": "nextUnderdogPayout()", "0x0ee79fb3": "closeReferendums()", "0xc6e1c178": "TheLuckyOne(bytes)", "0xfe05e8b1": "assertFact(uint256,string)", "0xd8c90762": "addTrustedIssuer(address,string)", "0xd0315658": "getShareDistributionWithTimestamp(bytes)", "0x674cc1f5": "getMarketHashes(bytes32[])", "0xcffee328": "successfulDeals()", "0xa87d942c": "getCount()", "0x46f0975a": "signers()", "0x22686250": "index(int256,uint256)", "0x338a1379": "_setPackedBlockNumber(bytes20,uint256)", "0x70c9edb7": "BTCRelayTools(address)", "0x8f4fb958": "calculateRandomNumberByBlockhash(uint256,address)", "0x6896fabf": "getAccountBalance()", "0x41524433": "sellKissBTCWithCallback(uint256,address,uint256)", "0x49041903": "getGame(uint64)", "0xe8580dd4": "Survey(address,uint256,string,bytes32[])", "0x31e3e2fe": "WithDraw()", "0x95d89b41": "symbol()", "0xf739ed4c": "id_for_user_version(uint256,uint256)", "0x399fdb86": "testFailNormalWhitelistReset()", "0xe7d50e5c": "FarmShare()", "0xda2b7416": "testBitsAndFailIndexOOB()", "0x13137731": "testThrowsUpdateLatestRevisionNotUpdatable()", "0x3c67c51e": "testLogs()", "0x30fd300f": "registerBytes32(address,bytes32)", "0xa21174bb": "DefaultReverseResolver(address)", "0xb9f256cd": "newProposalInEther(address,uint256,string,bytes)", "0x305075db": "NormalizeRanks()", "0x65c72840": "getDay(uint256)", "0xd7c23572": "historyTimesPlayed(address)", "0x33b85b73": "modifyCommunityRates(uint256,uint256,uint256,uint256,uint256,bool,uint256,uint256,uint256)", "0x6b9f96ea": "flush()", "0xf1448e10": "requestExecution(bytes)", "0x78f0161a": "setGreyGreenPrice(uint8)", "0xac562666": "freezeCoin()", "0x9c67f06f": "registryStarted()", "0x447cd682": "scheduleTransaction(address,uint256)", "0x67af1c81": "getRoundIndex()", "0xf869b11a": "declareVictor(uint256,uint256)", "0xf9e27106": "investmentEntryCost()", "0x4054f5de": "EthVentures3()", "0x9ec32d45": "challengeWinningOutcome(bytes,uint16)", "0x89abeb19": "ProcessGameExt(uint256)", "0xb1e9292f": "min256(uint256,uint256)", "0xa81c3bdf": "ethFundDeposit()", "0x3d79d1c8": "bal()", "0xbcca1fd3": "changeVotingRules(uint256,uint256,int256)", "0x67dd74ca": "buyTicket(uint256)", "0xe17e1274": "testTransferToRejectAuthority()", "0xd767aee0": "bbb()", "0x83cd5e13": "debug_multiplehash(uint256,uint256)", "0x4d1f8c31": "owner(uint64)", "0x1982ed58": "ChangeReuseCashInHarware(bool,uint16,uint16)", "0x1df473bc": "newContract(bytes)", "0xf3c37bd5": "Verifier(address,uint256,uint8)", "0x378c0605": "buyTickets(address)", "0x7429c086": "repeat()", "0x9832ee65": "resultsWeightedByTokens()", "0x4cad42d3": "testWager()", "0x6cc5fdaa": "setBytes32(bytes,bytes)", "0x6f3a7561": "SimpleAuction(address)", "0x9eee85fe": "bookEarnings(address,uint256)", "0x6b64c769": "startAuction()", "0xb742398b": "trade(address,uint256,bytes,address,uint256,bytes)", "0x6fc9d5e4": "changeCompareTo(uint256)", "0x81064e2d": "getCreditorAmounts()", "0x6b3fdc5a": "oraclize_setNetwork(uint8)", "0x784547a7": "isConfirmed(uint256)", "0x00b5b223": "computeResponse(uint256,uint16)", "0x734d8287": "unclaimedFees()", "0xafc4a982": "PathCost(uint16,uint32)", "0xb0fd935b": "registerCertificationDb(address)", "0xb2310cc5": "payRequstedSum(uint256,uint256)", "0x0f4cf692": "numMessages()", "0xf5f6ea26": "EthOne()", "0x089e0ad0": "buildDSMap()", "0x60b1e173": "getProof(uint256,address,address)", "0x7b352962": "isFinished()", "0x434cb64c": "startNextGeneration()", "0x044215c6": "token(uint256)", "0xcaa648b4": "getTotalValue()", "0x6dd7d8ea": "vote(address)", "0x0df71602": "setWinner(uint256)", "0x5598c576": "reveal_move(bytes32,uint8,bytes32,bytes32)", "0x20d8741f": "Feed()", "0x5dcdddd1": "testSafeToAddFix()", "0xaff21c65": "getMinimumEndowment(uint256)", "0xac18de43": "removeManager(address)", "0x053c351b": "oraclize_getPrice(string)", "0x3f19d043": "getContributions(address)", "0xceeafd9d": "withdrawFundsAdvancedRP(address,uint256,uint256)", "0xfe72e717": "toDie(bytes)", "0x6d052f56": "testBitsSetSuccess()", "0x6ec3af26": "addTrustedIssuer(address,bytes)", "0x42bf4431": "orderMatchTest(uint256,uint256,uint256,int256,uint256,uint256,address,address,int256)", "0x4dc415de": "reject()", "0xbd5dec98": "withdraw(address[])", "0xf7a0fa0a": "getShareDistribution(bytes)", "0xe53e04a5": "refillGas()", "0x693ec85e": "get(string)", "0x9644fcbd": "changeMembership(address,bool,string)", "0x4247f52d": "DoRoll()", "0xf55b23c0": "externalLeave()", "0x52200a13": "getNumHolders(uint256)", "0x42c69566": "get_address(address,string)", "0x59dac714": "hashTo256(bytes)", "0x1ed24195": "getPeriod()", "0xf8b11853": "getGenerationStartAt(uint256)", "0x202d6eaf": "addInvestorsValue(uint256)", "0x2431f164": "process_payment()", "0x5ae5df8f": "deleteRef(string)", "0x858c7559": "chainIDSeed()", "0x8c98117c": "getBill(uint256,uint256)", "0x7824407f": "tokenSupply()", "0x475a9fa9": "issueTokens(address,uint256)", "0x4a606c53": "_db()", "0xad5c613d": "purchase(bytes)", "0x727089f1": "extractAllowanceLength()", "0x11cd98ed": "convertToAllTable(uint256,string)", "0x21958a50": "AddressSeries(address)", "0x47799da8": "last()", "0x0d7af726": "addGame(address,string,string)", "0x57d4021b": "nextPayoutWhenPyramidBalanceTotalsApproximately()", "0xa49d53a1": "SmartRevshare()", "0xd7f746ce": "tickingBomb()", "0x7eaef50c": "over()", "0xa20495d3": "Managed()", "0xf2b904c3": "checkBetColumn(uint8,address,bytes32,bytes32)", "0x8112821f": "EthVentures()", "0x677cee54": "SafeConditionalHFTransfer()", "0x75090ebf": "changeDomain(uint256,uint256,uint256,address)", "0x432ced04": "reserve(bytes32)", "0x83876bc9": "newProposalInWei(address,uint256,string,bytes)", "0x75160a20": "pay_royalties()", "0x85f8c16d": "claimHours(int256)", "0x47e7ef24": "deposit(address,uint256)", "0x55b62dcf": "getThresold(uint256)", "0xc0ee0b8a": "tokenFallback(address,uint256,bytes)", "0xf4bbfd6a": "scheduleCall(bytes,bytes)", "0x4a7b26ec": "join_game(uint256)", "0x03251a08": "setMin(uint256,uint256)", "0x98a29a58": "testControlDisownNotTransferable()", "0x0da3e613": "EthFactory()", "0x5025b9ae": "expire(uint256,uint256,uint8,bytes,bytes,bytes)", "0x10f41715": "updateMintingData(uint256,uint256)", "0xe80bd3e5": "addCertificationDocumentToSelf(bytes32)", "0x5714f6a1": "getTotalAvailableRelays()", "0x224ccc49": "chainLastMessageHash(bytes32)", "0xecb70fb7": "hasEnded()", "0x46a2679a": "getSubpotsCount(uint256)", "0x3f9b250a": "getDocument(uint256)", "0xc28bfe5a": "testFailCreateSameIpfsHashAndNonce()", "0xdf6c13c3": "getMinFunding()", "0x1dda5c7d": "testFailSubBalanceBelowZero()", "0x23e9c216": "setBounty(address,string,uint256)", "0x0900f010": "upgrade(address)", "0x953307d8": "revealScissors(string)", "0xeb7cdb56": "rankDown(uint256,uint256)", "0x135217e7": "requires_depth()", "0x213ac932": "addUser(address,uint256,uint8,bytes32,bytes32)", "0x75cb2672": "configure(address)", "0x9555a942": "withdrawFrom(address,address,uint256)", "0x4f39ca59": "drop(bytes32)", "0xc74e907b": "commit(address,uint256,uint256)", "0x9b5fde7d": "payOut(uint256,string)", "0x2bb685bc": "kill2()", "0xe26c8434": "AdminStartDraw(string,bytes)", "0xf2022905": "toldYouItWouldWork()", "0xc0b4fa6d": "_reward(address[])", "0xb51c4f96": "getCodeSize(address)", "0x12511c14": "transferEnable(bytes20)", "0xd3017193": "addUser(address,uint256)", "0x14918f5e": "performInitialWithdrawal()", "0x9fcbc738": "setIntermediate(address)", "0xcec95aa1": "getReleaseHashForPackage(string,uint256)", "0x244fcd03": "removeRelease(bytes32,string)", "0xef3a6031": "testBaseToken()", "0x92ba4ba6": "GridMember(string,uint256,bool,address,address)", "0xc4ff3614": "Wallet(address[],uint256,uint256)", "0x6f6c0244": "generateShortLink()", "0x3177029f": "approveAndCall(address,uint256)", "0x35d79fad": "CertificationDb(address,uint256,address)", "0x245a6f74": "isProxyLegit(address)", "0xe8beef5b": "fireEventLog3Anonym()", "0xa87e7552": "isValid(bytes,bytes)", "0x51fdaf92": "checkExpiredfunds()", "0x83eed3d5": "queryN(uint256,string,bytes)", "0xf28386bf": "Nexium()", "0x070a888f": "updateRewardDuration(uint256)", "0x3570c2ee": "PosRewards()", "0xd9d2d058": "Splitter()", "0x769dc523": "GetCategoryNumber(bytes4)", "0x0a90c704": "createCommunity(string,string,string,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool,uint256,uint256,uint256)", "0x82fbdc9c": "register(bytes)", "0x91060168": "fetchString(address,bytes4,bytes32)", "0xe05e3028": "getCommunityManagement(uint256)", "0xc71cbcf3": "recoverAccount(address,address)", "0x48a0d754": "available()", "0x240ecad5": "transferViaProxy(address,address,uint256)", "0x1768b436": "ETCSurvey()", "0x29dfdded": "addNewDonkey(address)", "0xc233e870": "isLatestPatchTree(bytes32,bytes32)", "0x845051d3": "testContractsNotNull()", "0x77ceded8": "mintGrey(int256,address,uint256)", "0x69569a51": "setFrontend(address)", "0x5fe22c8b": "testFailTransferWithoutApproval()", "0x3fda1281": "get_keys()", "0xbbba3333": "safer_ecrecover(bytes32,uint8,bytes32,bytes32)", "0x9bdd7cdb": "forceRelease(bytes32)", "0x57aee888": "_eraseNodeHierarchy(uint256,bytes32[],bytes32)", "0x5e431709": "sealedBids(address,bytes32)", "0x38fff2d0": "getPoolId()", "0x50c42921": "replicate()", "0x0f5a5466": "claimWithResolver(address,address)", "0x44dd4b3b": "lookupGeneration(uint256)", "0x6f0cfab6": "DNSResolver()", "0x8b147245": "update(bytes32)", "0x5020dcf4": "convertToEach(uint256,string,uint256)", "0xd35ada32": "addParticipant(address,address)", "0xb245fc92": "findNextMonth(uint256,bytes)", "0xe771066f": "marriageProof(bytes)", "0xf4b103d4": "SimpleStorage(uint256)", "0xa1e4d3c2": "MembershipRoster()", "0x48c54b9d": "claimTokens()", "0x60fd902c": "gnosisToken()", "0x75f45878": "scheduleCall(bytes,bytes,uint256)", "0x089d5c4a": "repr()", "0x9559225c": "debug_hash3Byte(bytes)", "0x4c4766e8": "KittenRegistry()", "0x3b3b57de": "addr(bytes32)", "0x92d8c8cf": "setupImportFee(address,uint256)", "0x22b0f6ee": "getStatusOfPayout(uint256)", "0xfa68b4ce": "lookupISO3116_1_alpha_3(bytes)", "0xbcfcb03e": "allocateFounderTokens()", "0x71e60fe6": "testFailTransferEnableNotTransferable()", "0xac04f5a7": "append(address)", "0x04b07a5e": "removeUpdater(address)", "0x52375093": "m_lastDay()", "0x39246d75": "VersionModel()", "0xa08b3367": "EC()", "0xa8abe69a": "getTransactionIds(uint256,uint256,bool,bool)", "0xa5982885": "assertFalse(bool)", "0x092b25e9": "setOwner(string,address)", "0x23637e60": "votePrice(uint256,bool)", "0xb6ed0632": "cancelOrder(uint256,uint256)", "0xf2c298be": "register(string)", "0x40a49a96": "searchSmallestInvestor()", "0x252786e4": "WatchBlockSizeInEther()", "0x23584a21": "initStats(string,address,uint256)", "0x4f20f35a": "payExpenses(address,uint256)", "0x975289fd": "getPriceVolume(uint256)", "0x058d7433": "setAlliesContract(address)", "0xedede601": "testBalance()", "0xce88b145": "getAccount(uint256)", "0x3290ce29": "purchaseTokens()", "0xb71c47a2": "surrender()", "0xa16c6a73": "setClaim(uint256,uint256)", "0xc37e8cb2": "testExportAuthorized()", "0x89d59ee5": "createPersonalDepositAddress()", "0xc0463711": "lastUpdate()", "0xf6b4dfb4": "contractAddress()", "0x531c1b33": "getOperatingBudget()", "0xa39a45b7": "replaceOwner(address)", "0x6c050eae": "look()", "0xddbbc35c": "searchByName(string)", "0x38cde380": "changeWeight(uint256)", "0xbb6a1427": "testThrowRestartEnforceRevisions()", "0x4b70cec4": "getTime(address)", "0xc631b292": "closeVoting()", "0x35b28153": "addAuthorization(address)", "0x6c9c2faf": "getSupply()", "0xc98031be": "hintURL(int256,bytes32,string)", "0x837a7ba5": "testThrowTransferDisabled()", "0xb03260be": "scheduleTransaction(uint256,address,bytes)", "0x62ea82db": "bids(address)", "0x3133f2a7": "outstandingBalance()", "0x617f8666": "testFailRestartNotOwner()", "0x8d227fc0": "getPeriodInfo()", "0x79ba5097": "acceptOwnership()", "0x9f8a13d7": "isActive(address)", "0xd6006e88": "send(address[],uint256[],uint256)", "0xf5bade66": "setDeposit(uint256)", "0x7b48ba20": "testThrowDisownNotOwner()", "0xc08dd1dc": "IOU(string,string,uint8)", "0xe1a27ad3": "needsAdministration()", "0xc83be888": "single_move(uint256,uint8,uint8)", "0x1f1f5e76": "addValueToContribution(uint256)", "0x8b859409": "setRelease(bytes32,bytes32,string)", "0x107b1f8c": "debug_verifyShare(bytes,uint256[],uint256[],bytes,uint256,uint256)", "0x46be96c3": "amountFilled(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)", "0x1fa03a2b": "isApprovedFor(address,address)", "0x85b73d3c": "testCreateNewRevision()", "0x775a8f5e": "toBytes(uint256)", "0x2ca15122": "sign()", "0xcf09e6e1": "SetBigContract(address)", "0x299ed37a": "emergencyCall()", "0x24d7806c": "isAdmin(address)", "0xd9597016": "multisetCustomGasPrice(uint256[],address[])", "0x150ad2a8": "owner_transfer_ownership(address)", "0xd5d09021": "isCrowdsaleFull()", "0xe8f6bc2e": "changeAccountLevelsAddr(address)", "0x6a226a49": "addMessage(string)", "0x3bf2313d": "__transferToICAPWithReference(bytes32,uint256,string)", "0xbf8c50ff": "scheduleTransaction()", "0x2e817963": "set_sdl(address)", "0x0f3d7c3e": "release(string,uint32[3],string,string,string)", "0xcc8af0fe": "bytesToUInt(bytes,bytes)", "0x67854643": "getGenerationMemberLength(uint256)", "0xf41017fc": "finalize(uint24)", "0x0a80ef45": "getIsClosed()", "0x62c99e84": "_Approval(address,address,bytes32)", "0x64ac2c4a": "WavesPresale()", "0x0f06670a": "didWin(bytes32)", "0xe87df70e": "fivetimes()", "0xc003b082": "getMyPlayerID()", "0xc9296d14": "scheduleTransaction(address,uint256,uint256,uint256,bytes)", "0x6c1a5b8c": "TOKEN_TARGET()", "0xc813c30e": "testThrowSomething()", "0x1cbd0519": "accountLevel(address)", "0x5b37e150": "create(bytes32,bytes)", "0xd9f8a4e2": "calcCurrentTokenPrice()", "0x33232609": "blake2b(uint64[],uint64[],uint64)", "0xb0166b04": "testTransferringMkr()", "0x2fa00e58": "fipsTransfer(bytes20,address)", "0x91cd242d": "setMeta(bytes32,bytes32,bytes32)", "0x9f489e4e": "getDeposit(uint256,address)", "0x1caba41f": "decimalUnits()", "0x87393bc6": "verifyFirstHalf(uint256[4],uint256[4])", "0xc06c4474": "get_burned(bytes32)", "0x82afd23b": "isActive(uint256)", "0x1f9ea25d": "_setDepositAccount(address)", "0xec6afc22": "oraclize_query(uint256,string,string[3])", "0x6e353a1d": "emergencyWithdrawal(address)", "0x835b42fc": "testThrowUpdateLatestRevisionNotUpdatable()", "0xda3c300d": "currentFee()", "0xdbc45228": "newProposal(address,uint256,bytes,bytes)", "0xd24ddcfe": "buyKissBTC()", "0xc0d061f4": "execute(address,uint256,bytes32)", "0xf0f967e8": "canCall(address,address,bytes)", "0x33893071": "checkMyWithdraw(address)", "0xbe0638e4": "WealthShare()", "0x67af26fb": "transferOtherFrom(address,address,address,uint256)", "0x7055060f": "bulkStoreHeader(bytes)", "0xb1d05422": "SendEmail(string,string)", "0x43bf718e": "getHashOfTheProposalDocument()", "0xe10e274a": "CrazyEarning()", "0x5a28340a": "accessOperatingBudget(uint256)", "0xf509b627": "confirm(address,uint224,uint32,address)", "0xde640e19": "Investment(uint256)", "0x4378a6e3": "getAttributes(uint256)", "0x052b81c7": "releaseBadges()", "0x1e9a6950": "redeem(address,uint256)", "0x89495172": "convictFinal(uint256,uint256)", "0xd7504385": "validateToAddress(address)", "0x6545bed3": "Dice(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "0x44e43cb8": "depositRevenue()", "0xf747a5eb": "auctionBid(bytes32)", "0x27cca148": "lastClaimedBlock()", "0xcebb8bb0": "testControlRestartEnforceRevisions()", "0xc0f5a9cb": "deleteThing(bytes32[])", "0xddca3f43": "fee()", "0xfa6d373c": "LeaderHash()", "0x1003e2d2": "add(uint256)", "0xe21608be": "ReserveToken()", "0x09574810": "getOperationsNumber()", "0x12065fe0": "getBalance()", "0x0d48e8d0": "doBalance()", "0x6835f32c": "build(bytes)", "0x3e4c0c82": "player_1(uint256)", "0xe2894a8a": "OwnerAnnounce(string)", "0x40b31937": "pledgeDecline(uint256)", "0x524e4e61": "testDistribution()", "0x2fe9541f": "addIssueBounty(string,uint256)", "0x5168afa4": "getPackageHash(bytes,uint8,uint8,uint8)", "0x119aa5c8": "checkForward(bytes)", "0xa1188e56": "getCurrentDifficulty()", "0x21856b36": "interestOwed()", "0xe344606b": "hashtagCommission()", "0x85eddeea": "setReward(address[],uint256[])", "0x7e3faec1": "GoldTxFeePool(address,address,bytes)", "0x4b031d0f": "shortSellShares(bytes,uint8,uint256,uint256)", "0x4a393149": "onTransfer(address,address,uint256)", "0xf6d5959b": "getActionStatus(uint256)", "0x61ba3377": "WatchLastTime()", "0x880cdc31": "updateOwner(address)", "0x1baaeb91": "getSignature(bytes4,uint256)", "0x48d9614d": "GetFee()", "0x4b0bbf84": "addEntropy()", "0x40c0bcb9": "checkBetNumber(uint8,address,bytes32,bytes32)", "0x91b43d13": "fundingEndBlock()", "0xc88cc6ac": "getCertification(address)", "0x82771c8e": "isSane()", "0x9b2ea4bd": "setAddress(string,address)", "0xeece1e1f": "scheduleShuffling()", "0x20bfec70": "WatchFees()", "0xc03e382f": "calculateShare()", "0x245a03ec": "scheduleSetIt(uint256,uint256)", "0x354b2735": "testDeploy()", "0xdacaeb07": "pledge(bool,uint256)", "0x55a373d6": "tokenContract()", "0xf0da84f8": "getTransferable(bytes32)", "0x981a60f5": "extractNameFromData(bytes)", "0xbaf00f76": "removeAllSubUsers()", "0x7065cb48": "addOwner(address)", "0xdb833e3a": "sellShares(bytes32,uint8,uint256,uint256)", "0x4c33fe94": "cancel(address)", "0x20ea8d86": "revokeConfirmation(uint256)", "0x94f60a63": "getKudosLeft(address)", "0xc1257bad": "testPassingAProposal()", "0xfae14192": "changeFeePercentage(uint256)", "0x0e97cfdf": "placeOrder(uint256,uint256,uint256)", "0x002a5cc9": "getTicketHolders(uint256)", "0xe604cf9f": "get_all_squares()", "0xa8978434": "softResolveAnswer(uint256)", "0xfbffb355": "testBitsEqualFailIndexOOB()", "0x98024f18": "testThrowsTransferDisableNotEnabled()", "0x9e7b8d61": "giveRightToVote(address)", "0xbd9335c0": "scheduleHangouts()", "0xa0469b02": "inputToDigit(uint256)", "0x433836dc": "scheduleTransaction(address,bytes,uint8,uint256[3],uint256)", "0x0ce46c43": "scheduleCall(address,bytes4,bytes,uint16,uint8,uint256[5])", "0xd334d75b": "expireLoan()", "0x423d4ef2": "createChannel()", "0x93d79105": "hashRelease(bytes32,bytes32)", "0xd57a12f5": "testCheckSigs()", "0x64eb7327": "_getContent(bytes32)", "0x1ae460e5": "isInPool()", "0x37ae43a3": "BetOnHashV81()", "0x86bb7121": "getBlocksPerRound()", "0x24fb563f": "PlayerTickets(address,uint256,uint256)", "0x352d2790": "UUID4()", "0x32bf775d": "testControlTransferDisabled()", "0xe3ceb06d": "YesNo(bytes32,address,string,address,uint256)", "0x8e46fbb2": "testBitsXorFailIndexOOB()", "0xb8077e28": "getTxOrigin()", "0x6ebbe863": "updatePublishContract(address)", "0x5c52e51e": "processPayout()", "0x73053f70": "tokenDeposit(address)", "0xbeabacc8": "transfer(address,address,uint256)", "0x4a3a87e2": "CreateProxyWithControllerAndRecoveryKey(address,address,uint256,uint256)", "0x0fffbb54": "changeRankingSize(uint256)", "0x1288c42a": "Prism()", "0x4e71e0c8": "claimOwnership()", "0xf80b3cfa": "checkBetLowhigh(uint8)", "0x4db3da83": "scheduleCall(bytes4)", "0x29092d0e": "remove(address)", "0xa8c3ec48": "oraclize_query(uint256,string,string[2])", "0xd630bd53": "pledgeApprove(uint256)", "0xa2a8336f": "claimEtherSigner(uint256)", "0x8f30435d": "getCompetitionValues(string,uint8)", "0x9f203255": "setAuditor(address)", "0x7620a65b": "Publisher()", "0x0e0f55d0": "RewardOrder(uint256,uint256)", "0x331a72d1": "getRetractable(bytes32)", "0x2b98222e": "getInstitutionByAddress(address)", "0x00e7d289": "registerListening(address)", "0xec727000": "getApprovalDB()", "0x8ee93cf3": "post(string)", "0x9287c877": "getNavLength()", "0xc47bc007": "add_funds()", "0x287418e7": "query(uint256,uint16)", "0x9801cb8e": "ProofOfExistence()", "0x009b9369": "getVoteNumber(uint256)", "0x0e850239": "scheduleCall(bytes4,bytes)", "0xf666323e": "UUIDProvider()", "0x400aae08": "isInCurrentGeneration(address)", "0xb7f2f33c": "transferRightIfApproved(address,bytes)", "0x9431e412": "getCommunityRates(uint256)", "0x9a8f09bd": "newKing(address)", "0x7c05caf3": "testCreateCostAuth()", "0xdcf73856": "generateGroups()", "0x46c3166f": "testThrowRetractLatestRevisionNotOwner()", "0xe0834ea4": "WatchBalanceInEther()", "0x7212b67e": "add_potion(uint16)", "0x7a6ce2e1": "getMsgSender()", "0x11610c25": "bet()", "0x76f10ad0": "getSnapshot(uint256)", "0x1adf2d1a": "Offer(address,address,bytes,uint256,uint256,uint128,uint256)", "0x5fcc2edb": "IndividualityTokenRoot(address)", "0x40953102": "scheduleCall(address,uint256,bytes,uint256,uint256,uint8,uint256)", "0x32d2fb9f": "getRefRemainingTime(uint256)", "0xdcc0ccf3": "Dao(address)", "0x299e6b07": "Wallet(address)", "0x67fc1c6a": "validateProposedMonarchName(string)", "0x113e6b66": "fipsAddToLedger(bytes20,address)", "0x7d94792a": "seed()", "0x2f570a23": "test(bytes)", "0xb6ce5581": "oraclize_query(string,string[5],uint256)", "0xc618d15f": "ConvertNumbers(bytes5)", "0x8eaa6ac0": "get(bytes32)", "0x28dcfdac": "getSignsCount(uint256)", "0xf7d97577": "setPrice(uint256,uint256)", "0x924c28c1": "ContractInterface(address,address,address)", "0x37b7bf11": "Tile(int256,int256)", "0x884179d8": "ipfsAttributeLookup(address)", "0x3c894475": "scheduleTransaction(address,bytes,uint8,uint256[6],uint256)", "0x7c7a52bf": "newChallenge(uint256,address)", "0xe94a4db1": "isSuitableGen(uint256,uint256)", "0x0e662cf0": "buyTokens(uint16)", "0x5294157f": "sendWithAllOurGasExceptExt(address,uint256,uint256)", "0x0b6d8d52": "createDAO(address,uint256,uint256)", "0xadd82871": "strEqual(string,string)", "0xd4c2b6b1": "scheduleTransaction(address,bytes,uint256[5],uint256)", "0x87045369": "setCanCall(address,address,bytes4,bool)", "0x0d244d68": "setNotRetractable(bytes32)", "0x24d4e90a": "ln(uint256)", "0xff49b26e": "createEvent(uint256,uint256,uint8,uint32,address,uint256,uint8)", "0x5022e940": "experty()", "0x609ff1bd": "winningProposal()", "0x01725a0b": "demo()", "0x0878bc51": "getAttachesto(uint8)", "0x55291dbd": "claimEther()", "0xa26dbf26": "totalParticipants()", "0xfe757fb5": "lastClaimPrice()", "0xa4d575ce": "_forward(address,bytes)", "0xf2f254c7": "getLatestMinorTree(bytes32,uint32)", "0x41868769": "CallAborted(address,bytes)", "0xfa80918b": "computeNodeId(bytes,bytes)", "0x3e2729bf": "isRevocated(bytes)", "0xb958a5e1": "getPhoneByAddress(address)", "0xbcabb54c": "modifyCommunityInfo(uint256,string,string,string,string)", "0x6831c169": "totalPayedOut()", "0xb7c38d02": "testControlCreateSameIpfsHashAndNonce()", "0x73e30e49": "majorEventFunc(uint256,bytes,bytes)", "0xb7213bd4": "readLog(uint256)", "0x7910085d": "fipsIsRegistered(bytes20)", "0x09dfdc71": "currentPyramidBalanceApproximately()", "0xb5d0f16e": "getGasScalar(uint256,uint256)", "0x42966c68": "burn(uint256)", "0x5b067cce": "testCreateCostMain()", "0x88702cc4": "debug_hash256Double(bytes)", "0x446d5aa4": "getAttributes(address)", "0xbff0fbb8": "calculateMeat(uint256)", "0xbf55486b": "Tanya()", "0x883ba26b": "getIsSettled()", "0x804ba97a": "tryGet(bytes)", "0x0d87a7c0": "WLBDrawsDB()", "0x7207c19f": "MyToken(uint256)", "0xae47a290": "changeMaxBet(uint256)", "0x356594ab": "EtherTransfer()", "0xb61d27f6": "execute(address,uint256,bytes)", "0x2ef875fb": "div10(uint256,uint8)", "0x97fcb54e": "transfer_eth(address,uint256)", "0xfad4b99a": "updateChannelMinimum(address,uint256)", "0x5aa94a68": "computeResultVoteExtraInvestFeesRate()", "0xfaab9d39": "setRegistrar(address)", "0x202e3924": "getOperation(uint256)", "0xd13d1ace": "scheduleCall(bytes,bytes,uint16,uint8,uint256,uint256,uint256,uint256,uint256)", "0x63def590": "untrustClient(address)", "0x84ebde52": "Under_the_Hood()", "0x03427656": "getDefaultSoftResolutionBlocks()", "0xdfc765dc": "getMatchers_by_index(uint256)", "0xeeb57139": "CollectMoney(uint256)", "0x15e33901": "digest(bytes,uint256)", "0xafb95eed": "logApproval(address,address,bytes32)", "0xdde8535f": "getMemberStatus(address)", "0xc2b12a73": "setBytes32(bytes32)", "0x350d141e": "getWasApprovedBeforeDeadline()", "0xd8e5ae6a": "Etheramid()", "0x9b5adea2": "setMinter()", "0x141c4e60": "challenge(uint256,address)", "0x1dcb304b": "fipsGenerate()", "0x8aa33776": "setMsgPrice(uint256)", "0xbc0c868c": "stocksOf(uint256)", "0xdc3080f2": "spentAllowance(address,address)", "0x919840ad": "check()", "0x180aadb7": "underLimit(uint256)", "0x9c7264d7": "fillOrder(address,uint256)", "0x1914427f": "MultiSigWalletWithDailyLimit(address[],uint256,uint256)", "0xcee6f93c": "getResultOfLastFlip()", "0xc6803622": "wasCalled()", "0x43ec3f38": "toSliceB32(bytes32)", "0x62b24189": "DepositToBankAccountFromDifferentAddress(uint32)", "0x4cd995da": "registerCompany(address,string)", "0xd7bc23af": "newParameters(int256,uint256,uint256,uint256)", "0x3b996f40": "quarter(uint32,uint32,uint32,uint32)", "0x8aa001fc": "getSecond(uint256)", "0x0f3a1412": "getArrlist(uint256,uint256)", "0x9ea1b79d": "getContentChannel(uint256)", "0x10c4e8b0": "all()", "0x305a762a": "getTicketsCountByBuyer(uint256,address)", "0x2ea459b8": "claimThrone(bytes)", "0x7ac26aeb": "getTag(string,uint256)", "0x1d8b70da": "order_received(string)", "0x05b2b03a": "CertificationCentre(address)", "0x56d73ad1": "getCertifierDb()", "0xebb741cb": "getChannelSize(uint256)", "0x7cef6047": "getNavHistory(uint256)", "0x48519189": "MonedaAlcala(string,string)", "0x315e2f1b": "setTestString(string)", "0x2d8c1c35": "level_up()", "0xf3e84cf3": "createNewRevision(bytes32,bytes)", "0xa0e2abf7": "getFirstActiveGamble()", "0xc27d7721": "create(uint256[101][])", "0xe5c46944": "MultiSigWallet(address[],uint256)", "0x9fb755d7": "setHotWallet(address)", "0xd7c26adb": "oraclize_setProof(bytes1)", "0x3c7a3aff": "commit()", "0x7b7d7225": "_approve(address,uint256)", "0x73fac6f0": "confirmReceived()", "0xacc8cb18": "pushTerm(string)", "0xfe55932a": "setName(uint256,string)", "0x656d2f63": "ManagedAccount(address)", "0xa7b2d4cb": "remove(int256,address)", "0x4ac6b2be": "getCheckRecordCreator(bytes)", "0x60913244": "botOnSale(uint256,uint256)", "0x29f27577": "InvestorList(uint256)", "0xdba7ef7d": "Bookie(address,address)", "0x3ab1e703": "roundMoneyDown3SF(uint256)", "0x3773930e": "ConfigureFunction(address,uint256,uint16,uint16,uint16)", "0xdea9c72b": "getLatestPreReleaseTree(bytes32,uint32,uint32,uint32)", "0xfbbf93a0": "getDetails()", "0x9462eae5": "ChangeContractor(address)", "0x14ca5398": "submitFullBlock(bytes,uint256[],uint256[],bytes,bytes,bytes,bytes,bytes,bytes,uint256)", "0x3a4de190": "repost(bytes32)", "0x506e106c": "setToS(string)", "0xe7dafdb6": "transfer_token(address,address,uint256)", "0x255016c8": "checkIfExploded()", "0x0bd2ae1c": "ERW()", "0xbcc941b6": "totalWinners()", "0x9c30936f": "removeCertificationDocumentFromSelf(bytes32)", "0xf04da65b": "getShares(address)", "0x49942ccb": "scheduleCall(bytes,bytes,uint256,uint256)", "0x412664ae": "sendToken(address,uint256)", "0xb69ef8a8": "balance()", "0x71f297cc": "XaurumToken(address)", "0xa48566ba": "serverSeed(address,bytes)", "0xc2985578": "foo()", "0xd264e05e": "forward()", "0x023c23db": "getSize(uint256)", "0x1bad1d2e": "monitorWallet(address)", "0xf4f3bdc1": "minus(uint256,uint256)", "0xf7b89a3e": "getTotalCosts()", "0x1077f06c": "makeClaim(uint256)", "0xa4b8c2e7": "restart(bytes20,bytes32)", "0x4ff6aa46": "deactivateTeam()", "0x95ceb4b3": "winningProtocal()", "0xa0eda9f2": "_transferFee(address,uint256,string)", "0x2f95b833": "requiredStackDepth()", "0x76577eae": "distributeEarnings()", "0xdd727ea6": "runJackpot()", "0x6632a507": "testSetupPrecondition()", "0xfe9fbb80": "isAuthorized(address)", "0x3f74fecb": "DSTrueFallbackTest()", "0x58f33e98": "isTaker(address)", "0x373a1bc3": "scheduleCall(address,bytes4)", "0x64ed31fe": "authVotes(address)", "0x254c91b3": "testBitNotSetSuccess()", "0x930ed251": "getSavedVar()", "0x26da8e17": "ownerUpdateCostToCallOraclize(uint256)", "0x5b86914d": "bet_value()", "0x337b1cf9": "setIpfsHash(bytes)", "0x7e1c4205": "query2(uint256,string,string,string,uint256)", "0xd02a9889": "getDateOfFirstPayment()", "0xcb6da9da": "takerCount()", "0x7a8df1b9": "getAffiliateInfo(address)", "0x8a341c83": "testErrorRootAuthorityChangeUnownedPackage()", "0x5fd9dff6": "allowance(address,address,bytes)", "0x4c738909": "getMyBalance()", "0xd408746a": "GetContractAddr()", "0xd9feeeb6": "fillMyOrder(uint256)", "0x579d5fba": "debug_hash3Int(uint256)", "0x3df76482": "fipsPublishData(bytes20,bytes)", "0x5af77fff": "Contract()", "0x6ad50ed4": "investmentEntryInfos()", "0xbc45d789": "setConfigUint(int256,bytes32,uint256)", "0x5a2ee019": "m()", "0xd249a52e": "update(bytes,uint256[],uint256[])", "0xab91c7b0": "queueLength()", "0x0d17bc2e": "_disallow()", "0x30b9af98": "withdrawFunding()", "0x61aa8d93": "processFee()", "0xda1441cd": "KudosBank(uint256)", "0xa10bee85": "_transferFromWithReference(address,address,uint256,string)", "0x3f5b7675": "periodTwo()", "0x48027610": "transferPaidOut(address,address,uint256)", "0x5c7c9aa4": "checkAccountState(address)", "0xd9ec0508": "testThrowTransferNotEnabled()", "0x60fe47b1": "set(uint256)", "0xa02b161e": "unregister(uint256)", "0x4a617faa": "shaBid(bytes32,uint256,bytes32)", "0x7b632c41": "TimestampScheduler(address,address)", "0x771ad635": "getContentCred(address,uint256)", "0x4b37c73f": "removeFactory(address)", "0xd8f012c6": "StatelessFactory(string,string,string)", "0xf34c7010": "commitSecurity(address,uint256,uint256)", "0xdaa21e0e": "testBitSetSuccess()", "0x33f707d1": "ownerWithdraw(uint256)", "0xbe2430fe": "sendValues()", "0x7bc25372": "UserCheckBalance(address)", "0x6da84ec0": "calcMarketFee(bytes32,uint256)", "0x69347990": "ownerWithdrawl()", "0x9d7eb375": "updateUserDetails(string)", "0x7353f62b": "testGetApprovalDb()", "0x7ff9b596": "tokenPrice()", "0x5f68804e": "SimpleLotto()", "0x827ef325": "_parseMsgData(bytes)", "0xa79f26dc": "force()", "0xb595181f": "ShapeshiftBot()", "0xaca66aec": "DVIP()", "0x75f40f40": "underdogPayoutFund()", "0xd81e8423": "get(address,address)", "0xbcb3b5d2": "getGamblesList(uint256)", "0x9f095e88": "asdf()", "0xdba21657": "askForEther(uint256)", "0x152cf9db": "getDataPoint(int256,uint256,uint256)", "0x003074ff": "getFrontend()", "0x74eb9b68": "isAccountLocked(address)", "0x3c84f868": "set(int256,address,uint256)", "0x2b198366": "addCertifier(address)", "0xfd35e71b": "entryPayoutDue(uint256)", "0xccf1ab9b": "usurpation()", "0xf714de9c": "MultiAccess()", "0x6d16f79c": "__transferWithReference(address,uint256,string)", "0x8f70bfa0": "processDeposit()", "0xbc2a4dd6": "doBalanceOf(address)", "0xde10f04b": "eraseNode(bytes32[])", "0x15398afe": "compareNumericStrings(string,string)", "0x21520c5f": "calculatePayout(uint8,bool,uint256)", "0x5dd672ec": "latestBid()", "0xb06eb03f": "DSEasyMultisig(uint256,uint256,uint256)", "0xa1da2fb9": "retrieveDAOReward(bool)", "0xd4245e5b": "transferringETH(address)", "0xab73e316": "next(address)", "0x3da5c3ce": "puzzle(address,bytes32)", "0x0e4355d4": "validFactories(address)", "0x5cf34bcf": "getMinFee()", "0x6b4dd158": "getPrice(bytes)", "0xcbd08c8c": "config(uint256,uint256,uint256,uint256)", "0x3af75ee1": "storeBlockWithFee(bytes,int256,bytes,int256)", "0x6822abae": "getMinimumCallCost(uint256)", "0xe51ff1fc": "iterateOverThings()", "0x2d0104a5": "updateFirstDuel1(uint256)", "0x724ae9d0": "getMinInvestment()", "0x2e52d606": "n()", "0x6111dd02": "calcCostsSelling(uint256,uint8,uint8,uint256)", "0x22ebb3ac": "DieselPricePeg()", "0xe8b13c44": "getChainyTimestamp(string)", "0x65fa2f7f": "getLastPrice(uint256)", "0xd2531590": "CANCEL_EXTRA_GAS()", "0x746c9171": "m_required()", "0xef04fdb7": "buyShares(bytes,uint8,uint256,uint256)", "0x16d9356f": "oraclize_query(string,string[4])", "0xd9c67404": "getMerkleRoot(bytes)", "0xcebce72d": "token(uint64)", "0xe37aa618": "distributeValue()", "0x41095b60": "voteForUltimateOutcome(bytes,uint16)", "0xc9734ebd": "WatchLastPayout()", "0x8b543b80": "maximumCredit(address)", "0xd95ab72d": "getMemberWallet(address)", "0xfc7b9c18": "totalDebt()", "0xf738e5ca": "ownerTakeProfit()", "0x4ad07b0e": "oracleOutcomes(bytes32,address)", "0x68f65f02": "ChangeShownDenomination(bool,bool,bool,bool)", "0x4d536fe3": "doit()", "0x04509918": "scheduleCall(address)", "0x39e525f9": "resolveCallback(uint256)", "0xa4699cad": "resetWithdrawls()", "0x3535cd52": "setDailyCosts(uint256)", "0x0bd089ab": "MyAdvancedToken(uint256,string,uint8,string,address)", "0xa30b5c69": "AttributeModel()", "0x027a5e3f": "getLastVersion(bytes)", "0x0343dfa0": "checkInvariants()", "0x7ec0f30d": "ack(string)", "0x92584d80": "finalize(bytes32)", "0x1f13de92": "inEther(uint256)", "0x03ef2a2c": "tryExecuteProposal(uint256,bytes)", "0x22beb9b9": "scheduleDoIt(uint256)", "0xd205ad7d": "proposeDissolve(bytes)", "0xce220ecf": "testAddBalanceFailsAboveOverflow()", "0xa8026912": "setSource(address)", "0xee22610b": "executeTransaction(uint256)", "0x69fe0e2d": "setFee(uint256)", "0x75f96ead": "Guess(uint256)", "0xc87b36ed": "disableBetting()", "0x0c08bf88": "terminate()", "0xff7f5f2a": "EtherizationUtils2()", "0x0d368fee": "deverify(address)", "0x99aeade3": "iterateTable(uint256,uint256)", "0xc7144269": "changeSettings_only_Dev(uint256,uint256,uint256,uint256,uint16,uint256,uint256,uint256,uint8,uint8)", "0xb0ecca8f": "LookAtLastTimePerZone(uint256)", "0xbfbc793c": "computeNameFuzzyHash(string)", "0x16d960b5": "createThing(bytes32[],bytes32[],uint88)", "0xfde9ba41": "transfer(bytes,address,uint256)", "0x4637d827": "trust(address)", "0xa4a7cf5c": "redeemWinnings(bytes32)", "0xf3bf93a0": "forceReleaseAdmin(bytes32)", "0xeac116c4": "createKingdom(string,address,address,address,address)", "0xcef8d343": "buyShare(uint256,bool)", "0x5601eaea": "execute(uint256,uint256)", "0x3cc0fb45": "testFailRetractNotOwner()", "0xf2561a43": "voteSuicide(address)", "0xaa272d4b": "getNodeIndexId(bytes)", "0x06e53f47": "whichChainIsThis()", "0x9cb8a26a": "selfDestruct()", "0x87fd0421": "TheEthereumLottery()", "0xa8239d0b": "getPrice(string,address)", "0xeaa1f9fe": "reqisterListening(address)", "0x06f36cc9": "helpBlue()", "0x2facc4e8": "depositGovernance(uint256,address)", "0x102accc1": "fireEventLog2()", "0xcd4b6914": "getRandom(uint256)", "0xc3d014d6": "setContent(bytes32,bytes32)", "0x665beae7": "ExecutableBase(bytes)", "0x6534b4e2": "IsPayoutReady__InfoFunction(bytes32)", "0xfae8f9a2": "setInitialParent(int256,int256,int256,int256,int256,int256)", "0xfd68a422": "returnmoneycreator(uint8,uint128)", "0x5829d310": "entries(int256)", "0x8bbda7e3": "setContent(string,bytes)", "0x30e0789e": "_transfer(address,address,uint256)", "0x74bfb965": "addNewProxy(address)", "0xb085b9a5": "Example()", "0xd3f297d6": "claimLiquidityReward()", "0xd89135cd": "totalBurned()", "0x3e0d4f4a": "ApproveContractorProposal()", "0x669ee827": "RegisterDevice()", "0x6ba2aefc": "transferMultisig(address,address,uint256)", "0x76849376": "addNode(bytes32,address)", "0xc41f4cc0": "takerStatus(address)", "0x10e89b22": "remove_deal(uint32)", "0x94ed9b77": "append(address,address)", "0x3018205f": "getController()", "0x2776a859": "computeResponseSecondHalf(uint16)", "0xd5089396": "Token(string,string,uint8,uint256)", "0x3e5cee05": "issueIOU(string,uint256,address)", "0x5ac801fe": "setName(bytes32)", "0xb17acdcd": "collectFees(uint256)", "0x189c94ae": "testFallbackStaticSig()", "0xed68ff2c": "setRequireSignedAddress(bool,address)", "0x60a60fd8": "testProxyCallWithValue()", "0x8bab8791": "testPkgUpdate()", "0x90c3f38f": "setDescription(string)", "0x8afa08bd": "setDrawDate(uint256)", "0x96f47800": "investInternal(address,uint128)", "0x9c709343": "split(bool,address)", "0x0d61b519": "executeProposal(uint256)", "0xe3b26a8c": "SocialNetwork()", "0xf83d08ba": "lock()", "0x85fe0448": "testThrowRestartNotUpdatable()", "0x1e83409a": "claim(address)", "0xa20c404f": "ModifySettings(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "0xd21b84ac": "createNewDAO(address)", "0xc7e22ac4": "setOracleGas(uint256)", "0x6c6f1d93": "getContractCreationValue()", "0x691d58e7": "_applyRefund(uint256)", "0x03da8902": "transfearDBOwner(address)", "0xdb5b4183": "oracleOutcomes(bytes,address)", "0x103f9251": "transferFrom(address,address)", "0x57e25a79": "PullPaymentCapable()", "0xb6ed9f15": "PFOffer(address,address,bytes,uint256,uint256,uint128)", "0xc018d0e6": "getFeeAmount(int256,int256)", "0xa89a4f09": "creatorBalanceChecker()", "0x7bc0ff20": "setupExportFee(address,uint256)", "0x0645b5d5": "getMyShareholderID()", "0xa753d6f2": "CreateProposal(string,string,string,string,string,string,uint32,uint32)", "0x531d1974": "testThrowRetractLatestRevisionEnforceRevisions()", "0x2dff6941": "content(bytes32)", "0x7fee4ecb": "GAS_PER_DEPTH()", "0x1277e24f": "payOneTimeFee()", "0x67beaccb": "scheduleCall(bytes)", "0xbf2e694f": "getPreviousRequest(address,address)", "0xfb5d5729": "getPongvalTransactional()", "0x2eb5c61f": "testThrowsUpdateLatestRevisionEnforceRevisions()", "0x3baf4e1e": "newPayment(uint256,uint256)", "0xeb045789": "ChannelSeries(address)", "0x1a695230": "transfer(address)", "0x540c97c8": "getAllRevisionIpfsHashes(bytes20)", "0xfeb50430": "getLevitatingKittens(bytes32,uint64)", "0x9cc0c5e3": "experty_io()", "0x045c6ce0": "voteForProposal(uint256)", "0x6cdf4c90": "ownerSetMinBet(uint256)", "0xf27197ab": "getIsAvailable()", "0x01bd4051": "disown(string)", "0xd92ebe46": "createDAO(address,uint256,uint256,uint256,string,string,uint8)", "0x17f5de95": "MAX_TOKENS_SOLD()", "0x9e920587": "testOwnedAuth()", "0x200538c6": "DTE()", "0xe765cb44": "auctionMinPrice()", "0x44d03ac6": "BlockhashFetch(address)", "0x9ed93318": "create(address)", "0x126a710e": "dnsrr(bytes32)", "0x959ac484": "push(uint256)", "0x5329c681": "checkTimeout(uint256)", "0x1fd96b69": "ManagedAccount(address,bool)", "0x749f9889": "changeAllowedRecipients(address,bool)", "0xdabc706e": "getProposalCost()", "0x3dc02266": "fipsRegister(uint256)", "0x045236b4": "getChainyData(string)", "0xdf2f0a4a": "getDecisionBlockNumber(uint256,uint256)", "0x51b3d7b9": "_transferWithReference(address,uint256,string)", "0xe3914699": "dEthereumlotteryNetWinners(address)", "0x6d853ab6": "isSubUser(address)", "0xf5c57382": "nameOf(address)", "0x73abecbb": "kill1()", "0xe2056c46": "ExtraBalToken()", "0xf1c30ec0": "reclaim(bytes)", "0x38eaf913": "setDirectorNode(string)", "0x5d5483b3": "WatchAppliedFeePercentage()", "0xf9cc0605": "getAvailable()", "0x975057e7": "store()", "0x37751b35": "doTransfer(address,address,uint256)", "0x0a19b14a": "trade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)", "0xd6af9411": "Rouleth()", "0x854f4817": "buyKissBTCWithCallback(address,uint256)", "0x6a4a6b6e": "_myAddressHelper()", "0xd4e78272": "Draw()", "0xe4849b32": "sell(uint256)", "0xb938bf42": "sendBounty(bytes32)", "0x1c5d9faa": "setNickname(string)", "0x2d580ef6": "add(address,bytes32)", "0xf65c4d42": "Participate(uint256)", "0x3facd57c": "registerBill(uint256,address,address,uint256,uint256,uint256)", "0xaeeb96af": "Highlander()", "0xb484e532": "getMyMsg()", "0x8946d33f": "SplitterEthToEtc()", "0x8bfc2f33": "delegateDAOTokens(uint256)", "0xd504ea1d": "getArray()", "0x22f607f6": "Escrow()", "0x7486a8e3": "get_publisher(bytes32)", "0x492b67ea": "Etherdoc()", "0x1465aa97": "testingContract()", "0x96f7807a": "getDuel2(uint256)", "0xbb39a960": "trade(address,uint256,address,uint256)", "0x021991e7": "getBetsLocked()", "0x24032866": "checkExecutionAuthorization(address,uint256)", "0x2f5d3916": "testControllerApproveTriggersEvent()", "0x081bf263": "isOOB(uint8,uint8)", "0xd3aa22c7": "transferTLA(string,address)", "0xfba06849": "fipsPublishDataMulti(bytes20[],bytes)", "0x65093661": "newCommunity(address)", "0x28cc413a": "getProof(uint256,uint256,uint256)", "0x2d985cfb": "testControlRestartNotUpdatable()", "0x2c181929": "getChainWork()", "0xb4a5ef58": "updateDefaultTimeoutPeriod(uint256)", "0x996a4be3": "uintToBytes(uint256,uint256)", "0xb414d4b6": "frozenAccount(address)", "0x8143f8a8": "totalGas(bytes)", "0xba344743": "_rawTransfer(address,address,uint256)", "0x43c33ac9": "submitShares(uint256,uint256)", "0x92093dd6": "getLastResult()", "0x0fa9ced4": "emergencyFuneral()", "0x3b84edbd": "setRNG(address)", "0x8365172c": "num_levels()", "0x64265b1a": "share_transfered(string)", "0x8736fd16": "getRefStatus(uint256)", "0x578bcc20": "reduceDebt(address,address,uint256)", "0xc7a3778f": "testControlRetractLatestRevisionNotUpdatable()", "0xcc3471af": "maxClaimBlock()", "0x4ae9af61": "getBotStats(uint256,uint256)", "0x8570153e": "publish(string,string,bytes,address[])", "0x0cee22e9": "testSetBalanceSetsSupply()", "0xae99847b": "daylimit(uint256)", "0x197f3c29": "notLike(address)", "0x7ccfd45a": "removeSubUser(address)", "0xadd4c784": "getResult(bytes32)", "0x57eaeddf": "_isContract()", "0x4571d4c4": "FutureCall(address,uint256,uint16,address,bytes,bytes,uint256,uint256,uint256)", "0x8c3c4b34": "getSaleStatus()", "0xd83a7f67": "getDepositAddress(address)", "0x942385eb": "getPayroll()", "0x4a41e045": "getUint8(int8)", "0xb29ae23f": "getDateOfSignature()", "0xe1bedf2a": "AlarmTester(address)", "0x26161670": "donkeyRanking(uint256)", "0xee2af3fb": "set_factory(address)", "0xe95bee59": "checkFormat(string)", "0x3cebb823": "changeController(address)", "0xd94073d4": "PT()", "0xbfb04c60": "proposeAcceptanceAsMember(uint256)", "0x58e59c32": "get_entry(uint256,uint256,uint256)", "0x706dfe54": "getIssueState(uint256,bytes32)", "0x76bc21d9": "fireEventLog2Anonym()", "0x08216c0f": "createHumanStandardToken(uint256,string,uint8,string)", "0x1b9265b8": "pay()", "0x2a24f46c": "auctionEnd()", "0x9cc9299e": "killSwap()", "0x87def081": "getFeeRecipient(int256)", "0xf99fc046": "dEthereumlotteryNet()", "0x1632070c": "setRewardDivisor(uint256)", "0x93e02d13": "FallenLeaders()", "0xdd114c22": "publish(address,uint256,address,uint256)", "0x3b91ceef": "setMax(uint256,uint256)", "0xf1a00a53": "unregisterListening(address)", "0xa25057de": "_transferToICAP(bytes32,uint256)", "0x81baf820": "BlockScheduler(address)", "0x943a32bc": "Relay(address)", "0x50944a8f": "setMembership(address)", "0xc6cb7a96": "orderMatchTest(uint256,uint256,int256,uint256,uint256,address,address,uint256,int256)", "0x816e24b0": "setupDeposits()", "0xc6a17d2b": "pow10(uint256,uint8)", "0x8823a9c0": "changeFeeTake(uint256)", "0xb1233451": "setTerm(uint256,string)", "0x420a8ac8": "NanoPyramid()", "0x4a9b3f95": "personUpdateName(uint256,string)", "0x2b30d2b8": "invoke(uint256)", "0xcab5c0f1": "_incrementState()", "0x16e27349": "getFeeRecipient(int256,int256)", "0xae2df7b3": "setImporterBank()", "0xfaf27bca": "greeter(string)", "0x9743dfc1": "jesterAutomaticCollectFee()", "0x1f5d0b4c": "address(address,address,uint256)", "0x5687f2b8": "emitApproval(address,address,uint256)", "0x64d905c0": "awaitingParticipants()", "0xfc1f2a70": "Add(uint256,string,string)", "0xf99ebb71": "testFailUpdateLatestRevisionEnforceRevisions()", "0xb8851fea": "endDateStart()", "0x60aeac18": "neverPayBack()", "0x1ca60aeb": "setMeltingContract(address)", "0xce373b95": "heroOfThePit()", "0x0b5ab3d5": "destroyDeed()", "0x919edc7c": "getChainySender(string)", "0xbc8f3bcb": "ZeroDollarHomePage()", "0x182db370": "getWhatHappened()", "0xbf32bf97": "FailGuyTax()", "0x97daa043": "register(bytes,address,address,uint256,bytes)", "0x9d7d6667": "multipliers()", "0x9a571d9f": "isAlphaLower(bytes1)", "0x0ad95b44": "bribery()", "0x60dccd89": "getContentAccount(uint256)", "0x6dd6e87b": "checkOut(int256)", "0x12a7b914": "getBool()", "0x8894dd2b": "addEther()", "0x4112987c": "strConcat(string,string,string)", "0x669459a7": "removeRegistryFromOwnerIndex(address)", "0x54ed7b6e": "addHash(bytes)", "0x6b1feeeb": "get_my_sig()", "0xce92dced": "newBid(bytes32)", "0xb0459d49": "LoanStandard(address,address,uint256,uint256,uint256,uint256,uint256)", "0xa7ba44c3": "isFinalizerSane()", "0x71e2d919": "lol()", "0x08aba5aa": "setAccountBalance(uint256)", "0x28f03554": "ProcessDividend()", "0x929e626e": "getShareDistribution(bytes32)", "0x3fbd40fd": "ProcessDraw()", "0x03959bb7": "setDataContract(address)", "0x4f013184": "investInTheSystem()", "0xd31fdffd": "setHammer(address)", "0x03ee8f08": "getCoeff(uint16)", "0x267b6922": "entries(bytes32)", "0x895224db": "testControlBlobStoreNotRegistered()", "0x8dd8596c": "sendDonation()", "0xfb775b46": "giver()", "0xb4b9d1f1": "lookup(uint256,uint256)", "0x6a7bf76a": "create_game(bytes32,uint32,uint32,uint8,uint16,uint8,address,uint256,bool)", "0x355474d2": "commitReading(address)", "0xe82f7dd4": "testThrowsRetractLatestRevisionNotUpdatable()", "0x24c9bf5e": "Prizes()", "0x386fcda8": "testCreateCostToken()", "0x2212dbc3": "get_timestamp()", "0x1bcf5758": "getOccupies(uint8)", "0xacbf98a7": "endsWith()", "0x9e9d3aa4": "FirstBloodToken(address,address,uint256,uint256)", "0x043bb5e7": "getIdentities(address[])", "0xb56e1bca": "setExchangeToken()", "0x839849c0": "changeBaseMultiplier(uint256)", "0xcabb3a3a": "isAlphaNumeric(string)", "0xcae9ca51": "approveAndCall(address,uint256,bytes)", "0xf97d0591": "parseTimestamp(uint256)", "0x226685ee": "Visit()", "0x8bb0faee": "setRef(string,string)", "0x673448dd": "isApproved(address)", "0xa045fdff": "scheduleCall(address,bytes)", "0xac3e6b2f": "testSetNotRetractable()", "0xcd57a448": "SwapContract(address,uint256)", "0x1397fdbd": "getShares(address,bytes,int256[])", "0x2c329e99": "Last_block_number_and_bloctime_used()", "0x8e3957d9": "RandomNumber()", "0xdc419fd8": "cancelOrder(bool,uint256)", "0x45104b16": "EXECUTION_GAS_OVERHEAD()", "0xb3bb9b58": "LiquidDemocracy(address,string,uint256)", "0x3fd1f232": "LookAtAllTheseTastyFees()", "0x4b59e880": "puzzle(address,bytes32,bytes32)", "0x5a825cbb": "getPayment(uint256,uint256)", "0x9483e91a": "withdraw(address,uint256,bytes,uint256)", "0x1d3390a1": "carefulSendWithFixedGas(address,uint256,uint256)", "0x60eb2826": "Badge()", "0x2de90801": "hashtagToken()", "0xc76a4bfb": "relayReceiveApproval(address,address,uint256,bytes)", "0x6c712471": "testControlRetractLatestRevisionEnforceRevisions()", "0xaaac50bd": "transferDisable(bytes32)", "0x6ed7c013": "move_monsters()", "0x2530c905": "rand(uint256)", "0x81183633": "setStandard(bytes32)", "0x6493d7fc": "CircuitBreaker(address,address,uint256,uint256)", "0x4ef5710a": "WatchNumberOfPlayerInCurrentRound()", "0x06961560": "DAO(address,uint256,uint256,uint256,address)", "0x9ba5b4e9": "getEventHashes(bytes32[])", "0x5ee345e4": "computeEndowment(uint256,uint256,uint256,uint256,uint256,uint256)", "0x077dadb2": "coinBalanceMultisig(address)", "0x9077dcfd": "submitCoding(string,uint256)", "0xeba36dbd": "setAddr(uint256,address)", "0x8f99ea43": "setDividendDB(address)", "0x7429f1eb": "multiAccessSetRecipientD(address,address)", "0xf24b5779": "removeTrustedIssuer(address,string)", "0x9f9eac67": "ChangeName(string)", "0xf74100e3": "getBits(bytes)", "0x117de2fd": "payout(address,uint256)", "0x4b09ebb2": "e_exp(uint256)", "0xaf6fe8e2": "testGetToken()", "0x60b431a4": "testGetSig()", "0x84dac46e": "Fucksign()", "0xf47289e1": "_ecDouble(uint256,uint256,uint256)", "0x6a1db1bf": "changeFee(uint256)", "0x5d8227e6": "FactoryBase(string,string,string)", "0x8ee21b8e": "get_default_keys()", "0x6cb3d30a": "triggerTryAuth()", "0xcde0a4f8": "setRegulator(address)", "0x561a4873": "buyAd(string,string,string,uint256,uint8,address)", "0x488b3538": "shares(address,bytes32,int256)", "0xd6d22fa4": "MetaCoin()", "0x1934d55a": "isPermanentlyApproved(address,address)", "0xa55cab95": "getName(uint8,uint8)", "0x4e209678": "testFailBreach()", "0x9209b3c0": "getCrtDetails(bytes)", "0x4c2d71b3": "setConfigAddress(bytes32,address)", "0x71c59097": "MainnetSurvey(uint256,string,bytes32[])", "0x4a82534b": "create(address,address,address,uint256,uint8,uint8,uint256)", "0x8579cbde": "getPrice(string,uint256,address)", "0xb8c48f8c": "setInitialParent(int256,int256,int256)", "0x5f0edfb8": "create(bytes,bytes32,bytes1)", "0xf3125a1f": "deposit(address,uint256,bytes,uint256)", "0x59d1d43c": "text(bytes32,string)", "0x08f235ec": "getDefaultPayment()", "0x677913e9": "setAmount(int32)", "0x64aabe92": "tryExec(address,bytes,uint256)", "0x01cceb38": "setExpiry(uint256)", "0xc1cc0775": "calculateFeeDynamic(uint256,uint256)", "0xbb963c8a": "transferLibOwnership(bytes,address)", "0xaef99eef": "Game()", "0xb311ee0c": "refundClaimDeposit()", "0xb764e273": "failSend()", "0x5f70d9ac": "getBot(uint256)", "0xaf030d2c": "setResult(uint256,uint256,bytes32)", "0xdb641ab4": "Game_balance_in_Ethers()", "0xa6bf3df0": "oraclize_query(string,string[2],uint256)", "0x93c166ec": "computeEndowment(uint256,uint256,uint256,uint256)", "0x0e3f732a": "TheGame()", "0x9a1b420b": "OraclizeAddrResolver()", "0x8ac4e1d8": "TemperatureOracle()", "0x70844f7a": "sendBadge(address,uint256)", "0xc630f92b": "canEnterPool()", "0x7bfaad96": "addNode(bytes,address)", "0xafed762b": "toSlice(string)", "0xe3ffc9a3": "sendEtherToOwner()", "0x8c8d98a0": "toTimestamp(uint16,uint8,uint8)", "0xbff1f9e1": "totalUsers()", "0x97bb2a63": "newvow(uint256,address)", "0xcf6b3822": "WatchCollectedFeesInSzabo()", "0xf81d087d": "prepareLottery()", "0x6bf52ffa": "Vote()", "0x9d1bbd7e": "CancelRoundAndRefundAll(uint256)", "0x29e94503": "VersionedBlob()", "0xc7f2e6af": "Contribute(bytes20)", "0xf2da67db": "setMany(uint256,int256,uint256,bytes20,address,bytes)", "0x11400d8e": "priv_fastGetBlockHash__(int256,int256)", "0x358d5dc2": "getIsCashed(uint256,uint256)", "0xf2c2dff2": "testFailSetNotRetractableNotOwner()", "0xa0a2f629": "setReferralId(uint256,address)", "0x14bfd6d0": "admins(uint256)", "0xc17e6817": "sendSafe(address,uint256)", "0x74d4ab27": "fipsRegister()", "0x3b0506f7": "getVoteByAddress(address,uint256)", "0xaf29e720": "remainingGasFund(uint256)", "0xe2861c8d": "cashOutProfit()", "0x58292a3d": "emission(uint256)", "0x144fa6d7": "setToken(address)", "0x423e1298": "setDoNotAutoRefundTo(bool)", "0x83197ef0": "destroy()", "0xd3118a5a": "addDoc(string,string)", "0x04029f23": "_setBugFixVersion(string,uint32,bytes32,uint32)", "0x2b861629": "storeBlockHeader(bytes)", "0xc3ad5ecb": "getTweet(uint256)", "0x6aaba012": "ErrorGenerator()", "0xcf03f5f4": "activateMasterKey(address)", "0x52ea5667": "getMPbyIndex(uint256)", "0x49aa4ee2": "removeVote()", "0x5f8f0483": "buyBankerAgreementFromImporterBank()", "0xc0b6f0c2": "NextRoundAndEvents()", "0xc13afa91": "object_locations(uint256)", "0xe2c61114": "setImportFee(address,uint256)", "0xea2d4cf8": "__DeployerFunctions(address,address,uint256)", "0x7115c988": "Batch(address)", "0x4156fdb7": "createSwap(uint256)", "0x6618b008": "cancelSellOrder(address)", "0x80db79d9": "StructAndFor()", "0x5afeb106": "Sqrt()", "0x755f99c2": "AddNewSmallContract(address)", "0x06b5f02d": "calcWinnings(uint256,uint256)", "0x4e1053cc": "RobinHoodPonzi()", "0x4dc3141b": "CalcAll()", "0x9dbc4f9b": "participantDetails(uint256)", "0x3f77b560": "newDocument(bytes)", "0x251fa3b1": "testFailRetractLatestRevisionNotOwner()", "0x86314af9": "BetOnHashV84()", "0x93cc9162": "taskRejected(uint256,uint256)", "0x4faa2d54": "getTimeElapsed()", "0x75ee85bd": "salsa20_8(uint256,uint256)", "0x354d7e40": "Payout()", "0x33a99e04": "selectWinner()", "0x364ea9e7": "set(uint256,uint256,bool[],uint256[])", "0xd4dfadbf": "getMarket(address)", "0xe32e9f22": "setDeploymentReward(uint256)", "0x70be4ffa": "testErrorUnauthorizedSetPackage()", "0xdfdb5f17": "doBurn(address,uint256)", "0x2125b65b": "transfer(uint32,address,uint224)", "0x18253234": "ticketsAvailable()", "0x8ac6a869": "isObsolete()", "0x94a1710d": "testNonOwnerCantBreach()", "0x8ecc0950": "returnToOwner()", "0x7d619d9b": "holdCoin(address,address)", "0xa3ec5616": "next(bytes,bytes,bytes,bytes,bytes,bytes,bytes,uint256)", "0x207c64fb": "validate(address)", "0xd4b1d19f": "testThrowsTransferDisabled()", "0x026993e0": "Midas(address,address)", "0x1eb5ea2e": "returnFunds()", "0x16c72721": "forked()", "0x12d00c2e": "soloWithdraw(uint256)", "0x8e7ea5b2": "getWinner()", "0x159887d1": "calculateFactor(uint256,uint256)", "0x44dfdce0": "getNameOwner(bytes)", "0x754dea40": "setBackendOwner(address)", "0x39f64b52": "calcTokenPrice()", "0xe4cc1161": "seedWithGasLimit(uint256)", "0x2e1a7d4d": "withdraw(uint256)", "0x4016535a": "parseBlock(bytes,uint256)", "0x0a6be0e7": "BalancedPonzi()", "0xd8e5c048": "scheduleCall(address,uint256,uint256)", "0x4616caa9": "pushCoin(uint256,address,string)", "0xc0819961": "Invest()", "0xc57a99e5": "testFailRetractLatestRevisionEnforceRevisions()", "0xf062e26b": "check_darkdao()", "0x9b9ba572": "oraclize_query(string,string[3])", "0xfc72c1ef": "ERC20Base(uint256)", "0xce60f78d": "createMarriage(bytes,bytes,uint256,bytes,bytes)", "0xf108a7d2": "withdraw(uint256,address,string)", "0xdda9939c": "Store(address[])", "0x22bc3b8e": "getArgument(uint256)", "0x682d3bb0": "pdfCertificateProof(bytes)", "0x7d5fec5a": "setOwner(uint8,uint8,address)", "0xd4871517": "BTCLotto(address,uint256)", "0x635cfda2": "Incrementer()", "0x969cb7c3": "getPublisher(uint256)", "0x16f3cb5e": "__kill()", "0x61bffe01": "addIdentities(bytes32[],bytes32[])", "0xd81a91e9": "get_party2()", "0x72388610": "paybackAll()", "0xd5171523": "euroteambet()", "0x6506b623": "rotateBitsLeft(bytes,uint256)", "0xdc52696f": "tokenSupplyChanged()", "0x77a7e6be": "getRefTotal(uint256)", "0x2fd6d40b": "getBetValueByGamble(uint8)", "0x79be02af": "Read(address)", "0x01da73ff": "isValidChannel(bytes)", "0x16cb9a01": "assertFalse(bool,bytes)", "0x42346c5e": "parseInt(string)", "0x9f927be7": "getNextCall(uint256)", "0x7b647652": "LittleEthereumDoubler()", "0x954ab4b2": "say()", "0xe33c7ae2": "scheduleTransaction(uint256,uint256,bytes)", "0xca77ab8a": "getNextFile(bytes)", "0x3df91162": "getUpdatable(bytes20)", "0xc71b583b": "closeRequest()", "0x4ea66c38": "buyinInternal(address,uint256)", "0x59c87d70": "request(bytes32)", "0x7cdbae63": "addRegistryIntoTagsIndex(address)", "0x4f139314": "compensateLatestMonarch(uint256)", "0x013d64bd": "setCanCall(address,address,string,bool)", "0x00a676f9": "getExists(bytes32)", "0xcf31e9fe": "getOutputHash()", "0x041fe13d": "onEtherandomSeed(bytes32,bytes32)", "0x606deecd": "requestData()", "0xa501e88d": "Content()", "0x8e280dce": "findNextYear(uint256,bytes)", "0x3983d5c4": "calcBaseFee(uint256)", "0x497777d5": "collect(bytes32)", "0x79b0797c": "AmIPlayer1()", "0x11e99c22": "arrival()", "0xc8e55708": "oraclize_query(string,string[1])", "0x35a063b4": "abort()", "0x5e1936d4": "testThrowSetNotTransferableNotOwner()", "0x01518d76": "sendQuery(uint256)", "0x306df22d": "GPSDestination(int256,int256,uint256)", "0x3015394c": "cancelRequest(uint256)", "0xb88eef53": "registryCreated()", "0xc985c221": "get_all_levels()", "0x157ad5a1": "canWithdrawBond(address,uint256)", "0x4a0d89ba": "getSwap(uint256)", "0x476e04c7": "NewMessage(string)", "0x0bebd0f9": "addAddressToGeneration(address,uint256)", "0x68af4971": "registerListening()", "0x34e8980f": "bootUpHangouts()", "0x18921de4": "addSignature(string,uint256[],uint256[],uint256[],bool[],uint256[])", "0xf95b5a58": "getInitialAnswer(uint256)", "0x595da94d": "has_owners(uint256)", "0x13fc6ac2": "getEventData(bytes32)", "0x60726abb": "copy()", "0x87cc1e1c": "setExporterBank()", "0x0b7ad54c": "getContent(uint256)", "0xeb95b7d5": "Bounty(address,address)", "0xbc5d0f65": "beginExecution()", "0x44dd4b5e": "scheduleTransaction(address,uint256,bytes)", "0x755b5b75": "setNumUnits(uint256,uint256)", "0xf41bfa9e": "mint(int256,uint256,string)", "0x4d9e4e22": "Etheria()", "0xb6294bde": "AdminGetFee()", "0xb72e717d": "fromAddress(address)", "0x25d8dcf2": "betAndFlip()", "0x1097e579": "Enter()", "0x21bb79fe": "luckyDogInfo()", "0x75700437": "query1_withGasLimit(uint256,string,string,uint256)", "0x9a36f932": "feeDivisor()", "0x73f310df": "multiAccessRemoveOwner(address)", "0xca35271c": "numDebtors(address)", "0x45788ce2": "prev(address)", "0xcf1cd249": "secureSend(address)", "0x8a5fb3ca": "currentFeePercentage()", "0x5c5d625e": "getProof()", "0x3824d8ee": "buy100DaoFor1Eth()", "0x88e072b2": "checkTransfer(address,uint256)", "0xdd57d5c5": "setTrust(address)", "0xb7019744": "payBack(address,uint256)", "0xb85477c5": "dealStatus()", "0x6299f8cf": "stop(uint256)", "0x149c5066": "ChanceOfWinning(uint256)", "0x6676871d": "reserved_funds()", "0x62be3172": "Message(address,address,address,string)", "0x306387a4": "dealStatus(uint256)", "0xd07866d2": "sizeOf(uint256)", "0x338b5dea": "depositToken(address,uint256)", "0xc028df06": "offer()", "0xe1569f6b": "testThrowsSetNotRetractableNotOwner()", "0x7b789b3d": "agreement(bytes,bytes,bytes)", "0x5184ffc9": "setAmbiAddress(address,bytes)", "0xb010d94a": "canExitPool(address)", "0x527f4ff1": "setTransferAddressUser(address,address)", "0x80599e4b": "remove(string)", "0x8383bfc8": "EscrowFoundry()", "0x7d7c2a1c": "rebalance()", "0xbe7cddf8": "TwoD()", "0xa843c97f": "attack(uint256,uint256,uint256[])", "0x8f0c724c": "setOperationsCallGas(uint256)", "0x763a738c": "allNames()", "0x20d615c2": "testControlTransferDisableNotEnabled()", "0x93dafba2": "getSubpot(uint256)", "0xdc3f65d3": "createdByMe()", "0xc2fb8f36": "TinyHuman(address,address,address)", "0xa6f0e577": "isLeapYear(uint16)", "0x0e13b9af": "getValue(uint8,uint8)", "0x95671958": "getFileListTail()", "0x1ef0625b": "player_2(uint256)", "0xcde99727": "calculateROI()", "0x922dd59a": "icapTransfer(bytes,address,bytes,uint256)", "0x47e46806": "toString()", "0x408938d0": "testUpdatePackageDb()", "0xd1e15045": "sendBack()", "0x1d4b0796": "updateTxStats()", "0xdaf22f4d": "identify(bytes32)", "0x2a64fb63": "getSaleDate(bytes)", "0x4112b7f1": "tryGetNameOwner(bytes)", "0xff556ecb": "releaseUnicorn(uint256)", "0x9334ab61": "Infos()", "0x71efeff1": "transferCommunityBank(uint256,address)", "0xc4d9102f": "setNextID(uint256,int256)", "0xec44acf2": "trading()", "0x044d0b06": "oraclize_query(string,string[2])", "0xaa6be303": "debtors(address)", "0xf089b7dd": "hashtag()", "0xdd137b5d": "toBase58(uint256,uint8)", "0x4209fff1": "isUser(address)", "0xe97b2190": "add_wall(uint16)", "0xca94692d": "abiSignature()", "0x31375242": "ownerSetTreasury(address)", "0xc1d5e84f": "addNewUser(address)", "0x6d4ce63c": "get()", "0x918359c6": "needsBirth()", "0x31ab4066": "testAuthorityTryAuth()", "0x80dcaf27": "getRefNumber()", "0xd21d7950": "changeGasLimitOfSafeSend(uint256)", "0xb412d4d6": "CafeDelivered()", "0x5a8dd79f": "getDesignatedCaller(address,uint256)", "0xea25f24a": "TokenCreation(uint256,uint256,address)", "0x88017e05": "setContribution(uint256)", "0x1e62be25": "Bytes32Passer()", "0x02ba8742": "sendCoins(address,uint256)", "0x3d6a3664": "setNewOracle(address)", "0x4e6ab570": "insert_order(address,bool,uint32,uint128)", "0x2f553d31": "isCreated(bytes32)", "0xc95e81cb": "MyBet(uint8,address)", "0xc5958bda": "removeFile(bytes)", "0xb5dc40c3": "getConfirmations(uint256)", "0x26b916b4": "Set_Interest_Rate(uint256)", "0x6737c877": "setAttributes(bytes)", "0x1de38038": "makercoin(uint256)", "0x5d5bc4cb": "BetOnRed()", "0x90daaf67": "getMinimalDeposit()", "0x72ea4b8c": "getNumInvestors()", "0xc45b415e": "createRequest(address[4],address,uint256[11],uint256,bytes)", "0xad076bfc": "debug_hash256Double_concat(bytes,bytes,bytes)", "0xa7f43779": "remove()", "0xaacf5328": "setVideoID(string,uint256)", "0x6b256f57": "DAOSecurity(address,address,bytes,uint256,uint256,uint128)", "0x9b1ad792": "destroyToken(address,uint256)", "0x50a3bd39": "enterPool()", "0x0e1087c3": "getMarketMakerFunds()", "0xe8a1c08f": "nibbleToChar(uint256)", "0x0e429ecc": "providerValue()", "0xfa3f1e99": "testBlobStoreRegistered()", "0x93feb13b": "ForceSendHelper(address)", "0x2977b1b1": "testAllowanceStartsAtZero()", "0x4e05ded6": "ClassicCheck()", "0xa6823189": "parseAddr(string)", "0x5292c1a9": "testThrowsRestartEnforceRevisions()", "0x69b144eb": "testThrowsCreateNewRevisionNotOwner()", "0x4894e37f": "__callback(bytes,string,bytes)", "0x452fbc41": "USN(address,address,bytes,uint256,uint256,uint128)", "0xe45ebe93": "checkVoteStatus()", "0x38cc4831": "getAddress()", "0xe6690fb1": "nextAuction(uint256)", "0x7f445c24": "subRegistrar(string)", "0x7958533a": "meta(uint256,bytes32)", "0x3395dc70": "acceptTransfer(address,address,uint256)", "0x6103d70b": "withdrawPayments()", "0x0448f79f": "addOptionChain(uint256,string,uint256,uint256,bytes,address,int256[])", "0xe42def21": "CryptoHill()", "0xdea06188": "NumberOfBlockAlreadyMined()", "0x567dbf18": "__forward(address,uint256,uint256,bytes)", "0x5c3e426c": "adminRetrieveDonations(address)", "0x08714bfa": "TestContract()", "0x152fb125": "SimpleMixer()", "0x203c03fa": "Coinflip()", "0xeddce76b": "testFailDisownNotTransferable()", "0x83d852d9": "shutdownTransactions()", "0x504f1671": "getSize(address)", "0x59a547b0": "recordCommission(uint256)", "0x3c9a4baa": "requestOutput(bytes)", "0x3e0663e0": "AdminDrawProcess()", "0xe0c7c117": "Randao()", "0xa324ad24": "getMonth(uint256)", "0xb35893f3": "setExporter()", "0xfba6651c": "getCommunityTaxes(uint256)", "0xfa3559f7": "attestToContract(uint256,bool,string)", "0xc98165b6": "createTarget()", "0x7370a38d": "getNumPackages()", "0xf207564e": "register(uint256)", "0xa83627de": "updatePeriod()", "0x085d4883": "provider()", "0x2f29d8c5": "elapsed()", "0x24c65f35": "updateRefundGas()", "0x1e74a2d3": "getMinimumEndowment()", "0x50b44712": "tickets(uint256)", "0x46b207b8": "checkExpiry()", "0x4a71d469": "collectRev()", "0xcf69df28": "getDataRequestLength()", "0xaf408d89": "setStatus(bytes)", "0x1e2ca0f3": "updateLeftLottery(address)", "0x3ced516c": "descriptionHashes(bytes32)", "0xd0e30db0": "deposit()", "0x4579268a": "getOffer(uint256)", "0x661e3605": "ConstructorContract(uint256)", "0x6e658fbe": "myFundsExpireIn(uint256)", "0x7f7d711e": "setRequireCustomerId(bool)", "0x5fb64fd6": "checkMembership(address)", "0xb50954b6": "cancelWaitingForOpponent()", "0x659fb968": "getOracleOutcomes(bytes32[],address[])", "0xc4254c7b": "CoreWallet()", "0x67b830ad": "fillOrder(uint256)", "0xbb8be064": "HardwareToken()", "0xde8fa431": "getSize()", "0xdf3a6b10": "testMemberAddedEvent()", "0x791b51f1": "Consulting(address,address)", "0x6e8dad74": "retrieveAccountBalance(bytes,bytes)", "0xeb5904c0": "setProfitDistributionContract(address)", "0xb738169c": "betOnOddEven(bool,bool)", "0xd02bf162": "spinTheWheel()", "0x7b1a547c": "registerAs(address,string,uint256,string,address)", "0xc24924d6": "setQueryFee(uint256)", "0x5f515226": "checkBalance(address)", "0xcabd27de": "Motion(address)", "0xc0d2834b": "DataSource()", "0x15a03930": "TossMyCoin()", "0x3b751f7f": "claimThroneRP(string)", "0x4cdb48e4": "isValidNym(address)", "0x11456b47": "addName(string)", "0x4c7a2254": "checkMyWithdraw()", "0xee564544": "_slotCancelNew()", "0x29cd5777": "_tryEraseSingleNode(bytes32)", "0x598aa1fc": "checkEndorsement(address,uint256,address)", "0xe18c52ae": "testControlTransferNotTransferable()", "0x0e5ffb3c": "hashVersion(uint32,uint32,uint32,string,string)", "0xaad3ec96": "claim(address,uint256)", "0xeace4827": "player_make_bet(uint8)", "0xdeb931a2": "getOwner(bytes32)", "0x76cd7cbc": "sign(bytes)", "0xb5bfdd73": "addDSource(string,bytes1,uint256)", "0xa4fd6f56": "isEnded()", "0xc70d169d": "answerRequest(uint256,bytes)", "0x3b0c197e": "getBook()", "0x1335ff36": "createEventAndMarketMaker(uint256,uint256,uint8,uint32,address,uint256,uint8,uint16,uint256)", "0xec035393": "_getAllRevisionBlockNumbers(bytes20)", "0x0caf9d39": "testFailTooManyMembers()", "0xfd260dfc": "getCertificationDbStatus(address)", "0xb3822da8": "getContents(uint256[])", "0x59d96db5": "terminate(uint256,string)", "0x5cc501ce": "testFailSetNotTransferableNotOwner()", "0xb3a2a999": "nextWithdrawal(bytes16)", "0xb821f815": "pay_winner(uint256)", "0x3500a48d": "transferCommunityCommune(uint256,address)", "0xd6eafd08": "scheduleCall(address,bytes,bytes,uint8,uint256[4])", "0x983b2d56": "addMinter(address)", "0xea9e107a": "acceptRegistrarTransfer(bytes32,address,uint256)", "0xfe73e3ec": "preliminaryGameResult(uint64)", "0x8dd5e298": "canEnterPool(address)", "0x524fa7b9": "whitelistAdd(address)", "0x82996d9f": "rent()", "0x8d92fdf3": "withdrawAsset(uint256)", "0x30677b83": "multiplierFactor()", "0x293ffca3": "AddressReg()", "0xb2c652f3": "getMarkets(uint256[128])", "0x2cce81aa": "getBlockHash(int256)", "0x6ad2a0b3": "buildContract(address)", "0x7f6d8955": "RegisterOne(uint32,address,address)", "0x15f73331": "invalidateName(string)", "0x58b1f29c": "refundBounty(uint256)", "0x708f29a6": "getTotalPayments()", "0x808ab1d6": "getCertificationDbCount()", "0x4dda1764": "CafeMaker()", "0xa396541e": "getPongvalTxRetrievalAttempted()", "0xc2038560": "setOutcome(bytes,bytes)", "0x6fe665e9": "SlotMachine()", "0xe5c7e509": "testThrowTransferDisableNotEnabled()", "0xd5a4a3c6": "findRecentBet(address)", "0x7b1a4909": "transferETH(address,uint256)", "0xee8ff562": "setMaxProfit()", "0x8cecf66e": "_inverse(uint256)", "0x1e9ea66a": "balanceEther10000000(uint256)", "0x02571be3": "owner(bytes32)", "0xa0355f4e": "decline(uint256)", "0xa987d654": "restoreItem(uint256)", "0x2ec2c246": "unregister(address)", "0x8d375da2": "testMakeItFail()", "0xd628e0a6": "WatchBalance()", "0xd5dbb1ad": "solveBet(address,uint8,bool,uint8,bytes32,bytes32)", "0xa4406bcd": "placeSellOrder(uint256,uint256)", "0x59a4669f": "increaseJackpot(string)", "0x3ef87414": "getRevisionCount(bytes20)", "0x2f597e71": "testLongInput()", "0xf0cb556c": "updateLatestRevision(bytes32,bytes)", "0x0ca7395f": "returnFund(address,uint256)", "0x167d3e9c": "SetOwner(address)", "0xf1679095": "getTransferAddressUser(address)", "0xe4fc6b6d": "distribute()", "0x40fdef80": "administration(uint256,string,uint256,uint256,address)", "0x62a0b56b": "testUnset()", "0x43703b0e": "getEventData(bytes)", "0x03985426": "getMode(bytes32)", "0x10922cc1": "testTransferCost()", "0x4b63e601": "scheduleCall(address,uint256,bytes)", "0xde14bbf7": "randomGen(uint256,uint256)", "0x5460ef10": "sendWithExtraGas(address,uint256,uint256)", "0x85e5bb3a": "Security_AddPasswordSha3HashToBankAccount(bytes32)", "0x5f52e9fd": "WithdrawCashForHardwareReturn(uint256)", "0x7332b520": "getRewardsCount(uint256)", "0xd08275f1": "WolframAlpha()", "0x50692d9a": "toContentID(address,string,string,address,bytes32)", "0xba487e62": "newCampaign(uint32,uint96,uint16,uint16)", "0x1ceea715": "GetMyInvestFee()", "0x1ecfe64d": "_jSub(uint256,uint256,uint256,uint256)", "0x4ca168cf": "register(bytes,uint256,address,string,uint256)", "0xa6cb9e64": "scheduleCall(address,bytes,bytes)", "0x5c1b3ca1": "getConfigUint(int256,bytes32)", "0x0699d07d": "updateMaxVal()", "0x25495998": "getMinimumConsumerDeposit()", "0x67acd805": "lowerMinWager(uint256)", "0x4746cef8": "_confirmAndCheck(address,bytes32)", "0x750cae6a": "enableBetting_only_Dev()", "0x9a777d5d": "buyCoins()", "0x1dd4914b": "withdrawEtherOrThrow(uint256)", "0xaed8f3da": "partsPerBillion(uint256,uint256)", "0x2c6b2c92": "checkProfitLossSinceInvestorChange()", "0xfe029156": "swap(address,address,uint256,uint256)", "0x1b03316f": "getSecond()", "0x75608264": "get_hash(uint8,bytes32)", "0x4deb68a3": "auctionStart(bytes32,uint256,uint256)", "0x541aea0f": "put(uint256,uint256)", "0x86602b6b": "testControlRetractLatestRevisionNotOwner()", "0x6d09e2ec": "commitCurrency(address,uint256,uint256)", "0x39cdde32": "ecverify(bytes32,bytes,address)", "0x0a3b0a4f": "add(address)", "0x976b01c0": "setNotRetractable(bytes20)", "0xb863bd37": "random(uint256)", "0x8abadb6b": "setAccountLevel(address,uint256)", "0x01775f23": "_closeBooks()", "0x364f4896": "emission(address,address,uint256,uint16,uint16)", "0xe2a71f12": "accountDelete()", "0xd532e481": "activateFrozenAccount(address)", "0x0066753e": "removeCertifier(address)", "0xeceb2945": "checkProposalCode(uint256,address,uint256,bytes)", "0x99154b49": "ARK()", "0x05de4f07": "getContentParent(uint256)", "0xd9e7ee1c": "new_game(uint256,uint256)", "0xa66b7748": "follow(bytes32)", "0xecb98714": "random_damage(uint256)", "0xa525f42c": "transferFromToICAP(address,bytes32,uint256)", "0x550538f6": "getOneTimeCosts()", "0x2e49d78b": "setStatus(uint8)", "0xd11f13df": "numberOfParticipantsWaitingForPayout()", "0xcb2b9031": "addressToBytes(address,address)", "0x2feda2fa": "POI()", "0xe31bfa00": "next_id()", "0x70b1d9d4": "requestCanonicalFormat(bytes)", "0x2839e928": "ackermann(uint256,uint256)", "0x4ff13571": "x2()", "0x078c3fa4": "_transferToICAPWithReference(bytes32,uint256,string)", "0xe3848e5b": "thing(string,string,string)", "0x4b64e492": "execute(address)", "0xf98a4eca": "executeVote(uint256)", "0x1d065dde": "_transferWithReward(address,address,uint256)", "0xc535165f": "revealAndPayout(bytes,bytes)", "0xd8a8e03a": "move(uint256,address)", "0x89d61d77": "setOrganizer(address)", "0x610d5de8": "validateEndowment(uint256,uint256,uint256,uint256,uint256)", "0x16a25cbd": "ttl(bytes32)", "0xda7d0082": "isCertification(address,bytes32)", "0x200d2ed2": "status()", "0xf9a7a2ef": "named(bytes)", "0xf3ab7ea9": "seeker()", "0x03d22885": "scheduleCall(address,uint256,bytes4,uint256,uint256,uint8,uint256)", "0xe570be18": "DVIPBackend(address,address)", "0x1d7b5baf": "setUint(int256,bytes32,string,uint256)", "0xddf187b0": "dogFight()", "0x4d30b6be": "balanceOf(address,bytes32)", "0x5f1231ea": "getMemberInfo(address)", "0xe837ab59": "getParticipantByAddress(address)", "0xf158458c": "getMinimumEndowment(uint256,uint256)", "0x54d9d6f8": "findNextDay(uint256,bytes)", "0x4f896d4f": "resolve(uint256)", "0x7c73f846": "getMinimumEndowment(uint256,uint256,uint256)", "0x7f98444f": "randomEnd()", "0x569aa0d8": "getPlayerSubmissionFromCompetition(string,uint8,address)", "0x8ba9f354": "testClearBitSuccess()", "0xb83069c5": "getStemPrice()", "0x8e5d97a2": "releasePendingTransfer(uint256)", "0x05a5b8c6": "verifyTx(bytes,int256,int256[],int256,bytes,int256,int256[],int256)", "0x29274fe1": "buyBOTx(uint256,string,string,address,uint256)", "0xbed1b8b9": "convertToInt(string)", "0x2be6d43c": "ARKTagger_1_00()", "0x3c6e03d7": "thewhalegame()", "0xa70a9ad7": "switchDeity(address)", "0x992ae976": "isSafePunctuation(bytes1)", "0xd449ce7c": "Administered()", "0x77228659": "query2(uint256,string,string,string)", "0x8a0807b7": "indexOf(string,string)", "0x1301ee02": "transferringETC(address)", "0x23a1c271": "setPongval(int8)", "0x2dc2dbf2": "makeSimpleDeal(address,address,uint256,bytes32)", "0x4269d8ef": "_safeSend(address,uint256)", "0x0c5c2ca3": "getIndexName(bytes)", "0x09fd018e": "setClaimer(uint256,address,uint256)", "0xabebb7f3": "MarketsContract()", "0x22ec1244": "shaBid(bytes32,address,uint256,bytes32)", "0xce845d1d": "currentBalance()", "0xe2ee9941": "tap(bytes20)", "0xbe9a6555": "start()", "0x17e1b09b": "minimumDeposit(uint256)", "0x9be1fcee": "BankOwner_DisableConnectBankAccountToNewOwnerAddress()", "0xbd858288": "orderMatch(uint256,uint256,int256,uint256,uint256,address,uint8,bytes32,bytes32,int256)", "0x3d750b28": "found()", "0x09dd0e81": "getBlockchainHead()", "0x309424fe": "get_all_names()", "0x5323c6cf": "calcCostsBuying(bytes,uint256,uint256[],uint8,uint256)", "0x1e44c112": "find_strike(uint64,uint32,uint32)", "0xb9f28076": "historyIdx(address)", "0x61461954": "execute()", "0x0eb8ed07": "transferEnable(bytes32)", "0xe74ffbd5": "getPart(bytes32,uint256)", "0xb5a6c525": "extractFrozenAccountLength()", "0x691fb8ea": "jumpIn()", "0xc8f8d75d": "Config(uint8,address)", "0x5fa21f1f": "enableBetting()", "0xbe592488": "validateName(bytes)", "0x18f3fae1": "setOversight(address)", "0x0d1fce42": "getBankroll()", "0xd2602930": "RockPaperScissors()", "0x5a17aa41": "getContentTip(bytes32,address)", "0x8124bb0f": "continueExecution()", "0x278ecde1": "refund(uint256)", "0x90c3a370": "AuctionMaster()", "0x8ae986cf": "registrantApprove(address)", "0xc6502da8": "basePayment()", "0x10fe9ae8": "getTokenAddress()", "0x61e539da": "testFailWrongAccountTransfers()", "0x7879e19e": "CollectAllFees()", "0x96013c9c": "testLatestPkgGetter()", "0x232523e8": "forceDivestOfAllInvestors()", "0x797af627": "confirm(bytes32)", "0xf8f46b5f": "getCurrentMinerAddress()", "0x17e1bfb7": "addInstitution(address,string)", "0xacf8bf2a": "channelCount()", "0xcc25decd": "SampleOffer(address,bytes,uint256,uint256,uint256,uint256,uint256)", "0x0fdb468f": "fee(uint64)", "0xf38b0600": "fireEventLog3()", "0xd299dac0": "blake2b(bytes,bytes,uint64)", "0xa352f1a8": "calcSHA3(bytes)", "0x4d47feaa": "ShareholderDB(uint256)", "0xa83b1e21": "reply(string,bytes32)", "0x3733ffca": "convertTo(uint256,string,string)", "0xb33926cb": "owner_withdraw(uint256)", "0xd173707d": "hasPhysicalAddress(address)", "0x94c3fa2e": "getLastBlockHashUsed()", "0x104d5fdd": "getPriceProxy()", "0x66e34dc6": "registerUsername(bytes32)", "0x4de162e4": "extractAccountLength()", "0x74fbbc86": "rate(uint256,uint256,string)", "0xfa4e5e5a": "notify(uint8,string,string)", "0x8bbb5af7": "test1Fails()", "0xe13dc28b": "testValidTransfers()", "0x2b4a3b31": "doTransferFrom(address,address,uint256)", "0x557ed1ba": "getTime()", "0xd30a512e": "betOnColumnOrDozen(bool,bool,bool)", "0xdde070e8": "getClaimAmount(address)", "0x7b395487": "voteForUltimateOutcome(bytes32,uint16)", "0x5ec01e4d": "random()", "0x1558ae4d": "Etheroll()", "0x3af94817": "getPongvalRemote()", "0xfe01f1ff": "TokenTester()", "0x5e0e2957": "dumpOut()", "0xa17042cc": "getMsgValue()", "0xb06df18e": "transfer(bytes20,address)", "0x0f590c36": "emergencyFixGameResult(uint64,uint256)", "0x27e056a5": "addMinter(int256,address)", "0x4173b181": "setWeiPrice(uint256)", "0xb5784f6f": "testMultiplePackages()", "0xbc9147a4": "Foundation()", "0x1f3a3a53": "mint(int256,uint256)", "0x4f28af6a": "handleBet(uint256)", "0x4162169f": "dao()", "0x2fc0aad3": "isNumericString(string)", "0x623195b0": "setABI(bytes32,uint256,bytes)", "0x934bc29d": "exampleFunction(uint256)", "0xf7c9f74a": "insert_contribution(address,uint256)", "0x4fab2ca4": "testGetFrontend()", "0x8b51d13f": "getConfirmationCount(uint256)", "0xeacccaf0": "setReward(address,uint256)", "0x0b1ca49a": "removeMember(address)", "0xd3edcb5b": "getCreditorAddresses()", "0x615f9f1f": "testFailTransferNotEnabled()", "0x739f888c": "setNewEstimate(int256,int256)", "0x17db59a4": "dEthereumlotteryNet(address,address,address)", "0x6b1cb549": "orderMatch(uint256,uint256,uint256,int256,uint256,uint256,address,uint8,bytes32,bytes32,int256)", "0x78e97925": "startTime()", "0x46b5e202": "set_num_levels(uint256,uint256)", "0x9a35f886": "__dig_then_proxy(uint256)", "0xca3b5c91": "hasRelation(bytes,bytes,address)", "0x4f24186a": "newProposal(string)", "0x7143059f": "getParticipant(address)", "0x99e0021f": "mergencyCall()", "0x869b3f6a": "testThrowsRetractNotOwner()", "0x049ae734": "scheduleCall(address,bytes4,uint256,uint256,uint8)", "0x74331be7": "sete(address)", "0xdd34e129": "PriceTest()", "0x659010e7": "m_spentToday()", "0xfa9acb05": "addressInArray(address,address)", "0xc41a360a": "getOwner(uint256)", "0xc6888fa1": "multiply(uint256)", "0x44602a7d": "testFallbackReturn()", "0xbc08afd9": "WebOfTrustToken(address,uint256)", "0xb40a5627": "bidCount()", "0xa4898fd5": "deployContract(address)", "0xf1173928": "RemovedFromGeneration(address,uint256)", "0xb971b4e5": "setNotTransferable(bytes20)", "0xb4d9cc3a": "profitDisperser()", "0x0968f264": "withdraw(bytes)", "0xe3579ea5": "publish(string,string,address,uint256)", "0x9bd99195": "multiAccessChangeOwner(address,address)", "0xf8af9e6f": "setAdv(uint256,string,string)", "0xaa7dcd84": "testUpdateAuthorityEvent()", "0xd6e0bf29": "OwnerDeposit()", "0x77e5bf84": "getTxGasprice()", "0xf2ba18ed": "calculateVotes()", "0xdc63a62c": "getFileListHead()", "0x66e98c31": "createCoin(string,uint256,uint256,string,string,address)", "0x9a89ad65": "within6Confirms(int256,int256)", "0x1f2e886c": "testControllerTransferTriggersEvent()", "0xbe999705": "addFunds(uint256)", "0xb1999937": "leapYearsBefore(uint256)", "0x31380c89": "TokenSale()", "0x41c0e1b5": "kill()", "0x614cb904": "isFinalizeAgent()", "0x14ab9038": "setTTL(bytes32,uint64)", "0x59dc735c": "getClient()", "0x6d15f208": "reject(string,uint256,uint16,address,uint256)", "0x1d5a9f3f": "object_types(uint256)", "0x034187fd": "setEthToCents(uint256)", "0x4dd49ab4": "get(bytes,uint256)", "0x47bdb7f4": "transferDisable(bytes20)", "0xa502aae8": "getNextGenerationId()", "0x9c7e8a03": "addParticipant(address,address,uint256)", "0x979b6f6f": "RoundInfo()", "0x4848b1a5": "setData(uint256,uint256)", "0x4a1aa767": "claim_victory(uint256,uint8,uint8,uint8)", "0x0257c48c": "meta(bytes32,bytes32)", "0x58e29e17": "initiateProof()", "0x8d7af473": "numberOfProposals()", "0x4c0e207a": "__outputCallback(uint256)", "0x069d6d1c": "closeOrder(uint256)", "0x5503a659": "smallponzi()", "0x114d69b2": "setCRLaddr(address)", "0xa53b1c1e": "setInt256(int256)", "0xb29a0308": "logAnonymous(bytes,bytes,bytes,uint256)", "0xd0068f80": "getClient(uint256)", "0xb3aaa277": "validate(address[4],address,uint256[11],uint256,bytes,uint256)", "0x2581c674": "testBitsOrFailIndexOOB()", "0xb0604a26": "schedule()", "0xd62d3115": "testCreate()", "0x9e66cd38": "free(uint64)", "0xee77fe86": "scheduleCall(address,bytes4,bytes,uint256,uint256,uint8)", "0xbf12165e": "fillUpSlot(uint256,uint256)", "0xbfe8c107": "betOnDozen(bool,bool,bool)", "0x373c98a2": "authCall(address,bytes32)", "0xa9888148": "testFailRetractNotRetractable()", "0x61a00f6d": "Ballot(bytes32[])", "0xa0f61310": "FakeRelay(bytes)", "0xbb3b8dca": "getCertificateHash(bytes)", "0xce19419b": "testThrowsSetNotUpdatableNotOwner()", "0xace51abc": "helperVerifyHash__(uint256,int256,int256[],int256,uint256,int256,int256[],int256)", "0x69d01268": "concatUInt(uint256)", "0x741273d6": "testThrowRegisterContractAgain()", "0x6ec99dd0": "testGetBlobStore()", "0xc2def3b9": "getOrganizer()", "0x0b2acb3f": "add(address,bytes)", "0x1820b575": "Team(uint256,address,uint256)", "0x671fa0a0": "Inscription(string)", "0xfbae5e7d": "Investors(uint256)", "0x9935935f": "setResolveHandler(bytes,address)", "0xaaf9d13e": "buyTopDog(uint256,uint256)", "0xdb4cacec": "Other()", "0x3d69b403": "isOutcomeSet(bytes)", "0xc6e0c908": "checkTransferFromWithReference(address,address,uint256,string)", "0xe9c63b9c": "requestPeerBalance()", "0x227f9633": "addOption(string,address,uint256)", "0xa9cc4718": "fail()", "0x273bc3c9": "numberOfThrones()", "0xcddbe729": "game(uint256)", "0x3f2f46b4": "revealRock(string)", "0xaa8116be": "fundedPrincipal()", "0xacc5a0dc": "GetPrize()", "0x951b01c5": "setCertifierDb(address)", "0xa00aede9": "scheduleCall(uint256,address)", "0x6673ce2b": "Results_of_the_last_round()", "0x14cbdb54": "EspCoin()", "0xc831391d": "getPoolOverlapSize()", "0x271cd760": "getPackageDb()", "0xbddd3a6b": "step7()", "0x0ff4f160": "oraclize_query(uint256,string,string[1])", "0xdf3c8620": "num_challenges()", "0xa3912ec8": "receiveEther()", "0x29a065bd": "getLOg(uint256)", "0xf802075f": "requiredEndowment()", "0xe86afde0": "description(uint64)", "0xe487eb58": "getOwner(bytes20)", "0x3ae01f84": "USDOracle()", "0x3807ba1b": "poi()", "0xfce59d0c": "MangoRepo()", "0xfa2acd87": "G(uint64[16],uint256,uint256,uint256,uint256,uint64,uint64)", "0x867904b4": "issue(address,uint256)", "0xaf5610dd": "isThisPreforkVersion()", "0xb60d4288": "fund()", "0x6d1da953": "createWithNonce(bytes32,bytes)", "0xd085e66e": "GetPart(bytes32,uint256)", "0xd2fb8787": "recordExists(bytes)", "0x9c43d950": "registration(uint256,uint256,uint256)", "0x3c67b6b7": "getClaimLeft(address)", "0x0aa7881a": "MintableToken(int256,uint256)", "0x5d1a3b82": "getOutcome(bytes32)", "0xbc21ce9d": "Aggregation()", "0xdce4a447": "at(address)", "0xc88961da": "createKingdom(string,address,address,address)", "0x22e803c2": "transferBounty()", "0x66d8c463": "reveal(bytes32,string)", "0x0eecae21": "draw()", "0xe37e60d1": "testControlRetractNotOwner()", "0x625cc465": "baseDonation()", "0x0b1e400a": "_transferFromToICAPWithReference(address,bytes32,uint256,string)", "0xccf4f413": "setSubRegistrar(string,address)", "0xcdb6753b": "setNav(uint32)", "0x9894221a": "SendCashForHardwareReturn()", "0x4fb2e45d": "transferOwner(address)", "0x22d8cf5b": "CheckUserVote(uint8,uint8)", "0xa35cfa22": "make_move(uint256,uint8,uint8,uint8,uint8)", "0xb8d4efb5": "validate_percent(uint8)", "0x65f27bea": "testSubBalanceFailsBelowZero()", "0x9f2ce678": "vote(bytes32,bool)", "0x5b0fc9c3": "setOwner(bytes32,address)", "0x54107401": "declareLove(string,string)", "0x10082bff": "getActorBillXdetail(address,uint256,bool)", "0xd50f6bf0": "transferETH(address)", "0xc47f0027": "setName(string)", "0x19a278b9": "getBAddress()", "0xd0bff051": "testSetBalanceDb()", "0x66b42dcb": "register(address,string,uint256,string)", "0x93c32e06": "changeFounder(address)", "0xb89a73cb": "isShareholder(address)", "0x99b721a5": "rewardEthAnd(address[])", "0x30311898": "Account(address)", "0x378a2178": "tallyVotes()", "0x4b8772c1": "buyUnit(uint256,uint256)", "0xa510f776": "setCompany()", "0xf262de8c": "add_staircase(uint16)", "0xa97ffd5e": "safeToSell(uint256)", "0xcaaf2dd7": "getInitialAnswerResult(uint256)", "0xdb18c972": "play4(address,uint256)", "0x3cc8daf7": "setNameOwner(bytes,address)", "0xdaea85c5": "approve(address)", "0x1a88bc66": "slot()", "0x1f2dc5ef": "divisor()", "0xe420264a": "g(uint256)", "0x45ca25ed": "changeName(address,string)", "0x3b49a77b": "hasConfirmed(bytes,address)", "0x9ec35352": "returnRandom()", "0x7db9743b": "Registry()", "0xd7206124": "setInvestorLock(bool)", "0x8a46bf6d": "testFallback()", "0x468f02d2": "getUnderlyingPrice()", "0x8400c307": "isRecipientAllowed(address)", "0xbd35d570": "GAS_TO_COMPLETE_EXECUTION()", "0x0399c357": "assignFreeReadings(address,uint8)", "0x04706fdf": "giveContributionsBackProfitBugged()", "0x06661abd": "count()", "0x76d438b0": "sendReward(uint256,uint256)", "0x231944e2": "moveUnits(uint256,uint256,uint256[])", "0x41ee903e": "clear(uint256,uint256)", "0x2d34ba79": "setup(address,address)", "0xcd5e3c5d": "roll()", "0xf6469342": "_setPackedBlockNumber(bytes32,uint256)", "0x9928811b": "testBroken()", "0xf6c5c80d": "cleanUp()", "0x0a4caed0": "getChannelByRank(address,uint256)", "0x77bc222c": "_eraseSingleNode(bytes32)", "0x4ca8b0d0": "registerExistingThrone(bytes,address,uint256,uint256)", "0x44faa139": "Withdraw(uint32)", "0xf59823cf": "Congress(uint256,uint256,int256)", "0x154af6b1": "sendShares(uint256,uint8,uint256,address)", "0x45ee49b9": "getUltimateOutcomes(bytes)", "0xfc1f7652": "_isBoardMember(address)", "0x968908a3": "createMarketMaker(uint256,uint16,uint256)", "0x244c23ee": "Token(uint256,string,uint8,string)", "0x36f7cd70": "setPricePerStake(uint256)", "0x2672b3e2": "SplitterEtcToEth()", "0xbcd3d8ca": "Collector(address,address,uint256)", "0x34c1b4ba": "sha(bytes)", "0x5cac8b27": "amazing()", "0xfb32f4f5": "ARK_FLAGGER_1_00()", "0x69bcdb7d": "getCommitment(uint256)", "0x2203ab56": "ABI(bytes32,uint256)", "0xb88a802f": "claimReward()", "0xbbd4e8c9": "numDeposits()", "0x9bac8602": "testFailAddBalanceAboveOverflow()", "0xb4022950": "collectFeesInEther(uint256)", "0x1593a8c7": "endLottery()", "0xa360b26f": "Migrations()", "0xda4b5e29": "contains()", "0xc0112678": "arcToken()", "0xc58343ef": "getRequest(uint256)", "0xf0d474f9": "underdogCount()", "0x690e7c09": "open(uint256)", "0xceba30b5": "scheduleTransaction(address,bytes,uint256[4],uint256)", "0x0221038a": "payOut(address,uint256)", "0x5af36e3e": "refund(uint256,uint256)", "0xf6df26d2": "kickOutCommunity(address,uint256)", "0xb4d6d4c7": "getPackageData(bytes32)", "0x758971e8": "ownerTakeProfit(bool)", "0x01991313": "scheduleCall(address,bytes4,uint256)", "0x55ba343f": "getMarket(bytes)", "0x07ef99a0": "demintTokens(int256,address,uint8)", "0x9c0a4bbc": "AlwaysFail()", "0x9dc35799": "updateReading(uint256)", "0x117b4705": "retract(bytes32)", "0xa094a031": "isReady()", "0x8fcc9cfb": "setMinDeposit(uint256)", "0xeb7402f5": "multiAccessHasConfirmed(bytes32,address)", "0x29c08ba2": "payPremium()", "0x75830463": "checkBetLowhigh(uint8,address,bytes32,bytes32)", "0x9e65c7e5": "updateLatestRevision(bytes20,bytes)", "0x80e74b04": "testControlUpdateLatestRevisionEnforceRevisions()", "0x81ade307": "query(string,string)", "0x61472fd4": "CSGOBets()", "0x112c7075": "ManualDeposit()", "0xfac34ff6": "throwFoo()", "0x8d216186": "roll(uint256,bytes32)", "0x65228934": "setOperationsCallGas(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "0x53f818d6": "checkBetValue()", "0xd379be23": "claimer()", "0x8c79a24d": "refName(uint256)", "0xc5d5997c": "changeSubUser(address,address)", "0xee6d2641": "sendWithExtraGasExt(address,uint256,uint256)", "0xaf55bba0": "removeRegistryFromTagsIndex(address)", "0xfa28ba0d": "validateReleaseLockfileURI(string)", "0x2d06177a": "addManager(address)", "0xb2e85b67": "getPlayerStatus(address,uint256)", "0x5a1cc358": "getChannelRank(address,uint256)", "0x4636a159": "newPhoneToAddr(address,uint256)", "0x1ba326c4": "calcShare(uint256,uint256,uint256)", "0xfb099c84": "newInvestor()", "0x1504ce95": "payout(string)", "0xafa293d4": "getSource()", "0x54d03b5c": "changeFeeMake(uint256)", "0x3ae7cdfa": "fipsLegacyRegister(bytes20[],address)", "0xa6a20ff6": "DSEasyMultisig(uint256,uint256,uint256,uint256)", "0xd68199dc": "gameStats()", "0x264c8e9a": "whatWasTheVal()", "0xec3af4a9": "getProjectKudos(address)", "0xf5562753": "getClaimAmountForBlock(uint256)", "0xb7090bb5": "www_experty_io()", "0x10ae4ce2": "setReleaseValidator(address)", "0x9352fad2": "run(string)", "0xf896503a": "getConfigAddress(bytes32)", "0x7c47965e": "isInCurrentGeneration()", "0xb46300ec": "send()", "0xfe67a54b": "endAuction()", "0x68742da6": "withdrawFunds(address)", "0x9dc2c8f5": "fireEventLog4Anonym()", "0x0fe234ed": "testSetController()", "0x12cc08f2": "getPackageReleaseHashes(string,uint256,uint256)", "0xf449619e": "collectPrize(uint256)", "0x314e99a2": "abdicate()", "0x00ce2057": "triggerPayment()", "0xc3169ef2": "respond(uint256,uint256[4])", "0xd50495f4": "addTransaction(bytes)", "0x9dafbc13": "initBlock(uint256)", "0x370ec1c5": "_fillOrder(address,uint256)", "0xbe4054b9": "commitReading(address,uint256,uint256,string)", "0x1bd9c46e": "setImporter()", "0x6f13e01b": "EthVenturePlugin()", "0xc3d345c4": "getHangoutAddress()", "0x402e6230": "getTotalGambles()", "0xdd67a360": "OrderLifeCycle()", "0x12494160": "isHolder()", "0xf004b12b": "CrowdFund(uint256,uint256,address)", "0xbc5ff5e1": "oraclize_query(string,string[4],uint256)", "0x20d9822e": "setAnyoneCanCall(address,string,bool)", "0x5d0be9de": "softWithdrawRevenueFor(address)", "0x35d13969": "SendAllMoney()", "0x3adb2de7": "bet_this_spin()", "0x276b94e1": "copypaste()", "0xdd9dd688": "calcStopPrice()", "0x4afce471": "test_requires_depth(uint16)", "0x37f4c00e": "anchorGasPrice()", "0x9824425a": "takeOrder(uint256,uint256,uint256,uint256)", "0x0494630f": "oraclize_query(uint256,string,string[4],uint256)", "0xb21bce4c": "vote(bytes,bool)", "0x12c8052f": "won()", "0x3f2f1596": "setupTreasury(address,uint256)", "0x446fbcd1": "CredSign()", "0x61584936": "sealedBids(bytes32)", "0x61d585da": "state(bytes32)", "0x55234ec0": "remaining()", "0xbba91ea7": "getHomeadvIndex(uint256)", "0x6620a935": "sendToOwner()", "0x9450b1c8": "addCharityFundation(string,string,string)", "0x3ccb7dc9": "CrowdFund(uint256,uint256)", "0xbb510a77": "createChannel(address,uint256)", "0x0138e31b": "_jAdd(uint256,uint256,uint256,uint256)", "0xc4321adb": "investInTheSystem(uint256)", "0x83f95f13": "openClaim(string)", "0x0eb495c2": "pushCity()", "0xdeb6930c": "PriceTicker()", "0x8ae475a9": "notorize(string)", "0xf24e4a15": "Purge()", "0x0d2560ee": "addMe()", "0x446a7974": "Fokitol()", "0x86c57fcc": "b32ToBytes(bytes)", "0xbe71248a": "payWinner()", "0x541d920c": "commit(bytes,string)", "0xae0a6b28": "signature(string,bytes32)", "0x4f9d719e": "testEvent()", "0x25d4bdeb": "LookAtCollectedFees()", "0x8eec99c8": "setNewAdmin(address)", "0x45e965cd": "strConcat(string,string,string,string)", "0x9c4baf27": "Skywalker(address,address)", "0xbe1c766b": "getLength()", "0x23145ca0": "forceCheck()", "0xb20d30a9": "setDailyLimit(uint256)", "0xb29f0835": "doIt()", "0x718bd6dd": "setRequestUntil(uint8)", "0xb144adfb": "balance_of(address)", "0x315fdea3": "TreasureChest()", "0xf7149220": "RNG()", "0xf1b3f968": "getRaceEndBlock()", "0xb2f2588b": "sortNumbers(uint8[3])", "0xab470f05": "getCaller()", "0x5c3d005d": "demote(address)", "0xa8659216": "setInitialLockinDays(uint256)", "0xea7a7184": "testGetBalanceDb()", "0x05215b2f": "createStandardToken(uint256)", "0x61886014": "combineDice(uint8,uint8)", "0x3397ca17": "numBalanceRecords(address)", "0xee650248": "vote(uint256,int8)", "0xd9d73887": "Diana()", "0xad1ef61e": "donkeyInvested(address)", "0xcaed4f9f": "DataService()", "0x061ea8cc": "countByOwner(address)", "0x88782386": "UnicornMilk()", "0xae978f08": "getLatestTweet()", "0x4a30f976": "censorship(uint256,bool,bool)", "0x3233c686": "claimerDeposit()", "0x6cf9cc58": "registerResource(bytes,uint256,bytes,string)", "0x6939864b": "lotteryState()", "0xd7ed7453": "redeemWinnings(uint256)", "0x6f9a023c": "theultimatepyramid()", "0xb0c7f709": "kingAutomaticCollectFee()", "0xb974b0a3": "allData()", "0x6a9d2afd": "playToWinTest(uint256)", "0xb9a904f9": "testUnauthorizedSetBetaPackage()", "0xc368109c": "monster_hp(uint256)", "0x0380e2f3": "getHashOfTheSignedDocument()", "0x13d4bc24": "buyTokenProxy(address)", "0xc36af460": "getLatest()", "0xda0774ad": "getCallFeeScalar(uint256,uint256)", "0x46ddb7db": "setAccountBalance(address,uint256)", "0xb5b33eda": "scheduleCall(address,uint256)", "0x9131d803": "testSetFrontend()", "0x3e0a322d": "setStartTime(uint256)", "0x84ad6ff3": "ReversibleDemo()", "0x17c65aa7": "getMaxLossAfterTrade(address,uint256,int256,int256)", "0xcf2e3efc": "GetBankAccountBalance()", "0x877653f0": "_storeBalanceRecord(address)", "0x57764094": "getRate(uint256)", "0xf9a794ad": "EtherLovers()", "0x3bcf7d22": "newBribedCitizen(address)", "0xed88c68e": "donate()", "0x57e6c2f4": "isAuthorized()", "0x7fefde53": "WillRegistry()", "0x235c002d": "transferOther(address,address,uint256)", "0x7ac37d58": "ownerTransferEther(address,uint256)", "0x26881518": "setupFee(address)", "0xc24a0f8b": "endDate()", "0x8006745b": "getPayout(address)", "0xa068e8d3": "convict(uint256,uint256,uint256,uint256)", "0x612e45a3": "newProposal(address,uint256,string,bytes,uint256,bool)", "0x16bac350": "overthrow(string)", "0x913f424c": "_ecMul(uint256,uint256,uint256,uint256)", "0x7318b453": "setVotetUntil(uint8)", "0xc6ed8e1b": "getApprovedProxys()", "0x1d7e1f68": "getContentRank(address,uint256)", "0x99bb875c": "funeralAndBirth(bytes,int256,bytes)", "0x36dfe260": "payOneTimeReward()", "0x830953ab": "claimAmount()", "0x025bbbe5": "newSale(bytes16,uint256,uint256)", "0x23add736": "claim(uint256,uint256,uint8,bytes,bytes)", "0x838445e8": "EtherAds(address,address,address)", "0xd96d7ea2": "PRE_EXECUTION_GAS()", "0x8ea822d8": "createThings(bytes32[],uint16[],bytes32[],uint16[],uint88)", "0x2ae87a70": "getNumContents(address,uint256)", "0xd95a2d42": "lendGovernmentMoney(address)", "0xebf6e91d": "hit(uint256)", "0x590a4595": "createNewChain(bytes)", "0x66098d4f": "plus(uint256,uint256)", "0x7cbcc254": "__reset__()", "0x432c685f": "trustClient(address)", "0x419db07b": "generousFee()", "0xac4e73f9": "proposeReverse(string,address)", "0x017972af": "getNumbersFromHash(bytes32)", "0x09241200": "wasSuccessful()", "0xb60e72cc": "log(string,uint256)", "0x501e8428": "getPart(bytes,uint256)", "0x1a9360dd": "checkDate()", "0xdcf8113e": "campaignEndedSuccessfully()", "0xe2dede94": "getNode(uint256,uint256)", "0x2090cf8b": "consultBalance(address)", "0x05b765ea": "getCertifierStatus(address)", "0xc82aac47": "searchByTag(bytes32)", "0x739b47ca": "recordWin(address)", "0x6edb4cf6": "testThrowRetractLatestRevisionDoesntHaveAdditionalRevisions()", "0xe977992d": "Doubler()", "0x85b31d7b": "myInfo()", "0x7c72e273": "auctionFinalize(bytes32)", "0x33613cbe": "getBondBalance(address)", "0x19483cd1": "checkHash()", "0x135128c2": "CounterPartyDeposit()", "0x6985e46e": "getConflictResolver()", "0xdb2a0cb7": "HumanStandardTokenFactory()", "0x55db4092": "setTOS(address,bool)", "0xc388cca6": "testBitAndFailIndexOOB()", "0x7c3a00fd": "interestRate()", "0xea46193e": "getEtherBalance()", "0x98ea5fca": "depositEther()", "0xbc4b3365": "addFunds(address,uint256)", "0xf9e05ed9": "sha(uint128)", "0xa1920586": "offer(uint256,uint256)", "0x0230a07c": "releaseDeed(bytes32)", "0xfb09b1ac": "testBalanceOfReflectsTransfer()", "0x058aace1": "divest()", "0xcfae3217": "greet()", "0x25209260": "PrepareRoll(uint256)", "0x10c1952f": "setLocked()", "0xb6013cef": "finalize(uint256,uint256)", "0xd98b9bb5": "placeBid(address,uint256)", "0x5f972df8": "_jDiv(uint256,uint256,uint256,uint256)", "0xca7dc5b1": "getNumberOfTweets()", "0x366a68dc": "setBlockLock(uint256)", "0x09ae9452": "PreICOProxyBuyer(address,uint256,uint256,uint256,uint256)", "0xed47ca94": "debug_verifySharesTreeSubmission(uint256[],uint256[],uint256,uint256,uint256,uint256)", "0x93c94acb": "calculateRewards(uint256[3][3])", "0x41304fac": "log(string)", "0x7a427d98": "forceReturn()", "0xf0a78538": "scheduleTransaction(uint256,bytes)", "0x29f1bff4": "withdrawFromChildDAO(uint256)", "0xeb947f19": "ExampleResourcePool()", "0xfd339d18": "testAuthorityTryAuthUnauthorized()", "0x669e48aa": "get(uint256,uint256)", "0x6a4b6aa5": "untrustedChildWithdraw()", "0xd850288b": "etherlist_top()", "0xc2cf7326": "hasConfirmed(bytes32,address)", "0x16e55626": "getDogName(address)", "0x36e6b92e": "taskProcessedWithCosting(uint256,uint256)", "0xed62cf1f": "setCanCall(address,address,bytes,bool)", "0xbdfdb519": "accept(string,uint256,uint16)", "0x5322f0c5": "getChannelOwner(bytes)", "0xc51cf179": "calcBaseFeeForShares(uint256)", "0x299e7318": "resolveVoting()", "0xf2b445ad": "rowround(uint256,uint256)", "0xfff3c457": "readMessages(uint256)", "0x85952454": "newOwner(address)", "0x6a8c2437": "totalRescues()", "0x5e03d393": "setAccountFrozenStatus(address,bool)", "0x4dc43eaf": "setTreasury(uint256,uint256)", "0x534878fb": "reply(address,address,bytes32,bytes32)", "0x80c951bf": "currentClaimPriceInFinney()", "0x6e2cde85": "drawPot(string,string)", "0xef4592fb": "getResult(bytes)", "0x836d6d66": "WeeklyLotteryB(address,uint256)", "0x8dc45377": "getDuel1(uint256)", "0x96e438a1": "reclaimDeposit(uint256)", "0x3059ac30": "Escrow(address,address)", "0xd2c5c368": "testFailRestartNotUpdatable()", "0x423e7e79": "_dispatchEarnings()", "0x28d3ad3f": "getPot(uint256)", "0x939a79ac": "demo(string)", "0x842bc37b": "GetSmallCotractIndex(address)", "0x1a26ed1c": "validateReservedWindowSize(uint256,uint256)", "0xf295206f": "_unsafeSend(address,uint256)", "0xec0b4153": "getMoneyness(int256,uint256,uint256)", "0xd62b255b": "setOwner(address,string)", "0x97c3ccd8": "ban(address)", "0x1f0c1e0c": "getEventTokenAddress(bytes32,uint256)", "0x714064f3": "BreakableBond(address,address,uint256)", "0x857d4c07": "throwScraps(uint256)", "0x02dc2e1d": "queuePayment(bytes)", "0xc392f5a0": "getAllPackageReleaseHashes(string)", "0x36ffa905": "getMyProposals()", "0xb1050da5": "newProposal(address,uint256,string,bytes)", "0x34dbe44d": "getLastBlockNumberUsed()", "0xb47784d9": "testControlDisownNotOwner()", "0x560bb612": "SignatureValidator(address)", "0xc45aa04c": "queryShareholders(bytes,uint256)", "0xbf1fe420": "setGasPrice(uint256)", "0xc0a963c9": "notifyWinner(address,uint256)", "0x14167bf0": "oraclize_query(string,string[])", "0x8f9df278": "newEntry(int256,bool,uint256,int256,string,bytes32,address,uint256[])", "0xa361b184": "move(bytes32,bytes32)", "0xd2b0d554": "getDisclaimer()", "0x008a745d": "claimDividendShare(uint256)", "0xe436bdf3": "Draws(uint256)", "0xfc89aff6": "submitVerifiedUsers(address[])", "0x6ebf10fe": "storeHeader(bytes,address)", "0x67f12ecf": "validate(address,uint256,uint256[101][])", "0x738486bd": "BeerCoin(uint256)", "0x433d4aab": "resolve(uint8,uint8)", "0xd12c1e28": "badgesOf(address)", "0x29cd62ea": "setPubkey(bytes32,bytes32,bytes32)", "0x592685d5": "getWindowStart(address,address)", "0xde5d953a": "logSingleIndex(bytes,bytes,uint256)", "0xc51be90f": "query_withGasLimit(uint256,string,string,uint256)", "0xc7d6faf1": "easyPropose(address,uint256)", "0xf59f99ee": "createNextGeneration()", "0xd8389dc5": "hash(bytes32)", "0x9aaf442c": "applyCensorship(uint256)", "0x9243e088": "setEnforceRevisions(bytes20)", "0x9229c504": "new_mainPlayer(address)", "0xa4325485": "getCreatorBalance()", "0x345006b6": "getGenerationForCall(address)", "0xed2b8e0b": "getPoolRotationDelay()", "0x9d888e86": "currentVersion()", "0xb9e6f1d9": "get_amount()", "0x37a6b9f8": "recordCallback(address,uint256,bytes,bytes)", "0xaacc5a17": "getRandom()", "0xa293d1e8": "safeSub(uint256,uint256)", "0x45362978": "query1(string,string)", "0xd6ca8ccb": "disown(bytes20)", "0x9f5f7c7f": "tokenSplit(address,address,address,uint256)", "0x4a5db3b5": "authorizeAddress(address)", "0x278b8c0e": "cancelOrder(address,uint256,address,uint256,uint256,uint256,uint8,bytes32,bytes32)", "0x272cda88": "EternalDB()", "0x5a74dee5": "multiAccessRemoveOwnerD(address,address)", "0xe6febc9b": "investorWithdraw(uint256)", "0xda6b31b9": "testErrorTransferToNullAuthority()", "0xddb5b3ac": "SellTokens()", "0x96d02099": "rsplit()", "0x741e2345": "registerMany(address,uint256,int256,uint256,bytes20,address,bytes)", "0xe79a198f": "unregister()", "0xc51bf934": "CEILING()", "0xd60dcb5d": "Switch()", "0xcc8b34ab": "CrowdCoin()", "0xb74e452b": "today()", "0xa2bb5d48": "get_username(address)", "0x4401ff5c": "sellShares(bytes,uint8,uint256,uint256)", "0xde39acea": "get32(bytes,uint256)", "0xb98fdc36": "IconomiToken(uint256,string,uint8,string,uint256)", "0x83e78b31": "bet(uint8,bool,uint8)", "0x03bda14e": "raiseMaxNumBets(uint256)", "0xc3c95c7b": "getMarket(bytes32)", "0xc2b6b58c": "isClosed()", "0x51017702": "isOutcomeSet(bytes32)", "0x6f8b44b0": "setMaxSupply(uint256)", "0x7b760537": "updateLatestRevision(bytes20,bytes32)", "0x66772438": "computeResponse(uint16)", "0x2a714078": "triggerAuth()", "0x505fb46c": "add(uint256,uint256,uint256)", "0x8ac0ca36": "buyViaJohan()", "0x95a078e8": "hasAccess(address)", "0x4245b0f7": "Lottery()", "0xb5deeca7": "BaseRegistry()", "0xc5b1d9aa": "newRound()", "0x7f480f9d": "processDividends(address)", "0xf8bd526e": "setCoinageContract(address)", "0x21970c0c": "pay_royalty()", "0xa95d017d": "getRevisionBlockNumber(bytes32,uint256)", "0x56fa47f0": "split(address)", "0xe06174e4": "settings()", "0x0b97bc86": "startDate()", "0xe28fed1e": "userRescues(address)", "0x46af23f5": "InstantLottery(address,address,bool,address)", "0x39b50688": "cancelSellOrder()", "0xc27b2c2d": "collectEarnings()", "0x55241077": "setValue(uint256)", "0x7f3bd56e": "disburse(address,uint256)", "0xc19d93fb": "state()", "0x4500054f": "isCancellable()", "0xdb318833": "_ecAdd(uint256,uint256,uint256,uint256,uint256,uint256)", "0x810a882f": "setConfigBytes(bytes32,bytes32)", "0xa991cb0e": "respond(uint256)", "0x1177892f": "getBalanceByAdress(address)", "0xf18d20be": "adminWithdraw()", "0x77d32e94": "ecrecovery(bytes32,bytes)", "0x98e7ea43": "reward(uint32[],address[])", "0xc26aa3c9": "lockUnicorn(uint256)", "0xe10e5dce": "_build(bytes)", "0x5f17114e": "TimeDeposit()", "0xfbcbc0f1": "getAccount(address)", "0x79216f5f": "add_monster(uint16,uint16,uint16)", "0xa200dc73": "getNextShareholder(address)", "0xe0a70811": "restart(bytes20,bytes)", "0x9431f5f0": "withdrawFees(bytes)", "0xdc75f2db": "multiowned(address[],uint256)", "0x18b749c4": "payEther(uint256)", "0xf4b2dfea": "Matching_Finneys()", "0xc3b8bfe5": "transferIfNoHF(address)", "0x70961774": "getBlockCreatedOn()", "0xadd43c59": "EtherTopDog()", "0x052b2aa7": "getRegistrants()", "0x6cd22eaf": "updateAuthority(address,bool)", "0xe1f21c67": "approve(address,address,uint256)", "0x579cdf17": "getAdminName(address)", "0x9b619d3b": "_deleteAllPackedRevisionBlockNumbers(bytes32)", "0xb45105b2": "post(string,address,string)", "0xb0c8f9dc": "add(string)", "0x8cdfb1e6": "transferIfHF(address)", "0x8a120dc9": "testBitEqualFailIndexOOB()", "0x482961e1": "updateReading(uint256,uint256)", "0x4f76cb02": "testGetBitFailIndexOOB()", "0xf5c98aff": "GreeterB(bytes)", "0x671dacdc": "CalculateSqrt(uint256)", "0xce592586": "setThresold(uint256,uint256)", "0x6e1b6bcc": "checkMyBet(address)", "0x784813e0": "lookupBet(uint256,uint256)", "0x4a7e049e": "getFullCompany(address,uint256)", "0x32e7c5bf": "B()", "0x2d49ffcd": "getLocked()", "0x0965bf7d": "processProposals()", "0x2db89533": "Auth(uint8,address)", "0x3e8f5b90": "setConfig(string,uint256)", "0x8e7cb6e1": "getIndex(uint256)", "0x38557648": "executeSellOrder(address)", "0xcb712535": "_transferFrom(address,address,uint256)", "0x611f69de": "__proxy_motion(address,uint256,uint256,bytes)", "0x23647398": "testThrowRetractNotOwner()", "0xd4065763": "returnRemainingMoney()", "0x82b2e257": "getTokenBalance()", "0x0b3ed536": "claimDonations(uint256)", "0x2850c72a": "debug_extendCoinbaseTxOutput(uint256,uint256)", "0x1b00fe51": "testHypothesis()", "0xda333ca6": "payOut(uint256)", "0x02556de3": "updateMajorTree(bytes32)", "0x5a353193": "KrakenPriceTicker()", "0xc204f9f1": "_transferFromToICAP(address,bytes32,uint256)", "0xa99e7e29": "register(bytes,address)", "0xbe3945e4": "getFee(address,address,uint256)", "0xdb0e127a": "openDoor()", "0x6eb7b4c2": "underdogInfo(uint256)", "0x4fa99dd0": "Matching_Ethers()", "0x8f731077": "extractAllowanceRecordLength(address)", "0x3d5db1c2": "incrUserOnholdBal(address,uint256,bool)", "0xd930a90b": "testFailMoveBalanceDueToInsufficientFunds()", "0x334ef224": "testThrowsUpdateLatestRevisionNotOwner()", "0x86a50535": "voteFor(uint256)", "0x3b8e6f2e": "balanceAt(address,uint256)", "0xba51a6df": "changeRequirement(uint256)", "0xd09de08a": "increment()", "0x6b3a87d2": "WatchWinningPot()", "0x6bdbf8e6": "concat()", "0x53aab434": "buyIn()", "0x5ea187c9": "BuildByteArray(bytes)", "0xced92670": "changeMultiplier(uint256)", "0x3a7fb796": "mintGreen(int256,address,uint256)", "0x47372325": "getChannelSize(address)", "0x0674763c": "assert(bool)", "0x582ca57b": "get_associations()", "0x32829a23": "OpenBankAccount()", "0x23dc42e7": "query1(uint256,string,string)", "0x3f9f5b68": "setPreviousID(uint256,int256)", "0x964c836c": "receiveExecutionNotification()", "0x7acbfb65": "setOwner(uint256,uint256)", "0x4e10c3ee": "transferWithoutReward(address,uint256)", "0x7fcf3a2f": "throwFooBar()", "0x214c9d50": "WritedrawStatus()", "0xc478fc37": "EtherWheel(uint256,uint256,uint8)", "0x72929b56": "getKudosPerProject(address)", "0xf8b71c64": "rewardTo(address,uint256)", "0xe916d0f0": "doBalance(address)", "0x7b464e93": "prescriptions(bytes32)", "0x28472c6c": "claimComputation(bytes,bytes)", "0x0994a0a0": "DSTokenTest()", "0x2b291eb6": "UserAddTicket(bytes)", "0xa819819b": "sweepDeityCommission(uint256)", "0xcea943ee": "getSaleConfig()", "0x92c8eb96": "DSFalseFallbackTest()", "0x3106fea0": "voteOnProposal(uint256,bool,uint256)", "0xaf9a3f9b": "hashName(string)", "0xcbf0b0c0": "kill(address)", "0x717fedf0": "getFirstActiveDuel1()", "0x2fa7cbfb": "getExecCost(uint256)", "0x07e00bcb": "kissBTCCallback(uint256,uint256)", "0x1b769e74": "testThrowsRestartNotUpdatable()", "0x696bda86": "submitProposal(uint256,bytes)", "0x4757f1d2": "redeemAllOutcomes(uint256,uint256)", "0xbb84d362": "splitProfitVIP_only_Dev()", "0x618fa9ce": "getBotBillingIndex(uint256,uint256)", "0x32a2c5d0": "getContractAddress()", "0x268d50fe": "ownerSetHouseEdge(uint256)", "0x1d57bcf7": "ProofLibInterface()", "0x01cb3b20": "checkGoalReached()", "0x510f44cb": "TestFactoryUser()", "0x54ba7daa": "enter(bytes,bytes)", "0xb4787dc5": "linkEID(bytes,bytes)", "0x228cb733": "reward()", "0xca6d56dc": "addMember(address)", "0xb0de1cb7": "publish(uint64,bytes,uint64)", "0x84a7b223": "Canary(address)", "0x09fc8f6d": "isTokenUpgraded(bytes32)", "0xf32efd3c": "recoverUser(address,address,uint256,uint8,bytes32,bytes32)", "0x5b65b9ab": "setFee(uint256,uint256,uint256)", "0x6056969b": "announce(bytes32)", "0x40fdf515": "issuetender(address,uint256,uint256)", "0x329ce29e": "buyTile(uint256)", "0xbd02e4f6": "calcRandomNumberAndGetPreliminaryGameResult(uint256,uint64)", "0xa5dfee67": "testThrowsCreateNewRevisionNotUpdatable()", "0x2b16b56a": "setIndex(uint256,uint256)", "0x5fe27ab0": "createHKG(address)", "0x0aeacb5e": "getTotalRecords()", "0xc3fa5f93": "BlockScheduler(address,address)", "0x3d21aa42": "sendApproval(address,uint256,address)", "0x1aadcc34": "convertGreyGreen(uint8,uint8)", "0x7fef036e": "totalEntries()", "0x07da68f5": "stop()", "0x545e7c61": "deploy(address,address)", "0x4e69d560": "getStatus()", "0x5a9f2def": "scheduleCall(bytes4,bytes,uint256,uint256)", "0x2a745971": "BlockKing()", "0x88a1e895": "test2Fails()", "0xa0afd731": "dividendBalance(address)", "0x5a9b0b89": "getInfo()", "0x3dd7c1b9": "newProduct(string,string,uint256,uint256)", "0x22593300": "Small(address)", "0x59e2d30e": "testThrowBlobStoreNotRegistered()", "0xe5782fd5": "setFeeStructure(uint256,uint256,uint256)", "0x4c6b25b1": "results(bytes32)", "0xd1af8a5a": "LinkerExample()", "0x2bed55b0": "buildDSEasyMultisig(uint256,uint256,uint256)", "0x10f13a8c": "setText(bytes32,string,string)", "0x30c0f8d6": "scheduleTransaction(address,bytes)", "0x4aa16737": "enter(uint8)", "0x53c84526": "setSmartAffiliateContract(address)", "0x502414e4": "marketMaker(string)", "0xace523c4": "createReferendum(string,string,uint256,uint256)", "0x253459e3": "feesSeperateFromBalanceApproximately()", "0x655388be": "walkTowardsBlock()", "0x7c25f260": "Government()", "0x4d5b080c": "scheduleTransaction(uint256,address,uint256)", "0xa77b2e37": "Coin()", "0xdda3342b": "ReplicatorFactory()", "0x796b89b9": "getBlockTimestamp()", "0x4311de8f": "ownerWithdraw()", "0xe6d9bb0f": "secondsUntilEnd()", "0x418cf199": "setEstimateCost(uint256,uint256)", "0x57006864": "checkBetParity(uint8)", "0x411c4e72": "ModifyFeeFraction(uint256)", "0x5674a3ed": "runLottery()", "0xe3da41b5": "sortWinningNumbers(uint8[5])", "0x69433e12": "setExchange(uint256)", "0xcd9380d5": "testSetBalanceSetsSupplyCumulatively()", "0x8c546f81": "GNT()", "0x32013ac3": "preallocate(address,uint256,uint256)", "0x60c6b3a5": "claim(bytes,address,uint256,uint8,bytes,bytes)", "0xe6e8c692": "computeResponseFirstHalf(uint256,uint16)", "0x362af076": "createRequest(address[3],address,uint256[11],uint256,bytes)", "0x31a3a506": "closeFunding()", "0x244ded7a": "ChangeOwnership(address)", "0xfb87d5ea": "TransactionRequest(address[4],address,uint256[11],uint256,bytes)", "0x704b6c02": "setAdmin(address)", "0x47e40553": "nextRound()", "0xc4128b6d": "upgradeCount()", "0x38bbfa50": "__callback(bytes32,string,bytes)", "0xd96de4ce": "AdminDrawError()", "0xba5a2d33": "exitPool(address)", "0x05f8b6f5": "_rewireIdentities(bytes32[],uint256,uint256,uint32)", "0xdcfa9cc0": "testProxyCall()", "0x367bbd78": "strlen(string)", "0x068c966b": "DrawDetails(uint256)", "0xe29fb547": "scheduleCall(bytes4,uint256,uint256,uint8,uint256)", "0xc0171112": "timestamp(uint64)", "0xc398f030": "expire(uint256,uint8,bytes,bytes,bytes)", "0xfd782de5": "Proxy()", "0x52c98e33": "checkClaim(address,uint256,uint256)", "0x960d8cd3": "testFailUpdateLatestRevisionNotOwner()", "0xa4fde8bc": "player_declare_taking_too_long()", "0x539e2bfb": "secondChainedCallback(uint256)", "0xfa14df6b": "getChangeRecipientFee()", "0x85528394": "currentClaimPriceWei()", "0x615664ba": "Market()", "0x77e4fb04": "testFailNotEnoughValue()", "0xda5c0a7c": "testDisown()", "0x2a095fbe": "unlinkEID(bytes,bytes,address)", "0xfc9e53df": "setNextRegistrar(address)", "0x74388347": "checkBetDozen(uint8,address,bytes32,bytes32)", "0xd422e4e0": "takeFee(address,uint256,string)", "0xd98d011d": "getCandidateKey(bytes,bytes,bytes,bytes)", "0x5afa5036": "isCertified(address)", "0xc25e6908": "ultimateOutcomes(bytes32)", "0x20768ee8": "getProposalID()", "0xa480ca79": "collectFees(address)", "0xeca5c793": "testErrorUnauthorizedNameRegister()", "0xfcfff16f": "open()", "0xff08d2b0": "PayMiners()", "0x7817a60f": "acceptMember(address,string)", "0x3448c7d6": "createHistory(bytes,address,address)", "0x01fd89a4": "getFlags(bytes20)", "0x7c7c7695": "getAccountID(address)", "0x40275f85": "getPersonalDepositAddress(address)", "0xcf8eeb7e": "subBalance(address,uint256)", "0xfe71aec5": "LittleCactus()", "0xff1b4341": "easyPropose(address,uint256,uint256)", "0xe820a32f": "vetoPayout(uint256,uint256)", "0xa126c5df": "GAS_TO_AUTHORIZE_EXECUTION()", "0x3da0ac79": "compare()", "0x17b3a34b": "_addIdentities(uint256,bytes32[])", "0xdf25ee23": "getIndexId(address,bytes)", "0x2da0d1ea": "etherSold()", "0xb964608d": "get_return_by_level(uint256)", "0xd8589be3": "CoinFlipper()", "0x3e5fd9b5": "dEthereumlotteryNet(address,address,bool,address)", "0x7d60e343": "getFileListSize()", "0xdcaa5620": "findNextWeekday(uint256,bytes)", "0x4e417a98": "callData()", "0xe94acf0e": "TinyRouter(address)", "0x0ae5e739": "grantAccess(address)", "0xd1f59db9": "isLatestMinorTree(bytes32,bytes32)", "0x6a357465": "payHours(address,uint256)", "0xd985f122": "RelayToolsTest()", "0xbd3f0965": "AiraEtherFunds(string,string)", "0x031d973e": "closeMarket(bytes32)", "0xcdd13701": "getEventHashes(uint256[256])", "0xa0440426": "purchaseProduct(uint256,uint256)", "0x54ea4000": "identify(address[])", "0xf34ed4e6": "RanDAOPlus(address)", "0xda82a035": "sweepCommission()", "0x2b20e397": "registrar()", "0x70d084c0": "SingularDTVCrowdfunding()", "0x1b370abb": "getPreviousNode(bytes)", "0x9a9c9c53": "DepositToBankAccount()", "0x5731f357": "oraclize_query(uint256,string,string,string)", "0x92d66313": "getYear(uint256)", "0xb7009613": "canCall(address,address,bytes4)", "0xe7740cf9": "revealPaper(string)", "0x699b328a": "randomize()", "0x5292af1f": "sendBalance(address)", "0xe9540395": "getRewardDivisor()", "0x42ce1488": "upload(string)", "0xe9fe799e": "registrantRemove(address)", "0x88102583": "safeCastSigned(uint256)", "0x42cbb15c": "getBlockNumber()", "0x6edbd134": "hasHash()", "0x1e0c7ed4": "setConfigBool(bytes32,bool)", "0xd6d7d525": "get(bytes)", "0xac20902e": "NormalizeMoney()", "0x5dc77e26": "andThen(string,address)", "0x48cd4cb1": "startBlock()", "0xc3daab96": "withdrawBond(uint256)", "0xa4136862": "setGreeting(string)", "0x62770252": "needsFuneral(uint256)", "0x12514bba": "transfer(uint256)", "0x7ca823d5": "getAverageChainWork()", "0xf99ff4df": "paged(uint256,uint256)", "0x0acf473b": "AdminCloseContract()", "0xf1cff4b5": "testBitsNotSetSuccess()", "0x30945443": "update(address,string,string)", "0xccbda1af": "getChannelByName(string)", "0x5acce36b": "getEndowmentBalance()", "0x57cfeeee": "transfer(address,uint256,bytes32)", "0x9d3c663f": "isBreakingCap(uint256,uint256,uint256,uint256)", "0x04dd69fa": "getGenerationIdForCall(address)", "0x302d350e": "firstChainedCallback(uint256)", "0xd7130651": "getCity(uint256)", "0x7e7a2fbf": "contribute_toTheGame()", "0xb660d77c": "switchMPO(address,address)", "0x9e281a98": "withdrawToken(address,uint256)", "0x5eb3f639": "assertTrue(bool,bytes)", "0x4dfd1b02": "setUint8(int8,uint8)", "0x90e3c278": "getShares(uint256[128])", "0xae169a50": "claimReward(uint256)", "0x85e68531": "revokeAccess(address)", "0xfeaa29d8": "insertProfitHere()", "0x64ee49fe": "scheduleCall(address,uint256,bytes4,uint256,uint256,uint8)", "0x7e904a48": "getNumContents(uint256)", "0x2d077ad0": "Latch()", "0xc67146a5": "check_bet(uint256,address,uint8)", "0x11c91914": "isUnderLimit(uint256)", "0xa668d7c9": "NiceGuyPonzi()", "0x249b4d0b": "removeTrustedIssuer(address,bytes)", "0xc81caae7": "acceptMember(address,string,string)", "0x3e4565d2": "testErrorUnauthorizedNameRegister2()", "0x7b1cbb13": "getChannelValue(bytes)", "0x2925ffc2": "modifyCommunityTaxes(uint256,uint256,uint256,uint256)", "0x93eec1fb": "setName(uint8,uint8,string)", "0xda7fc24f": "setBackend(address)", "0xe299beb3": "SimpleIndex()", "0xf9909915": "bulkStoreHeader(bytes,int256,bytes,int256)", "0xd743ca38": "newWinner(uint256,address,uint256,uint256,uint256)", "0x15dacbea": "transferFrom(address,address,address,uint256)", "0xee1b4828": "closeBooks()", "0x06c1df7b": "checkBetColumn(uint8)", "0x5c8a1053": "extend(string)", "0x7ca31724": "tokenId(address)", "0x124eaee6": "Identity()", "0xcd591822": "CanaryV7Fast()", "0xbeb92f55": "setCaller(address)", "0x342454c7": "isDigit(bytes1)", "0xaf93afdd": "Shipment(bytes,bytes,bytes,bytes,string,bytes,uint256,uint256,bytes,bytes,uint256,uint256,string,bytes,bytes,bytes)", "0x0f096163": "Chainy()", "0x0d0c2008": "TwoAndAHalfPonzi()", "0xe3083fb5": "removeFromContribution(uint256)", "0xeccb15bc": "SatPosition(int256,int256)", "0x68e4bd99": "testSetBitSuccess()", "0x2973e372": "isAlphaUpper(bytes1)", "0xeb455dc6": "sendBitcoin(string,uint256)", "0x3ef13367": "flushTokens(address)", "0xdd729530": "add_shield(uint16)", "0x8f6f988c": "setUltimateOutcome(bytes)", "0xf93589ce": "didWin(bytes)", "0x1df5e755": "Etherandom()", "0x85b1423e": "returnAll()", "0x26db7648": "proposedVersion()", "0x92a781d8": "changeBaseValue(uint256)", "0x17961d0f": "ord()", "0xeeda149c": "Register(address)", "0xfe6f0d82": "testConstructorEvent()", "0x7741b4ec": "RandomNumberFromSeed(uint256)", "0xa4a75edc": "registerDeal(address,address)", "0x7d242ae5": "setBasePrice(uint256,bytes)", "0xc8fdc891": "numberOfMonarchs()", "0x512f1e64": "orderBookLength()", "0xdb006a75": "redeem(uint256)", "0xd96a094a": "buy(uint256)", "0xd6b4ec12": "getDailyWithdrawalLimit()", "0x332f93a9": "nextPayoutGoal()", "0x3b591ea7": "AmountToForgeTheNextBlock()", "0xb69c0896": "BaseScheduler(address,address,uint256)", "0xba0179b5": "confirm(uint256)", "0xac7ffae3": "updt(uint256,string,uint256,uint256,string,string,address)", "0x88f53db1": "getDataRequest(uint256)", "0x5bd74490": "regProxy(address,address)", "0xffb1a6cb": "getWins(address)", "0x41d31feb": "get_read_only_keys()", "0x0870607b": "addSubUser(address)", "0xa311dd70": "setArray(uint8[10])", "0x49bf66d3": "addRegistryIntoNameIndex(address)", "0x1bf6c21b": "USD()", "0x64228857": "getRevisionCount(bytes32)", "0x6fd902e1": "getCurrentBlockNumber()", "0x0ecaea73": "create(address,uint256)", "0xa6027d53": "IconomiTokenTest(uint256,string,uint8,string,uint256)", "0x4a994eef": "setDelegate(address,bool)", "0x0f7d6673": "Channel()", "0x4c1b2446": "transmitInteger(address,bytes,bytes,uint256,uint16)", "0xa26759cb": "addFunds()", "0xd4625a3a": "equals()", "0x9948e493": "calcMarketFee(bytes,uint256)", "0xe27fe50f": "startAuctions(bytes32[])", "0x237e9492": "executeProposal(uint256,bytes)", "0x6a61e5fc": "setTokenPrice(uint256)", "0xa9b35240": "packageExists(bytes32)", "0xfbac3951": "isBlocked(address)", "0x7993e5c2": "Devcon2TokenForTesting()", "0x296ed88f": "testFailControllerInsufficientFundsTransferFrom()", "0x8b64d70e": "owner_set_time_limit(uint256)", "0xbac1e9f6": "getChannelSize(address,uint256)", "0x98d5fdca": "getPrice()", "0x67080f6e": "testThrowsSetEnforceRevisionsNotOwner()", "0xe97dcb62": "enter()", "0xbe7c29c1": "getNewDAOAddress(uint256)", "0x346b306a": "oraclize_query(string,string,string)", "0xb2aac51f": "lookupUser(string)", "0xf1eae25c": "mortal()", "0x50f07cf9": "setReadingDelay(uint256)", "0x5084da18": "fipsOwner(bytes20)", "0x164e68de": "withdrawFees(address)", "0x2bf1f9da": "restart(bytes32,bytes)", "0x66671c71": "BaseScheduler(address,address)", "0xc124e2ea": "checkBetDozen(uint8)", "0x4e543b26": "setResolver(address)", "0x8a9ffb90": "transfer(string,string,bool)", "0xdc3d4203": "createPatient(bytes32,bytes32,uint256,uint256,uint256,bytes32,uint256)", "0x1f201e39": "etherandomExecWithGasLimit(bytes32,bytes32,uint256,uint256)", "0xa5eb7a4e": "operated()", "0xdf32754b": "owned()", "0xeb08b304": "changeMeatProvider(address)", "0x553cc48d": "Player(string)", "0xa7dfc874": "unregister(bytes,address,uint256,bytes)", "0xd4649fde": "expire(uint256,uint8,bytes32,bytes32,bytes32)", "0xd014c01f": "enter(address)", "0x0b7623ba": "abs(int8)", "0x2e3be78d": "setPrecisionDirect(uint8)", "0x3fa6497f": "AdminAddFunds()", "0xe724529c": "freezeAccount(address,bool)", "0xcc131be1": "CreateNewDraw(uint256)", "0x7daa10ce": "getMyInfo()", "0x7e81b6aa": "KingdomFactory()", "0x2d9a37d3": "getMaxPayout()", "0x173825d9": "removeOwner(address)", "0x4c9ed763": "requestTokensBack()", "0xd337616e": "resetLottery()", "0x93503337": "isAllowed(bytes32,uint256)", "0xe1489191": "commission()", "0x1334a5e2": "eventCallback(uint8,address,address,uint256)", "0xe5a6b10f": "currency()", "0xa0bde7e8": "getShareDistributionWithTimestamp(bytes32)", "0xcaab0acc": "testThrowCreateRetracted()", "0xbb5d40eb": "isValid()", "0x48a490fb": "transferFromTreasury(address,uint256)", "0xfd7ac203": "TestToken()", "0x9c5d7030": "reimburseGas(uint256,address,uint256,uint256)", "0x7ae2b5c7": "min(uint256,uint256)", "0x039a21b8": "tryExecute(address,bytes,uint256)", "0x940f851c": "Ballot(uint8)", "0xdd54a62f": "content(string)", "0xbf8fc670": "sendToAggregation(uint256)", "0xc1cbbca7": "contribute(uint256)", "0x0efafd01": "getPlayerGainLossOnLastFlip()", "0xfe4667e9": "getMaxLossAfterTrade(address,uint256,uint256,int256,int256)", "0x36b1315c": "min64(uint64,uint64)", "0xfb72d24e": "shift_right(uint64,uint256)", "0x1aa3a008": "register()", "0x6fa8de90": "changeMeatParameters(uint256,uint256)", "0xd93e7573": "disown(bytes32)", "0xeacc5b3b": "safeSend(address,uint256,uint256)", "0x85c7a953": "WithdrawFullBalanceFromBankAccount()", "0xa48bdb7c": "results()", "0x8e1ffb19": "testThrowsRetractLatestRevisionEnforceRevisions()", "0xfd8055d2": "updateBOTBillingInfo(uint256,string,address,string,string,uint256)", "0xd72dec33": "changeVaccinHistory(address)", "0xf2b26d8f": "nextEtherForSale()", "0x6de00927": "GetUserRank(uint8,address)", "0xfad9bf9e": "storeBlockWithFeeAndRecipient(bytes,int256,int256,bytes,int256,int256)", "0x8d4e4083": "isFinalized()", "0x79a85e6c": "getProductInfo(uint256)", "0xa553a597": "configure(uint256,uint256,uint8,address)", "0x648621ec": "xnotify(string)", "0x4025b293": "redeemAllOutcomes(bytes32,uint256)", "0x1d2b7155": "activateImportFeeChargeRecord(address)", "0x9341231c": "sendOrThrow(address,uint256)", "0x31c6c4cf": "transferFromWithReference(address,address,uint256,bytes32,string)", "0x00e46700": "setMinimumPassPercentage(uint8)", "0xad71c687": "registerSystem(string,string,string,string)", "0xd224118f": "PrepareDraw()", "0xad04592e": "owner_deposit()", "0x4420e486": "register(address)", "0x3ffbd47f": "register(string,string)", "0x2fcb6628": "_stringGas(string,string)", "0x3d6a32bd": "createTradeContract(address,uint256,uint256,uint256,bool,bool)", "0x1437f9a3": "Set_your_game_number(uint16)", "0xe3a199d6": "testThrowCreateNewRevisionNotUpdatable()", "0x4e23a144": "fundUser(address,uint256)", "0xd5582205": "getCertifiedStudentAtIndex(uint256)", "0x2d592a34": "sellKissBTC(uint256)", "0xede8ebf3": "checkApprove(address,uint256)", "0x1e8c72b4": "incrUserAvailBal(address,uint256,bool)", "0xe0886f90": "at(uint256)", "0xb67fabdf": "scheduleTransaction(address,uint256,uint256,bytes)", "0xadf5e565": "verify(bytes,address,uint256,uint8,bytes,bytes)", "0x1d71a1cd": "newIncome(string)", "0xb09bc3bf": "try_to_get()", "0xb7e24979": "addThing(bytes)", "0x9a15f4f3": "getBlockHeader(int256,int256)", "0xf6a3d24e": "exists(address)", "0xdbecc372": "Example(uint256)", "0x2c7c4549": "PurchasableToken(uint256)", "0x0109f22e": "CrowdSale()", "0x8fbc3ecd": "BUFFER()", "0x69431ab6": "TokenCreation(uint256,uint256,address,string,string,uint8)", "0x4cb85356": "BranchSender(uint256,bytes32)", "0x528fd7b0": "manualPayExpiredDuel()", "0xf00aac7f": "ArrayRR()", "0xfee6d28c": "addSnapshot(string)", "0xc3da42b8": "c()", "0xbbe4fd50": "getNow()", "0xe6d95eb8": "DSAuthorized()", "0x7772a380": "isInGeneration(address,uint256)", "0xbd119967": "add_rating(uint256,uint256)", "0xb8aca90b": "CurrentGame()", "0x921b2d64": "mintTokens(int256,address,uint256)", "0x396ed0ab": "Burn()", "0x8040cac4": "testOverflow()", "0x5d068051": "sendFees(address)", "0x99f4b251": "mine()", "0x652f1f16": "addSignature(string)", "0x0382c254": "CheckHash(uint8,uint8,uint8,uint8,bytes32)", "0x6615dd83": "setSeedSourceB(address)", "0xb409da05": "logDoubleIndex(bytes,bytes,bytes,uint256)", "0xcd50d44f": "CheckRepresentment()", "0x35d129f6": "untag(string)", "0x2ef3accc": "getPrice(string,uint256)", "0x95ee1221": "isCancelled()", "0x3c925f16": "getAccountHolder()", "0x3c0dde1c": "_addPools(address,address)", "0xd3732642": "FastRealisticPyramid()", "0xe5225381": "collect()", "0x89c19ddb": "concat(string,string)", "0x3de9e4c6": "__transferFromWithReference(address,address,uint256,string)", "0xb463bcde": "testThrowsSetNotTransferableNotOwner()", "0xb17b94c1": "testSystem()", "0xa07daa65": "newRequest(uint256)", "0x2cc0b254": "init(address,bytes32)", "0x07d5b826": "buyAllOutcomes(bytes32,uint256)", "0xa5ebf389": "getMoneyTotals()", "0xc0aa18e7": "History()", "0xb1d51d31": "pay(uint64,address)", "0xc57a050e": "fairandeasy()", "0x7f301b83": "setMetadataHash(string)", "0xaa51793c": "isLosingBet(uint256)", "0xdb83694c": "getSaleInfo()", "0x85eac05f": "changeOwnerAddress(address)", "0x89ced196": "setNotUpdatable(bytes32)", "0x72c87075": "testBlockHeaderFetch()", "0x8963dab4": "getNodeId(bytes,bytes)", "0x2c4e591b": "totalGames()", "0x92b7d5b9": "getCurrentGaslimit()", "0xe0cfc05c": "testThrowsRetractLatestRevisionDoesntHaveAdditionalRevisions()", "0xe8038e25": "TokenSale(uint256,uint256,address)", "0x2f6ae467": "transferDocument(bytes,address)", "0x18178358": "poke()", "0x3cf885c4": "isBitSet(uint256,uint8)", "0x3fb0b2c9": "CancelRoundAndRefundAll()", "0x51cff8d9": "withdraw(address)", "0x89fcd099": "getApproval(address,address)", "0xca708230": "funnel()", "0x532e7e6a": "calcEarningsSelling(bytes,uint256,uint256[],uint8,uint256)", "0x91b7f5ed": "setPrice(uint256)", "0x66e5cb50": "stopTransfer(uint256)", "0xd1b1a22b": "set(string,uint256[],uint256[],uint256[],bool[],uint256[])", "0x147a5640": "_getAllRevisionIpfsHashes(bytes20)", "0x5cfd8c24": "ResetPonzi()", "0x5bbfe9b6": "_myGroupHelper()", "0x29cbdc86": "buyin(address,uint256)", "0x974654f4": "requiredGas()", "0x2145e36c": "testBitSetFailIndexOOB()", "0x6df3edef": "getSavedBytes()", "0x0c7de59d": "edit(address,bytes,bool)", "0x51404cbe": "forceDivestOfOneInvestor(address)", "0xb2353d69": "updateRightLottery(address)", "0xf223446c": "start_game(bytes32,uint8,uint32,uint16,address,uint256,uint8)", "0xd18dfdc9": "parrot(uint256)", "0x45590ec8": "addTag(uint256,string)", "0xcc2c2bcf": "MotionFactory(string,string,string)", "0xc8796572": "collectFees()", "0xd0d552dd": "setAsset(address)", "0x25fda176": "notify(address,uint256)", "0xfb95adeb": "testFailBlockhashInsuffiecientFee()", "0xaeb4f0d3": "RegisterTwo(address,address)", "0x986dcd4d": "setCycleLimit(uint256)", "0x270cfee1": "getTokenAccount()", "0x793cd71e": "cashOut()", "0x7ff729fc": "fillUpProject(uint256,uint256)", "0x06fdde03": "name()", "0x6104464f": "previousPublishedVersion()", "0x96b76c23": "stand(uint256)", "0xd0549602": "scheduleTransaction(address,uint256,uint256,uint256)", "0x6b1e564a": "challengeWinningOutcome(bytes32,uint16)", "0xc7102df7": "__stopBlock()", "0x229a4978": "batFund()", "0x51d38d5f": "addDeveloper(address,string)", "0x1b55ba3a": "Start()", "0x3fb27b85": "seal()", "0xf62cce34": "_clearRecordHierarchy(uint256,bytes32[],bytes32)", "0x030d406b": "entryPayout(uint256)", "0xfdc4b338": "authorizeExtension(uint256,bool,string)", "0xe8a5282d": "setConfig(bytes32)", "0xf2016a4f": "updateMinEthPerNotification(uint256)", "0x596c8976": "close(uint256,uint256)", "0x376fe102": "userId(address)", "0x7cf0ffcb": "forceDivestAll()", "0x9f87acd0": "exec(bytes32,bytes32,uint256)", "0xfc0c546a": "token()", "0xf60381a1": "stra2cbor(string[])", "0x018f5472": "isAUser(address)", "0x13bd4e2c": "_prepareAndSendReward()", "0x2baf4f22": "_safeFalse()", "0xc60ce271": "findNextMinute(uint256,bytes)", "0x0a874df6": "lookup(uint256)", "0x1e701780": "MICRODAO(address,uint256,uint256,uint256,address)", "0x403abbc7": "updateFirstActiveGamble()", "0x1d2dbb22": "CancelMyInvest()", "0x8ca4eef6": "getBuild(bytes32)", "0x775c300c": "deploy()", "0x9a79f4a8": "testFailHeaderInsufficientFee()", "0xdfca2f53": "LookAtPrizes()", "0xbc99c8be": "takerAddressAt(uint256)", "0x93423e9c": "getAccountBalance(address)", "0x3af39c21": "undefined()", "0xe8d1e961": "lockAccount(uint256)", "0xf8a8fd6d": "test()", "0x4e7ad367": "fireEventLog1Anonym()", "0xd96e5565": "testThrowsRetractNotRetractable()", "0x1e26fd33": "setBool(bool)", "0x692ad3a9": "round(uint256,uint256,uint256,uint256)", "0xf6458c6a": "toZ1(uint256[3],uint256)", "0xbcc6092a": "MyEtherBank()", "0x9ad4f98e": "BlocksureInfo()", "0x89eedf00": "setPdfHash(bytes,bytes)", "0xf1320af2": "exempt(address)", "0x29e30910": "testThrowCreateExistingNonce()", "0x905e6e42": "JSON_Test()", "0x78c2c849": "burnUnicorns()", "0xa5e62f02": "fallbackRP()", "0x69d79ad5": "moneySumAtSettlement(address,uint256,uint256,int256,uint256,uint256)", "0x20e647e1": "checkBetColor(uint8,address,bytes32,bytes32)", "0x41c12a70": "voteNo()", "0x892c0214": "NumberOfCurrentBlockMiners()", "0x8aa6f1b1": "setUltimateOutcome(bytes32)", "0xffcf21a9": "eventOracles(bytes,uint256)", "0x610285d2": "testControlRetractLatestRevisionDoesntHaveAdditionalRevisions()", "0x0a7f4239": "getAccountFundContract(address)", "0x136af582": "next(bytes,bytes,bytes,bytes,bytes,bytes,bytes)", "0x0e54b872": "registerUser(string,address)", "0xeefa597b": "isToken()", "0xeb06e65e": "allowanceFromProxy(address,address,address)", "0x083c6323": "endBlock()", "0x728af7ec": "getInterest(uint256,uint256)", "0x46c52b1a": "blockHexCoordsValid(int8,int8)", "0x741b3c39": "depositBond()", "0x5669c94f": "issueToken(address,string)", "0x51582ef3": "sendProxyTransaction(address,uint256,uint256,bytes)", "0x20965255": "getValue()", "0x631de4d6": "replace(address,address)", "0x2888f9d0": "updateMaxBet()", "0xc5ebeaec": "borrow(uint256)", "0xa66f7ad6": "signRelease(uint256)", "0x49cc954b": "twoYearsPassed()", "0xe4083daf": "create_game_invite(bytes32,address,uint32,uint32,uint8,uint16,uint8,address,uint256)", "0x3c2c21a0": "scheduleCall(address,uint256,bytes4)", "0xbb00fc55": "bookEarnings()", "0x2c60a055": "MapTest()", "0x306b031d": "getGenerationEndAt(uint256)", "0x85c78fac": "retryOraclizeRequest(uint256)", "0x0295d71b": "currentDepositLimit()", "0x72c7c85a": "minority()", "0x5b6b431d": "Withdraw(uint256)", "0xfa93019c": "getBlocks(uint8,uint8)", "0x19c47214": "getBlockVersion(bytes)", "0x291e6777": "sendVote(uint256,uint256)", "0xca6ad1e4": "setCustomGasPrice(uint256)", "0x1649cdcd": "testGetItemStore()", "0x80d9eaa6": "refCount()", "0xdbb833df": "investWithoutId()", "0x79ce9fac": "transfer(bytes32,address)", "0x97297467": "checkAndVerify(bytes)", "0x9ae4e388": "ChangeClientTokenAccount(address,bool)", "0x21bacf28": "getDefaultFee()", "0x01df7f30": "validateProposedThroneConfig(uint256,uint256,uint256,uint256)", "0xa10edc55": "GeneralPurposeProfitSplitter()", "0x206a44f3": "getNum(bytes,uint256)", "0x1381e400": "cancel(uint32)", "0x745a8be2": "flip32(bytes)", "0xcf158fe9": "scheduleTransaction(uint256,uint256,uint256)", "0x6b6a53fa": "testThrowsRestartNotOwner()", "0xc039daf6": "tokenCreationMin()", "0x644998ae": "maintain(int256,uint256,uint256)", "0xd5f37f95": "sign(uint256,uint256,address)", "0x19663f7f": "TransferAmountFromBankAccountToAddress(uint256,address)", "0x5dac1601": "SimpleStablecoin()", "0x478ae93c": "playToWin(uint256)", "0x41fa4876": "multiBlockRandomGen(uint256,uint256)", "0x8702735c": "setCapitol(uint256,uint256)", "0x73ffd969": "setMap(uint256,uint256,uint256)", "0xdf143fb7": "HackerGold(address)", "0x2e06c756": "post(string,string,string,uint256,uint256,address)", "0xf3bb9741": "commitmentCampaign(uint256,bytes32)", "0x86590955": "changeHeight(uint256)", "0xcef887b0": "storeBlockWithFee(bytes,int256)", "0x0cb749b6": "FutureBlockCall(address,uint256,uint8,address,bytes,bytes,uint256,uint256,uint16,uint256,uint256)", "0x392327b5": "owner_set_fraction(uint256)", "0x444dd6f3": "Elcoin()", "0x677342ce": "sqrt(uint256)", "0xe9a9c1b4": "get_party1_balance()", "0x0b7abf77": "TOTAL_TOKENS()", "0x17e875e3": "Transparancy()", "0x49437210": "getUpdatable(bytes32)", "0xa925d85e": "Exchange(address,address)", "0xe419f189": "multiAccessIsOwner(address)", "0xa8b60b93": "ackMsg(uint256,string)", "0x637e86eb": "totBOTs()", "0xf7ea7a3d": "setTotalSupply(uint256)", "0x74607d91": "patient(uint256)", "0x78710d37": "seven()", "0x8a65d874": "userStats(address)", "0x457f4d41": "hammer()", "0x45755dd6": "returnFunds(uint256)", "0x8caaaae6": "totalWeiPrice()", "0xc944a38e": "CharlyLifeLog(string,int256)", "0x49e65440": "setSymbol(bytes32)", "0x8e52cb51": "getRecordKey(bytes,bytes,bytes)", "0x048e2e94": "getAccountSize(address,uint256)", "0xead710c4": "greet(string)", "0xc3d23e10": "checkBet()", "0xd44f2d3d": "getInitialWithdrawalDone()", "0xebb71194": "withdrawFees(bytes32)", "0x756fb8c9": "getOptionChain()", "0xa538d287": "getMinMax()", "0x92d0d153": "t()", "0xc71e48d6": "setOutcome(bytes32,bytes32[])", "0xaf769eff": "Paper()", "0x29bed3bf": "EthereumRoulette()", "0x201dcd7a": "newChallenge(uint256,uint256)", "0x5a5383ac": "canExitPool()", "0xea98e540": "proxyTransferFromToICAPWithReference(address,bytes32,uint256,string)", "0x79716e43": "confirmTransaction(bytes32)", "0xa08d3f83": "Etheropt(uint256,string,uint256,uint256,bytes32,address,int256[])", "0xd9caed12": "withdraw(address,address,uint256)", "0x82f0d875": "makeHash()", "0x12b58349": "getTotalBalance()", "0x7102c138": "Standard_Token(uint256)", "0xde629235": "getCertificationDocumentAtIndex(address,uint256)", "0x55ee6afb": "Wallet(address,address)", "0xc7a1865b": "play(bytes32)", "0xf47efbca": "getMemberLinks(address)", "0x6b5caec4": "setBot(address)", "0x3b46a7df": "ivote(bool)", "0xb688a363": "join()", "0x85233869": "NumberOfMiners()", "0xed180443": "getUint256(int256)", "0x3023d0c4": "Ethstick()"} diff --git a/mythril/ether/asm.py b/mythril/ether/asm.py index 62990797..49ad1bb8 100644 --- a/mythril/ether/asm.py +++ b/mythril/ether/asm.py @@ -91,7 +91,13 @@ def disassemble(bytecode): instruction_list = [] addr = 0 - while addr < len(bytecode): + length = len(bytecode) + + if "bzzr" in str(bytecode[-43:]): + # ignore swarm hash + length -= 43 + + while addr < length: instruction = {} @@ -117,8 +123,10 @@ def disassemble(bytecode): if m: argument = bytecode[addr+1:addr+1+int(m.group(1))] instruction['argument'] = "0x" + argument.hex() + addr += int(m.group(1)) + instruction_list.append(instruction) addr += 1 diff --git a/mythril/ether/contractstorage.py b/mythril/ether/contractstorage.py index 4f17b555..1adcbea5 100644 --- a/mythril/ether/contractstorage.py +++ b/mythril/ether/contractstorage.py @@ -3,6 +3,7 @@ from mythril.ipc.client import EthIpc from mythril.ether.ethcontract import ETHContract, InstanceList import hashlib import os +import time import persistent import persistent.list import transaction @@ -47,11 +48,7 @@ class ContractStorage(persistent.Persistent): return self.contracts[contract_hash] - def initialize(self, rpchost, rpcport, rpctls, sync_all, ipc): - if ipc: - eth = EthIpc() - else: - eth = EthJsonRpc(rpchost, rpcport, rpctls) + def initialize(self, eth, sync_all): if self.last_block: blockNum = self.last_block @@ -61,6 +58,16 @@ class ContractStorage(persistent.Persistent): blockNum = eth.eth_blockNumber() print("Starting synchronization from latest block: " + str(blockNum)) + ''' + On INFURA, the latest block is not immediately available. Here is a workaround to allow for database sync over INFURA. + Note however that this is extremely slow, contracts should always be loaded from a local node. + ''' + + block = eth.eth_getBlockByNumber(blockNum) + + if not block: + blockNum -= 2 + while(blockNum > 0): if not blockNum % 1000: @@ -81,7 +88,7 @@ class ContractStorage(persistent.Persistent): contract_code = eth.eth_getCode(contract_address) contract_balance = eth.eth_getBalance(contract_address) - if not contract_balance or sync_all: + if not contract_balance and not sync_all: # skip contracts with zero balance (disable with --sync-all) continue diff --git a/mythril/ether/ethcontract.py b/mythril/ether/ethcontract.py index 02e4ab64..dd5622d6 100644 --- a/mythril/ether/ethcontract.py +++ b/mythril/ether/ethcontract.py @@ -8,11 +8,18 @@ class ETHContract(persistent.Persistent): def __init__(self, code, creation_code="", name="", address=""): - self.code = code self.creation_code = creation_code self.name = name self.address = address + # Workaround: We currently do not support compile-time linking. + # Dynamic contract addresses of the format __[contract-name]_____________ are replaced with a generic address + + code = re.sub(r'(_+[A-Za-z0-9]+_+)', 'aa' * 20, code) + + self.code = code + + def as_dict(self): return { @@ -66,12 +73,12 @@ class ETHContract(persistent.Persistent): expression = expression.replace(m, sign_hash) - tokens = re.split("( and | or )", expression, re.IGNORECASE) + tokens = filter(None, re.split("(and|or|not)", expression.replace(" ", ""), re.IGNORECASE)) for token in tokens: - if token == " and " or token == " or ": - str_eval += token + if token in ("and", "or", "not"): + str_eval += " " + token + " " continue m = re.match(r'^code#([a-zA-Z0-9\s,\[\]]+)#', token) @@ -84,11 +91,11 @@ class ETHContract(persistent.Persistent): m = re.match(r'^func#([a-fA-F0-9]+)#$', token) if (m): - str_eval += "\"" + m.group(1) + "\" in easm_code" + str_eval += "\"" + m.group(1) + "\" in easm_code" continue - return eval(str_eval) + return eval(str_eval.strip()) class InstanceList(persistent.Persistent): diff --git a/mythril/ether/util.py b/mythril/ether/util.py index ac6ea6f7..9ebc75d9 100644 --- a/mythril/ether/util.py +++ b/mythril/ether/util.py @@ -2,7 +2,6 @@ from ethereum.abi import encode_abi, encode_int from ethereum.utils import zpad from ethereum.abi import method_id from mythril.exceptions import CompilerError -import subprocess from subprocess import Popen, PIPE import binascii import os @@ -10,17 +9,21 @@ import re def safe_decode(hex_encoded_string): + if (hex_encoded_string.startswith("0x")): return bytes.fromhex(hex_encoded_string[2:]) else: return bytes.fromhex(hex_encoded_string) -def compile_solidity(solc_binary, file): - +def compile_solidity(file, solc_binary="solc"): + try: - p = Popen(["solc", "--bin-runtime", file], stdout=PIPE, stderr=PIPE) + p = Popen([solc_binary, "--bin-runtime", '--allow-paths', ".", file], stdout=PIPE, stderr=PIPE) stdout, stderr = p.communicate() + ret = p.returncode + if ret < 0: + raise CompilerError("The Solidity compiler experienced a fatal error (code %d). Please check the Solidity compiler." % ret) except FileNotFoundError: raise CompilerError("Compiler not found. Make sure that solc is installed and in PATH, or set the SOLC environment variable.") @@ -30,10 +33,21 @@ def compile_solidity(solc_binary, file): err = "Error compiling input file. Solc returned:\n" + stderr.decode("UTF-8") raise CompilerError(err) - # out = out.replace("[\n\s]", "") + m = re.search(r":(.*?) =======\nBinary of the runtime part:", out) + contract_name = m.group(1) + + if m: - m = re.search(r":(.*?) =======\nBinary of the runtime part: \n([0-9a-f]+)\n", out) - return [m.group(1), m.group(2)] + m = re.search(r"runtime part: \n([0-9a-f]+)\n", out) + + if (m): + return [contract_name, m.group(1)] + else: + return [contract_name, "0x00"] + + else: + err = "Could not retrieve bytecode from solc output. Solc returned:\n" + stdout.decode("UTF-8") + raise CompilerError(err) def encode_calldata(func_name, arg_types, args): diff --git a/mythril/exceptions.py b/mythril/exceptions.py index 7915c482..3a0103b3 100644 --- a/mythril/exceptions.py +++ b/mythril/exceptions.py @@ -1,2 +1,5 @@ class CompilerError(Exception): + pass + +class UnsatError(Exception): pass \ No newline at end of file diff --git a/mythril/support/loader.py b/mythril/support/loader.py index b4581d5b..5542c336 100644 --- a/mythril/support/loader.py +++ b/mythril/support/loader.py @@ -6,31 +6,43 @@ class DynLoader: def __init__(self, eth): self.eth = eth + self.storage_cache = {} - def dynld(self, contract_address, dependency_address): - logging.info("Dynld at contract " + contract_address + ": " + dependency_address) + def read_storage(self, contract_address, index): - # Hack-ish + try: + contract_ref = self.storage_cache[contract_address] + data = contract_ref[index] - m = re.match(r'(0x[0-9a-fA-F]{40})', dependency_address) + except KeyError: - if (m): - dependency_address = m.group(1) + self.storage_cache[contract_address] = {} - else: - m = re.search(r'storage_(\d+)', dependency_address) + data = self.eth.eth_getStorageAt(contract_address, position=index, block='latest') + + self.storage_cache[contract_address][index] = data + + except IndexError: + + data = self.eth.eth_getStorageAt(contract_address, position=index, block='latest') + + self.storage_cache[contract_address][index] = data - if (m): - idx = int(m.group(1)) - logging.info("Dynamic contract address at storage index " + str(idx)) + return data - dependency_address = "0x" + self.eth.eth_getStorageAt(contract_address, position=idx, block='latest')[26:] - else: - logging.info("Unable to resolve address.") - return None + def dynld(self, contract_address, dependency_address): + + logging.info("Dynld at contract " + contract_address + ": " + dependency_address) + m = re.match(r'^(0x[0-9a-fA-F]{40})$', dependency_address) + + if (m): + dependency_address = m.group(1) + + else: + return None logging.info("Dependency address: " + dependency_address) diff --git a/mythril/support/signatures.py b/mythril/support/signatures.py new file mode 100644 index 00000000..08037fa8 --- /dev/null +++ b/mythril/support/signatures.py @@ -0,0 +1,41 @@ +import re +from ethereum import utils + +def add_signatures_from_file(file, sigs={}): + + funcs = [] + + with open(file, encoding="utf-8") as f: + for line in f: + + m = re.search(r'function\s+(.*\))', line) + + if m: + funcs.append(m.group(1)) + + for f in funcs: + + m = re.search(r'^([A-Za-z0-9_]+)', f) + + if (m): + + signature = m.group(1) + + m = re.search(r'\((.*)\)', f) + + _args = m.group(1).split(",") + + types = [] + + for arg in _args: + + _type = arg.lstrip().split(" ")[0] + if _type == "uint": + _type = "uint256" + + types.append(_type) + + typelist = ",".join(types) + signature += "(" + typelist + ")" + + sigs["0x" + utils.sha3(signature)[:4].hex()] = signature diff --git a/mythril/support/truffle.py b/mythril/support/truffle.py new file mode 100644 index 00000000..81b775f7 --- /dev/null +++ b/mythril/support/truffle.py @@ -0,0 +1,87 @@ +import os +import re +import sys +import json +from mythril.ether import util +from mythril.ether.ethcontract import ETHContract +from mythril.analysis.security import fire_lasers +from mythril.analysis.symbolic import StateSpace +from laser.ethereum import helper + + +def analyze_truffle_project(): + + project_root = os.getcwd() + + build_dir = os.path.join(project_root, "build", "contracts") + + files = os.listdir(build_dir) + + for filename in files: + + if re.match(r'.*\.json$', filename) and filename != "Migrations.json": + + with open(os.path.join(build_dir, filename)) as cf: + contractdata = json.load(cf) + + try: + name = contractdata['contractName'] + bytecode = contractdata['deployedBytecode'] + except: + print("Unable to parse contract data. Please use Truffle 4 to compile your project.") + sys.exit() + + + if (len(bytecode) < 4): + continue + + ethcontract= ETHContract(bytecode, name=name, address = util.get_indexed_address(0)) + + contracts = [ethcontract] + + states = StateSpace(contracts, max_depth = 10) + report = fire_lasers(states) + + # augment with source code + + disassembly = ethcontract.get_disassembly() + source = contractdata['source'] + + deployedSourceMap = contractdata['deployedSourceMap'].split(";") + + mappings = [] + i = 0 + + while(i < len(deployedSourceMap)): + + m = re.search(r"^(\d+):*(\d+)", deployedSourceMap[i]) + + if (m): + offset = m.group(1) + length = m.group(2) + else: + m = re.search(r"^:(\d+)", deployedSourceMap[i]) + + if m: + length = m.group(1) + + mappings.append((int(offset), int(length))) + + i += 1 + + for key, issue in report.issues.items(): + + index = helper.get_instruction_index(disassembly.instruction_list, issue.pc) + + if index: + issue.code_start = mappings[index][0] + issue.code_length = mappings[index][1] + issue.code = source[mappings[index][0]: mappings[index][0] + mappings[index][1]] + + + if len(report.issues): + print("Analysis result for " + name + ":\n" + report.as_text()) + else: + print("Analysis result for " + name + ": No issues found.") + + diff --git a/requirements.txt b/requirements.txt index 50a451ee..7e302ad0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,6 +2,6 @@ ethereum>=2.0.4 ZODB>=5.3.0 z3-solver>=4.5 web3 -laser-ethereum==0.2.4 +laser-ethereum==0.4.0 requests BTrees diff --git a/security_checks.md b/security_checks.md new file mode 100644 index 00000000..8a21e95c --- /dev/null +++ b/security_checks.md @@ -0,0 +1,19 @@ +# Smart Contract Security Issues + +| Issue | Description | Mythril Detection Module(s) | References | +|------:|-------------|------------|----------| +|Unprotected functions| Critical functions such as sends with non-zero value or suicide() calls are callable by anyone, or msg.sender is compared against an address in storage that can be written to. E.g. Parity wallet bugs. | [unchecked_suicide](mythril/analysis/modules/unchecked_suicide.py), [ether_send](mythril/analysis/modules/ether_send.py) | | +|Missing check on CALL return value| | [unchecked_retval](mythril/analysis/modules/unchecked_retval.py) | [Handle errors in external calls](https://consensys.github.io/smart-contract-best-practices/recommendations/#use-caution-when-making-external-calls) | +|Re-entrancy| | [call to untrusted contract with gas](mythril/analysis/modules/call_to_dynamic_with_gas.py) | | +|Multiple sends in a single transaction| External calls can fail accidentally or deliberately. Avoid combining multiple send() calls in a single transaction. | | [Favor pull over push for external calls](https://consensys.github.io/smart-contract-best-practices/recommendations/#favor-pull-over-push-for-external-calls) | +|Function call to untrusted contract| | [call to untrusted contract with gas](mythril/analysis/modules/call_to_dynamic_with_gas.py) | | +|Delegatecall or callcode to untrusted contract| | [delegatecall_forward](mythril/analysis/modules/delegatecall_forward.py), [delegatecall_to_dynamic.py](mythril/analysis/modules/delegatecall_to_dynamic.py) | | +|Integer overflow/underflow| | [integer_underflow](mythril/analysis/modules/integer_underflow.py) | | +|Timestamp dependence| | | | +|Payable transaction does not revert in case of failure | | | | +|Call depth attack| | | | +|Use of `tx.origin`| | [tx_origin](mythril/analysis/modules/tx_origin.py) | [Solidity documentation](https://solidity.readthedocs.io/en/develop/security-considerations.html#tx-origin), [Avoid using tx.origin](https://consensys.github.io/smart-contract-best-practices/recommendations/#avoid-using-txorigin) | +|Type confusion| | | | +|Predictable RNG| | | [weak_random](mythril/analysis/modules/weak_random.py) | +|Transaction order dependence| | | | | +|Information exposure| | | | diff --git a/setup.py b/setup.py index 0469194c..5d1b52e3 100755 --- a/setup.py +++ b/setup.py @@ -2,11 +2,10 @@ from setuptools import setup, find_packages long_description = ''' -Mythril -======= - -Mythril is a reverse engineering and bug hunting framework for the -Ethereum blockchain. +Mythril is a security analysis tool for Ethereum smart contracts. It +uses concolic analysis to detect various types of issues. Use it to +analyze source code or as a nmap-style black-box blockchain scanner (an +"ethermap" if you will). Installation and setup ---------------------- @@ -25,23 +24,130 @@ Or, clone the GitHub repo to install the newest master branch: $ cd mythril $ python setup.py install -You also need a -`go-ethereum `__ node that is -synced with the network (note that Mythril uses non-standard RPC APIs -only supported by go-ethereum, so other clients likely won't work). -Start the node as follows: +Note that Mythril requires Python 3.5 to work. -.. code:: bash +Function signatures +~~~~~~~~~~~~~~~~~~~ + +Whenever you disassemble or analyze binary code, Mythril will try to +resolve function names using its local signature database. The database +must be provided at ``~/.mythril/signatures.json``. You can start out +with the `default file `__ as follows: + +:: + + $ cd ~/.mythril + $ wget https://raw.githubusercontent.com/b-mueller/mythril/master/signatures.json + +When you analyze Solidity code, new function signatures are added to the +database automatically. - $ geth --rpc --rpcapi eth,admin,debug --syncmode fast +Security analysis +----------------- -Database initialization +Run ``myth -x`` with one of the input options described below to run the +analysis. This will run the Python modules in the +`/analysis/modules `__ +directory. + +Mythril detects a range of `security issues `__, +including integer underflows, owner-overwrite-to-Ether-withdrawal, and +others. However, the analysis will not detect business logic issues and +is not equivalent to formal verification. + +Analyzing Solidity code ~~~~~~~~~~~~~~~~~~~~~~~ +In order to work with Solidity source code files, the `solc command line +compiler `__ +needs to be installed and in path. You can then provide the source +file(s) as positional arguments, e.g.: + +.. code:: bash + + $ myth -x myContract.sol + +Alternatively, compile the code on `Remix `__ +and pass the runtime binary code to Mythril: + +.. code:: bash + + $ myth -x -c "0x5060(...)" + +If you have multiple interdependent contracts, pass them to Mythril as +separate input files. Mythril will map the first contract to address +"0x0000(..)", the second one to "0x1111(...)", and so forth (make sure +that contract addresses are set accordingly in the source). The contract +passed in the first argument will be executed as the "main" contract. + +.. code:: bash + + $ myth -x myContract.sol myLibrary.sol + +Working with on-chain contracts +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +To analyze contracts on the blockchain you need an Ethereum node. By +default, Mythril will query a local node via RPC. Alternatively, you can +use `INFURA `__: + +:: + + $ myth --infura-mainnet -x -a 0x5c436ff914c458983414019195e0f4ecbef9e6dd + +If you are planning to do batch operations or use the contract search +features, running a +`go-ethereum `__ node is +recommended. Start your local node as follows: + +.. code:: bash + + $ geth --rpc --rpcapi eth,debug --syncmode fast + +Specify the target contract with the ``-a`` option: + +.. code:: bash + + $ myth -x -a 0x5c436ff914c458983414019195e0f4ecbef9e6dd -v1 + +Adding the ``-l`` flag will cause Mythril to automatically retrieve +dependencies, such as library contracts: + +.. code:: bash + + $ myth -x -a 0xEbFD99838cb0c132016B9E117563CB41f2B02264 -l -v1 + +Control flow graph +------------------ + +The ``-g FILENAME`` option generates an `interactive jsViz +graph `__: + +.. code:: bash + + $ myth -g ./graph.html -a 0xEbFD99838cb0c132016B9E117563CB41f2B02264 -l + +.. figure:: https://raw.githubusercontent.com/b-mueller/mythril/master/static/callgraph7.png + :alt: Call graph + + callgraph + +[STRIKEOUT:The "bounce" effect, while awesome (and thus enabled by +default), sometimes messes up the graph layout.] Try adding the +``--enable-physics`` flag for a very entertaining "bounce" effect that +unfortunately completely destroys usability. + +Blockchain exploration +---------------------- + Mythril builds its own contract database to enable fast search -operations. Unfortunately, this process is slow. You don't need to sync -the whole blockchain right away though: If you abort the syncing process -with ``ctrl+c``, it will be auto-resumed the next time you run the +operations. This enables operations like those described in the +`legendary "Mitch Brenner" blog +post `__ +in [STRIKEOUT:seconds] minutes instead of days. Unfortunately, the +initial sync process is slow. You don't need to sync the whole +blockchain right away though: If you abort the syncing process with +``ctrl+c``, it will be auto-resumed the next time you run the ``--init-db`` command. .. code:: bash @@ -51,21 +157,12 @@ with ``ctrl+c``, it will be auto-resumed the next time you run the Processing block 4323000, 3 individual contracts in database (...) -Note that syncing doesn't take quite as long as it first seems, because -the blocks get smaller towards the beginning of the chain. - The default behavior is to only sync contracts with a non-zero balance. You can disable this behavior with the ``--sync-all`` flag, but be aware that this will result in a huge (as in: dozens of GB) database. -Command line usage ------------------- - -The Mythril command line tool (aptly named ``myth``) allows you to -conveniently access some of Mythril's functionality. - -Searching the database -~~~~~~~~~~~~~~~~~~~~~~ +Searching from the command line +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The search feature allows you to find contract instances that contain specific function calls and opcode sequences. It supports simple boolean @@ -77,6 +174,20 @@ expressions, such as: $ myth --search "code#PUSH1 0x50,POP#" $ myth --search "func#changeMultisig(address)# and code#PUSH1 0x50#" +Reading contract storage +~~~~~~~~~~~~~~~~~~~~~~~~ + +You can read the contents of storage slots from a deployed contract as +follows. + +.. code:: bash + + ./myth --storage 0 -a "0x76799f77587738bfeef09452df215b63d2cfb08a" + 0x0000000000000000000000000000000000000000000000000000000000000003 + +Utilities +--------- + Disassembler ~~~~~~~~~~~~ @@ -85,12 +196,11 @@ bytecode string or a contract address as its input. .. code:: bash - $ myth -d -c "$ ./myth -d -c "5060" + $ myth -d -c "0x6060" 0 PUSH1 0x60 Specifying an address via ``-a ADDRESS`` will download the contract code -from your node. Mythril will try to resolve function names using the -signatures in ``database/signature.json``: +from your node. .. code:: bash @@ -103,125 +213,50 @@ signatures in ``database/signature.json``: 1136 CALLVALUE 1137 ISZERO -Adding the ``-g FILENAME`` option will output a call graph: - -.. code:: bash - - $ myth -d -a "0xFa52274DD61E1643d2205169732f29114BC240b3" -g ./graph.svg - -.. figure:: https://raw.githubusercontent.com/b-mueller/mythril/master/static/callgraph.png - :alt: Call graph - - callgraph - -Note that currently, Mythril only processes ``JUMP`` and ``JUMPI`` -instructions with immediately preceding ``PUSH``, but doesn't understand -dynamic jumps and function calls. - -Tracing Code -~~~~~~~~~~~~ - -You can run a code trace in the PyEthereum virtual machine. Optionally, -input data can be passed via the ``--data`` flag. - -.. code:: bash - - $ myth -t -a "0x3665f2bf19ee5e207645f3e635bf0f4961d661c0" - vm storage={'storage': {}, 'nonce': '0', 'balance': '0', 'code': '0x'} gas=b'21000' stack=[] address=b'6e\xf2\xbf\x19\xee^ vE\xf3\xe65\xbf\x0fIa\xd6a\xc0' depth=0 steps=0 inst=96 pushvalue=96 pc=b'0' op=PUSH1 - vm op=PUSH1 gas=b'20997' stack=[b'96'] depth=0 steps=1 inst=96 pushvalue=64 pc=b'2' - vm op=MSTORE gas=b'20994' stack=[b'96', b'64'] depth=0 steps=2 inst=82 pc=b'4' - Finding cross-references -^^^^^^^^^^^^^^^^^^^^^^^^ +~~~~~~~~~~~~~~~~~~~~~~~~ It is often useful to find other contracts referenced by a particular -contract. Let's assume you want to search for contracts that fulfill -conditions similar to the `Parity Multisig Wallet -Bug `__. -First, you want to find a list of contracts that use the -``DELEGATECALL`` opcode: +contract. E.g.: .. code:: bash $ myth --search "code#DELEGATECALL#" Matched contract with code hash 07459966443977122e639cbf7804c446 Address: 0x76799f77587738bfeef09452df215b63d2cfb08a, balance: 1000000000000000 - Address: 0x3582d2a3b67d63ed10f1ecaef0dca71b9283b543, balance: 92000000000000000000 - Address: 0x4b9bc00c35f7cee95c65c3c9836040c37dec9772, balance: 89000000000000000000 - Address: 0x156d5687a201affb3f1e632dcfb9fde4b0128211, balance: 29500000000000000000 - (...) - -Note that "code hash" in the above output refers to the contract's index -in the database. The following lines ("Address: ...") list instances of -same contract deployed on the blockchain. - -You can then use the ``--xrefs`` flag to find the addresses of -referenced contracts: - -.. code:: bash - - $ myth --xrefs 07459966443977122e639cbf7804c446 + $ myth --xrefs -a 0x76799f77587738bfeef09452df215b63d2cfb08a 5b9e8728e316bbeb692d22daaab74f6cbf2c4691 -The command-line search is useful for identifying contracts with -interesting opcode patterns. You can either use this information as a -starting point for manual analysis, or build more complex static and -dynamic analysis using Mythril and -`PyEthereum `__ modules. - -Custom scripts --------------- - -TODO +Calculating function hashes +~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- Add examples for static/dynamic analysis -- API documentation +To print the Keccak hash for a given function signature: -Issues ------- - -The RPC database sync solution is not very efficient. I explored some -other options, including: - -- Using PyEthereum: I encountered issues syncing PyEthereum with - Homestead. Also, PyEthApp only supports Python 2.7, which causes - issues with other important packages. -- Accessing the Go-Ethereum LevelDB: This would be a great option. - However, PyEthereum database code seems unable to deal with - Go-Ethereum's LevelDB. It would take quite a bit of effort to figure - this out. -- IPC might allow for faster sync then RPC - haven't tried it yet. +.. code:: bash -I'm writing this in my spare time, so contributors would be highly -welcome! + $ myth --hash "setOwner(address)" + 0x13af4035 Credit ------ -JSON RPC library is adapted from -`ethjsonrpc `__ (it doesn't -seem to be maintained anymore, and I needed to make some changes to it). - -Act responsibly! ----------------- - -The purpose of project is to aid discovery of vulnerable smart contracts -on the Ethereum mainnet and support research for novel security flaws. -If you do find an exploitable issue or vulnerable contract instances, -please `do the right -thing `__. Also, -note that vulnerability branding ("etherbleed", "chainshock",...) is -highly discouraged as it will annoy the author and others in the -security community. +- JSON RPC library is adapted from + `ethjsonrpc `__ (it doesn't + seem to be maintained anymore, and I needed to make some changes to + it). + +- The signature data in ``signatures.json`` was initially obtained from + the `Ethereum Function Signature + Database `__. ''' setup( name='mythril', - version='0.7.6', + version='0.10.6', - description='A reversing and bug hunting framework for the Ethereum blockchain', + description='Security analysis tool for Ethereum smart contracts', long_description=long_description, url='https://github.com/b-mueller/mythril', @@ -256,7 +291,7 @@ setup( 'web3', 'ZODB>=5.3.0', 'z3-solver>=4.5', - 'laser-ethereum==0.2.4', + 'laser-ethereum==0.4.0', 'requests', 'BTrees' ], diff --git a/signatures.json b/signatures.json new file mode 100644 index 00000000..9dc205ce --- /dev/null +++ b/signatures.json @@ -0,0 +1 @@ +{"0x07f9f7ba": "StandardBounties(address)", "0x8c590917": "contribute(uint256,uint256)", "0x626a413a": "activateBounty(uint256,uint256)", "0x1e688c14": "fulfillBounty(uint256,string)", "0x41ac5dd0": "updateFulfillment(uint256,uint256,string)", "0xd9583497": "acceptFulfillment(uint256,uint256)", "0x16b57509": "killBounty(uint256)", "0x2d1fdef6": "extendDeadline(uint256,uint256)", "0x5d19606e": "transferIssuer(uint256,address)", "0xd6c0ceab": "changeBountyDeadline(uint256,uint256)", "0xf3d3402a": "changeBountyData(uint256,string)", "0x452ccadb": "changeBountyFulfillmentAmount(uint256,uint256)", "0xcdad6576": "changeBountyArbiter(uint256,address)", "0x992a3e75": "changeBountyPaysTokens(uint256,bool,address)", "0x422d4cd6": "increasePayout(uint256,uint256,uint256)", "0xb94b0a3a": "getFulfillment(uint256,uint256)", "0xee8c4bbf": "getBounty(uint256)", "0x86647bac": "getBountyArbiter(uint256)", "0xa60745aa": "getBountyData(uint256)", "0x19dba3d2": "getBountyToken(uint256)", "0x3278ba2f": "getNumBounties()", "0xfbe334f8": "getNumFulfillments(uint256)", "0xdb3b6263": "transitionToState(uint256,BountyStages)", "0x4e3b52fe": "metaCoin()", "0x412664ae": "sendToken(address,uint256)", "0x56885cd8": "crowdfunding()", "0x6c343ffe": "withdrawfunds()", "0xe8b5e51f": "invest()", "0xaa3288f4": "getBalance())", "0xc11a4b47": "Origin()", "0xf2fde38b": "transferOwnership(address)", "0x00362a95": "donate(address)", "0x70a08231": "balanceOf(address)", "0x2e1a7d4d": "withdraw(uint256)", "0x6241bfd1": "Token(uint256)", "0xa3210e87": "sendeth(address,uint256)", "0xcd38aa87": "chooseWinner()", "0xd6d22fa4": "MetaCoin()", "0x90b98a11": "sendCoin(address,uint256)", "0x7bd703e8": "getBalanceInEth(address)", "0xf8b2cb4f": "getBalance(address)", "0xa360b26f": "Migrations()", "0xfdacd576": "setCompleted(uint256)", "0x0900f010": "upgrade(address)", "0xcae9ca51": "approveAndCall(address,uint256,bytes)", "0xa9059cbb": "transfer(address,uint256)", "0x23b872dd": "transferFrom(address,address,uint256)", "0x095ea7b3": "approve(address,uint256)", "0xdd62ed3e": "allowance(address,address)", "0x525f8a5c": "setSaleStartTime(uint256)", "0xd132391a": "setSaleEndTime(uint256)", "0x0a0cd8c8": "setupDone()", "0xd7bb99ba": "contribute()", "0xf0349d5f": "setupStages()", "0x2a4f6533": "createTokenContract())", "0x42a6b21a": "getContributionLimit(address)", "0x1a787915": "startConditions(bytes32)", "0xf3fde261": "onTransition(bytes32)", "0x27816235": "onSaleEnded()", "0x091cde0b": "DisbursementHandler(address)", "0xf3fef3a3": "withdraw(address,uint256)", "0x4bc9fdc2": "calcMaxWithdraw()", "0xc9e61599": "createTarget())", "0x200094e0": "deployContract())", "0x5a048d78": "claim(Target)", "0x16ae6b67": "checkInvariant())", "0x2aa5ed61": "DayLimit(uint256)", "0xe7dde9a3": "_setDailyLimit(uint256)", "0x4a4c82c6": "_resetSpentToday()", "0x180aadb7": "underLimit(uint256)", "0x9d4468ff": "today())", "0x19045a25": "recover(bytes32,bytes)", "0xe92dfb23": "LimitBalance(uint256)", "0xd73dd623": "increaseApproval(address,uint256)", "0x66188463": "decreaseApproval(address,uint256)", "0xabaf5880": "Crowdsale(uint256,uint256,uint256,address)", "0xec8ac4d8": "buyTokens(address)", "0x9d735286": "forwardFunds()", "0x605120cf": "validPurchase())", "0x6e42787f": "hasEnded())", "0xe5c46944": "MultiSigWallet(address[],uint256)", "0x7065cb48": "addOwner(address)", "0x173825d9": "removeOwner(address)", "0xe20056e6": "replaceOwner(address,address)", "0xba51a6df": "changeRequirement(uint256)", "0xc6427474": "submitTransaction(address,uint256,bytes)", "0xc01a8c84": "confirmTransaction(uint256)", "0x20ea8d86": "revokeConfirmation(uint256)", "0xee22610b": "executeTransaction(uint256)", "0x784547a7": "isConfirmed(uint256)", "0xec096f8d": "addTransaction(address,uint256,bytes)", "0x8b51d13f": "getConfirmationCount(uint256)", "0x54741525": "getTransactionCount(bool,bool)", "0xa0e67e2b": "getOwners()", "0xb5dc40c3": "getConfirmations(uint256)", "0xa8abe69a": "getTransactionIds(uint256,uint256,bool,bool)"} \ No newline at end of file diff --git a/solidity_examples/ether_send.sol b/solidity_examples/ether_send.sol new file mode 100644 index 00000000..c8e5bc46 --- /dev/null +++ b/solidity_examples/ether_send.sol @@ -0,0 +1,34 @@ +contract Crowdfunding { + + mapping(address => uint) public balances; + address public owner; + uint256 INVEST_MIN = 1 ether; + uint256 INVEST_MAX = 10 ether; + + modifier onlyOwner() { + require(msg.sender == owner); + _; + } + + function crowdfunding() { + owner = msg.sender; + } + + function withdrawfunds() onlyOwner { + msg.sender.transfer(this.balance); + } + + function invest() public payable { + require(msg.value > INVEST_MIN && msg.value < INVEST_MAX); + + balances[msg.sender] += msg.value; + } + + function getBalance() public constant returns (uint) { + return balances[msg.sender]; + } + + function() public payable { + invest(); + } +} \ No newline at end of file diff --git a/solidity_examples/origin.sol b/solidity_examples/origin.sol new file mode 100644 index 00000000..635c15f4 --- /dev/null +++ b/solidity_examples/origin.sol @@ -0,0 +1,35 @@ +contract Origin { + address public owner; + + + /** + * @dev The Ownable constructor sets the original `owner` of the contract to the sender + * account. + */ + function Origin() { + owner = msg.sender; + } + + + /** + * @dev Throws if called by any account other than the owner. + */ + modifier onlyOwner() { + if (tx.origin != owner) { + throw; + } + _; + } + + + /** + * @dev Allows the current owner to transfer control of the contract to a newOwner. + * @param newOwner The address to transfer ownership to. + */ + function transferOwnership(address newOwner) onlyOwner { + if (newOwner != address(0)) { + owner = newOwner; + } + } + +} diff --git a/solidity_examples/reentrancy.sol b/solidity_examples/reentrancy.sol new file mode 100644 index 00000000..78210aa8 --- /dev/null +++ b/solidity_examples/reentrancy.sol @@ -0,0 +1,23 @@ +contract Reentrancy { + + mapping(address => uint) public balances; + + function donate(address _to) public payable { + balances[_to] += msg.value; + } + + function balanceOf(address _who) public constant returns (uint balance) { + return balances[_who]; + } + + function withdraw(uint _amount) public { + if(balances[msg.sender] >= _amount) { + if(msg.sender.call.value(_amount)()) { + _amount; + } + balances[msg.sender] -= _amount; + } + } + + function() payable {} +} \ No newline at end of file diff --git a/solidity_examples/underflow.sol b/solidity_examples/underflow.sol new file mode 100644 index 00000000..6ecef5df --- /dev/null +++ b/solidity_examples/underflow.sol @@ -0,0 +1,20 @@ +contract Under { + + mapping(address => uint) balances; + uint public totalSupply; + + function Token(uint _initialSupply) { + balances[msg.sender] = totalSupply = _initialSupply; + } + + function sendeth(address _to, uint _value) public returns (bool) { + require(balances[msg.sender] - _value >= 0); + balances[msg.sender] -= _value; + balances[_to] += _value; + return true; + } + + function balanceOf(address _owner) public constant returns (uint balance) { + return balances[_owner]; + } +} \ No newline at end of file diff --git a/solidity_examples/weak_random.sol b/solidity_examples/weak_random.sol new file mode 100644 index 00000000..88fc4e12 --- /dev/null +++ b/solidity_examples/weak_random.sol @@ -0,0 +1,49 @@ +pragma solidity ^0.4.16; + +contract WeakRandom { + struct Contestant { + address addr; + uint gameId; + } + + uint public constant prize = 2.5 ether; + uint public constant totalTickets = 50; + uint public constant pricePerTicket = prize / totalTickets; + + uint public gameId = 1; + uint public nextTicket = 0; + mapping (uint => Contestant) public contestants; + + function () payable public { + uint moneySent = msg.value; + + while (moneySent >= pricePerTicket && nextTicket < totalTickets) { + uint currTicket = nextTicket++; + contestants[currTicket] = Contestant(msg.sender, gameId); + moneySent -= pricePerTicket; + } + + if (nextTicket == totalTickets) { + chooseWinner(); + } + + // Send back leftover money + if (moneySent > 0) { + msg.sender.transfer(moneySent); + } + } + + function chooseWinner() private { + address seed1 = contestants[uint(block.coinbase) % totalTickets].addr; + address seed2 = contestants[uint(msg.sender) % totalTickets].addr; + uint seed3 = block.difficulty; + bytes32 randHash = keccak256(seed1, seed2, seed3); + + uint winningNumber = uint(randHash) % totalTickets; + address winningAddress = contestants[winningNumber].addr; + + gameId++; + nextTicket = 0; + winningAddress.transfer(prize); + } +} diff --git a/tests/disassembler_test.py b/tests/disassembler_test.py index 8ba31e0a..70b7da22 100644 --- a/tests/disassembler_test.py +++ b/tests/disassembler_test.py @@ -8,4 +8,4 @@ class DisassemblerTestCase(unittest.TestCase): code = "0x606060405236156100ca5763ffffffff60e060020a600035041663054f7d9c81146100d3578063095c21e3146100f45780630ba50baa146101165780631a3719321461012857806366529e3f14610153578063682789a81461017257806389f21efc146101915780638da5cb5b146101ac5780638f4ffcb1146101d55780639a1f2a5714610240578063b5f522f71461025b578063bd94b005146102b6578063c5ab5a13146102c8578063cc424839146102f1578063deb077b914610303578063f3fef3a314610322575b6100d15b5b565b005b34610000576100e0610340565b604080519115158252519081900360200190f35b3461000057610104600435610361565b60408051918252519081900360200190f35b34610000576100d1600435610382565b005b3461000057610104600160a060020a03600435166103b0565b60408051918252519081900360200190f35b346100005761010461041e565b60408051918252519081900360200190f35b3461000057610104610424565b60408051918252519081900360200190f35b34610000576100d1600160a060020a036004351661042b565b005b34610000576101b961046f565b60408051600160a060020a039092168252519081900360200190f35b3461000057604080516020600460643581810135601f81018490048402850184019095528484526100d1948235600160a060020a039081169560248035966044359093169594608494929391019190819084018382808284375094965061048595505050505050565b005b34610000576100d1600160a060020a03600435166106e7565b005b346100005761026b60043561072b565b60408051600160a060020a0390991689526020890197909752878701959095526060870193909352608086019190915260a085015260c084015260e083015251908190036101000190f35b34610000576100d160043561077a565b005b34610000576101b9610830565b60408051600160a060020a039092168252519081900360200190f35b34610000576100d160043561083f565b005b34610000576101046108a1565b60408051918252519081900360200190f35b34610000576100d1600160a060020a03600435166024356108a7565b005b60015474010000000000000000000000000000000000000000900460ff1681565b600681815481101561000057906000526020600020900160005b5054905081565b600054600160a060020a036301000000909104811690331681146103a557610000565b60038290555b5b5050565b6005546040805160006020918201819052825160e260020a631d010437028152600160a060020a03868116600483015293519194939093169263740410dc92602480830193919282900301818787803b156100005760325a03f115610000575050604051519150505b919050565b60035481565b6006545b90565b600054600160a060020a0363010000009091048116903316811461044e57610000565b60018054600160a060020a031916600160a060020a0384161790555b5b5050565b60005463010000009004600160a060020a031681565b6000600060006000600060006000600160149054906101000a900460ff16156104ad57610000565b87600081518110156100005760209101015160005460f860020a918290048202975002600160f860020a031990811690871614156105405760009450600196505b600587101561053057878781518110156100005790602001015160f860020a900460f860020a0260f860020a900485610100020194505b6001909601956104ee565b61053b8b868c610955565b6106d6565b600054610100900460f860020a02600160f860020a0319908116908716141561069e57506001955060009250829150819050805b60058710156105b657878781518110156100005790602001015160f860020a900460f860020a0260f860020a900481610100020190505b600190960195610574565b600596505b60098710156105fd57878781518110156100005790602001015160f860020a900460f860020a0260f860020a900484610100020193505b6001909601956105bb565b600996505b600d87101561064457878781518110156100005790602001015160f860020a900460f860020a0260f860020a900483610100020192505b600190960195610602565b600d96505b601187101561068b57878781518110156100005790602001015160f860020a900460f860020a0260f860020a900482610100020191505b600190960195610649565b61053b8b828c878787610bc4565b6106d6565b60005462010000900460f860020a02600160f860020a031990811690871614156106d15761053b8b8b610e8e565b6106d6565b610000565b5b5b5b5b5050505050505050505050565b600054600160a060020a0363010000009091048116903316811461070a57610000565b60058054600160a060020a031916600160a060020a0384161790555b5b5050565b600760208190526000918252604090912080546001820154600283015460038401546004850154600586015460068701549690970154600160a060020a03909516969395929491939092909188565b600081815260076020526040812054600160a060020a0390811690331681146107a257610000565b600083815260076020526040902080546004820154600583015460038401549395506107dc93600160a060020a039093169291029061105e565b50600060058301556107ed83611151565b6040805184815290517fb5dc9baf0cb4e7e4759fa12eadebddf9316e26147d5a9ae150c4228d5a1dd23f9181900360200190a161082933611244565b5b5b505050565b600154600160a060020a031681565b600054600160a060020a0363010000009091048116903316811461086257610000565b600080546040516301000000909104600160a060020a0316916108fc851502918591818181858888f1935050505015156103ab57610000565b5b5b5050565b60025481565b600054600160a060020a036301000000909104811690331681146108ca57610000565b6000805460408051602090810184905281517fa9059cbb0000000000000000000000000000000000000000000000000000000081526301000000909304600160a060020a0390811660048501526024840187905291519187169363a9059cbb9360448082019492918390030190829087803b156100005760325a03f115610000575050505b5b505050565b610100604051908101604052806000600160a060020a03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525060006007600085815260200190815260200160002061010060405190810160405290816000820160009054906101000a9004600160a060020a0316600160a060020a0316600160a060020a0316815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201548152505091508260001415610a4857610000565b8160400151838115610000570615610a5f57610000565b6002548410610a6d57610000565b8160400151838115610000570490508160a00151811115610a8d57610000565b610a9c8584846020015161128e565b1515610aa757610000565b60a082018051829003815260008581526007602081815260409283902086518154600160a060020a031916600160a060020a038216178255918701516001820181905593870151600282015560608701516003820155608087015160048201559351600585015560c0860151600685015560e08601519390910192909255610b319190859061105e565b1515610b3c57610000565b610b518582846080015102846060015161105e565b1515610b5c57610000565b60a0820151158015610b71575060c082015115155b15610b7f57610b7f84611151565b5b6040805185815290517fb5dc9baf0cb4e7e4759fa12eadebddf9316e26147d5a9ae150c4228d5a1dd23f9181900360200190a1610bbc85611244565b5b5050505050565b831515610bd057610000565b82851415610bdd57610000565b801580610be8575081155b15610bf257610000565b80848115610000570615610c0557610000565b6005546040805160006020918201819052825160e260020a631d010437028152600160a060020a038b8116600483015293518695949094169363740410dc9360248084019491938390030190829087803b156100005760325a03f11561000057505050604051805190501015610c7a57610000565b610c8586858761128e565b1515610c9057610000565b600554604080517fbe0140a6000000000000000000000000000000000000000000000000000000008152600160a060020a03898116600483015260006024830181905260448301869052925193169263be0140a69260648084019391929182900301818387803b156100005760325a03f115610000575050506101006040519081016040528087600160a060020a03168152602001848152602001838152602001868152602001828681156100005704815260200182815260200160068054905081526020014281525060076000600254815260200190815260200160002060008201518160000160006101000a815481600160a060020a030219169083600160a060020a031602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e0820151816007015590505060068054806001018281815481835581811511610e2757600083815260209020610e279181019083015b80821115610e235760008155600101610e0f565b5090565b5b505050916000526020600020900160005b50600280549182905560018201905560408051918252517fb5dc9baf0cb4e7e4759fa12eadebddf9316e26147d5a9ae150c4228d5a1dd23f92509081900360200190a1610e8586611244565b5b505050505050565b600354818115610000570615610ea357610000565b600160009054906101000a9004600160a060020a0316600160a060020a031663cf35bdd060016000604051602001526040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b156100005760325a03f115610000575050604080518051600080546020938401829052845160e060020a6323b872dd028152600160a060020a038981166004830152630100000090920482166024820152604481018890529451921694506323b872dd936064808201949392918390030190829087803b156100005760325a03f1156100005750506040515115159050610f9857610000565b600554600354600160a060020a039091169063be0140a6908490600190858115610000576040805160e060020a63ffffffff8816028152600160a060020a039095166004860152921515602485015204604483015251606480830192600092919082900301818387803b156100005760325a03f1156100005750505061101d82611244565b60408051600160a060020a038416815290517f30a29a0aa75376a69254bb98dbd11db423b7e8c3473fb5bf0fcba60bcbc42c4b9181900360200190a15b5050565b600081151561106c57610000565b6001546040805160006020918201819052825160e460020a630cf35bdd028152600481018790529251600160a060020a039094169363cf35bdd09360248082019493918390030190829087803b156100005760325a03f1156100005750505060405180519050600160a060020a031663a9059cbb85856000604051602001526040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b156100005760325a03f115610000575050604051519150505b9392505050565b6000818152600760205260409020600690810154815490919060001981019081101561000057906000526020600020900160005b5054600682815481101561000057906000526020600020900160005b50556006805460001981018083559091908280158290116111e7576000838152602090206111e79181019083015b80821115610e235760008155600101610e0f565b5090565b5b50506006548314915061122d9050578060076000600684815481101561000057906000526020600020900160005b505481526020810191909152604001600020600601555b6000828152600760205260408120600601555b5050565b60045481600160a060020a031631101561128957600454604051600160a060020a0383169180156108fc02916000818181858888f19350505050151561128957610000565b5b5b50565b600081151561129c57610000565b6001546040805160006020918201819052825160e460020a630cf35bdd028152600481018790529251600160a060020a039094169363cf35bdd09360248082019493918390030190829087803b156100005760325a03f11561000057505060408051805160006020928301819052835160e060020a6323b872dd028152600160a060020a038a811660048301523081166024830152604482018a905294519490921694506323b872dd93606480840194939192918390030190829087803b156100005760325a03f115610000575050604051519150505b93925050505600a165627a7a723058204dee0e1bf170a9d122508f3e876c4a84893b12a7345591521af4ca737bb765000029" disassembly = Disassembly(code) - self.assertEqual(len(disassembly.instruction_list), 3537) + self.assertEqual(len(disassembly.instruction_list), 3523) diff --git a/tests/ethcontract_test.py b/tests/ethcontract_test.py index b34923b7..27d7f440 100644 --- a/tests/ethcontract_test.py +++ b/tests/ethcontract_test.py @@ -16,7 +16,7 @@ class Getinstruction_listTestCase(ETHContractTestCase): disassembly = contract.get_disassembly() - self.assertEqual(len(disassembly.instruction_list), 71, 'Error disassembling code using ETHContract.get_instruction_list()') + self.assertEqual(len(disassembly.instruction_list), 53, 'Error disassembling code using ETHContract.get_instruction_list()') class GetEASMTestCase(ETHContractTestCase): diff --git a/tests/svm_test.py b/tests/svm_test.py index acf41400..4d651065 100644 --- a/tests/svm_test.py +++ b/tests/svm_test.py @@ -1,19 +1,18 @@ import unittest -from mythril.disassembler.callgraph import generate_callgraph -from mythril.disassembler.disassembly import Disassembly -from laser.ethereum import svm +from mythril.analysis.symbolic import StateSpace +from mythril.analysis.callgraph import generate_graph +from mythril.ether.ethcontract import ETHContract class SVMTestCase(unittest.TestCase): def runTest(self): - modules = {} - modules['0x0000000000000000000000000000000000000000'] = {'name': 'metaCoin', 'address': '0x0000000000000000000000000000000000000000', 'creation_code': '', 'code': '60606040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806327e235e314610051578063412664ae1461009e575b600080fd5b341561005c57600080fd5b610088600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506100f8565b6040518082815260200191505060405180910390f35b34156100a957600080fd5b6100de600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610110565b604051808215151515815260200191505060405180910390f35b60006020528060005260406000206000915090505481565b6000816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561016157600090506101fe565b816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540392505081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550600090505b929150505600a165627a7a72305820fd4fa106da498514e90965a45ffecc1da53a0cd8bb7a7135910f8612245a46370029'} - modules['0x0000000000000000000000000000000000000000']['disassembly'] = Disassembly(modules['0x0000000000000000000000000000000000000000']['code']) + code = "0x60606040525b603c5b60006010603e565b9050593681016040523660008237602060003683856040603f5a0204f41560545760206000f35bfe5b50565b005b73c3b2ae46792547a96b9f84405e36d0e07edcd05c5b905600a165627a7a7230582062a884f947232ada573f95940cce9c8bfb7e4e14e21df5af4e884941afb55e590029" - _svm = svm.SVM(modules) + contract = ETHContract(code) + statespace = StateSpace([contract]) - html = generate_callgraph(_svm, '0x0000000000000000000000000000000000000000', False) + html = generate_graph(statespace) - self.assertTrue("var nodes = [\n{id: \'metaCoin:" in html) + self.assertTrue("0 PUSH1 0x60\\n2 PUSH1 0x40\\n4 MSTORE\\n5 JUMPDEST" in html)