def test_verification_overall_checksum():
    """ Tamper with the overall checksum and see failures in verify_precompiled_checksums() """
    manager = ContractManager(contracts_source_path())
    manager.checksum_contracts()
    manager.verify_precompiled_checksums(contracts_precompiled_path())

    original_checksum = manager.overall_checksum

    # We change the source code overall checksum
    manager.overall_checksum += '2'
    # Now the verification should fail
    with pytest.raises(ContractManagerVerificationError):
        manager.verify_precompiled_checksums(contracts_precompiled_path())

    manager.overall_checksum = None
    with pytest.raises(ContractManagerVerificationError):
        manager.verify_precompiled_checksums(contracts_precompiled_path())

    manager.overall_checksum = ''
    with pytest.raises(ContractManagerVerificationError):
        manager.verify_precompiled_checksums(contracts_precompiled_path())

    checksum_fail = list(original_checksum)
    # Replace the first char with a different one
    checksum_fail[0] = list(filter(lambda x: x != checksum_fail[0], ['2', 'a']))[0]
    manager.overall_checksum = "".join(checksum_fail)
    with pytest.raises(ContractManagerVerificationError):
        manager.verify_precompiled_checksums(contracts_precompiled_path())

    manager.overall_checksum = original_checksum
    manager.verify_precompiled_checksums(contracts_precompiled_path())
def test_verification_contracts_checksums():
    """ Tamper with the contract checksums and see failures in verify_precompiled_checksums() """
    manager = ContractManager(contracts_source_path())
    manager.checksum_contracts()
    manager.verify_precompiled_checksums(contracts_precompiled_path())

    for contract, checksum in manager.contracts_checksums.items():
        manager.contracts_checksums[contract] += '2'
        with pytest.raises(ContractManagerVerificationError):
            manager.verify_precompiled_checksums(contracts_precompiled_path())

        manager.contracts_checksums[contract] = None
        with pytest.raises(ContractManagerVerificationError):
            manager.verify_precompiled_checksums(contracts_precompiled_path())

        manager.contracts_checksums[contract] = ''
        with pytest.raises(ContractManagerVerificationError):
            manager.verify_precompiled_checksums(contracts_precompiled_path())

        checksum_fail = list(checksum)
        # Replace the first char with a different one
        checksum_fail[0] = list(filter(lambda x: x != checksum_fail[0], ['2', 'a']))[0]
        manager.contracts_checksums[contract] = "".join(checksum_fail)
        with pytest.raises(ContractManagerVerificationError):
            manager.verify_precompiled_checksums(contracts_precompiled_path())

        manager.contracts_checksums[contract] = checksum
        manager.verify_precompiled_checksums(contracts_precompiled_path())
    def __init__(
        self,
        web3: Web3,
        private_key: str,
        gas_limit: int,
        gas_price: int = 1,
        wait: int = 10,
        contracts_version: Optional[str] = None,
    ):
        self.web3 = web3
        self.private_key = private_key
        self.wait = wait
        self.owner = private_key_to_address(private_key)
        self.transaction = {'from': self.owner, 'gas_limit': gas_limit}
        if gas_price != 0:
            self.transaction['gasPrice'] = gas_price * denoms.gwei

        self.contracts_version = contracts_version
        self.precompiled_path = contracts_precompiled_path(
            self.contracts_version)
        self.contract_manager = ContractManager(self.precompiled_path)

        # Check that the precompiled data is correct
        self.contract_manager = ContractManager(contracts_source_path())
        self.contract_manager.checksum_contracts()
        self.contract_manager.verify_precompiled_checksums(
            self.precompiled_path)
def test_contract_manager_json(tmpdir):
    """ Check the ABI in contracts.json """
    precompiled_path = Path(str(tmpdir)).joinpath('contracts.json')
    ContractManager(
        contracts_source_path()).compile_contracts(precompiled_path)
    # try to load contracts from a precompiled file
    contract_manager_meta(precompiled_path)
Exemplo n.º 5
0
    def __init__(
        self,
        web3: Web3,
        private_key: str,
        gas_limit: int,
        gas_price: int=1,
        wait: int=10,
        contracts_version: Optional[str]=None,
    ):
        self.web3 = web3
        self.wait = wait
        self.owner = private_key_to_address(private_key)
        self.transaction = {'from': self.owner, 'gas': gas_limit}
        if gas_price != 0:
            self.transaction['gasPrice'] = gas_price * denoms.gwei

        self.contracts_version = contracts_version
        self.precompiled_path = contracts_precompiled_path(self.contracts_version)
        self.contract_manager = ContractManager(self.precompiled_path)
        self.web3.middleware_stack.add(
            construct_sign_and_send_raw_middleware(private_key),
        )

        # Check that the precompiled data matches the source code
        # Only for current version, because this is the only one with source code
        if self.contracts_version in [None, CONTRACTS_VERSION]:
            contract_manager_source = ContractManager(contracts_source_path())
            contract_manager_source.checksum_contracts()
            contract_manager_source.verify_precompiled_checksums(self.precompiled_path)
        else:
            log.info('Skipped checks against the source code because it is not available.')
Exemplo n.º 6
0
def test_paths():
    for _, source_path in contracts_source_path().items():
        assert source_path.exists()
    assert contracts_precompiled_path().exists()
    assert contracts_deployed_path(NETWORKNAME_TO_ID['rinkeby']).exists()
    assert contracts_deployed_path(NETWORKNAME_TO_ID['ropsten']).exists()
    assert contracts_deployed_path(NETWORKNAME_TO_ID['kovan']).exists()
def test_paths():
    """ contracts_source_path() exists and contains the expected files """
    for _, source_path in contracts_source_path().items():
        assert source_path.exists()
    assert contracts_precompiled_path().exists()
    assert contracts_deployed_path(NETWORKNAME_TO_ID['rinkeby']).exists()
    assert contracts_deployed_path(NETWORKNAME_TO_ID['ropsten']).exists()
    assert contracts_deployed_path(NETWORKNAME_TO_ID['kovan']).exists()
Exemplo n.º 8
0
    def run(self):
        from raiden_contracts.contract_manager import (
            ContractManager,
            contracts_precompiled_path,
            contracts_source_path,
        )

        contract_manager = ContractManager(contracts_source_path())
        contract_manager.compile_contracts(contracts_precompiled_path())
Exemplo n.º 9
0
 def run(self):
     from raiden_contracts.contract_manager import (
         ContractManager,
         contracts_precompiled_path,
         contracts_source_path,
     )
     manager = ContractManager(contracts_source_path())
     manager.checksum_contracts()
     manager.verify_precompiled_checksums(contracts_precompiled_path())
def test_current_development_version():
    """ contracts_source_path() exists and contains the expected files """
    contracts_version = CONTRACTS_VERSION
    contract_names = [
        'Utils',
        'EndpointRegistry',
        'SecretRegistry',
        'TokenNetworkRegistry',
        'TokenNetwork',
        'MonitoringService',
        'RaidenServiceBundle',
    ]

    manager = ContractManager(contracts_precompiled_path(contracts_version))
    assert manager.contracts_version == contracts_version
    check_precompiled_content(manager, contract_names, PRECOMPILED_DATA_FIELDS)

    for _, source_path in contracts_source_path().items():
        assert source_path.exists()
    assert contracts_precompiled_path().exists()
def test_contract_manager_compile():
    """ Check the ABI in the sources """
    contract_manager_meta(contracts_source_path())
Exemplo n.º 12
0
def contracts_manager():
    return ContractManager(contracts_source_path())
def etherscan_verify(chain_id, apikey, guid, contract_name):
    contract_manager = ContractManager(contracts_precompiled_path())
    source_path = contracts_source_path()

    deployment_info = get_contracts_deployed(chain_id)

    if chain_id == 3:
        etherscan_api = 'https://api-ropsten.etherscan.io/api'
    elif chain_id == 4:
        etherscan_api = 'https://api-rinkeby.etherscan.io/api'
    elif chain_id == 42:
        etherscan_api = 'https://api-kovan.etherscan.io/api'
    elif chain_id == 1:
        etherscan_api = 'https://api.etherscan.io/api'

    if guid:
        guid_status(etherscan_api, guid)
        return

    if contract_name is None or contract_name == CONTRACT_ENDPOINT_REGISTRY:
        path = source_path['raiden'].joinpath(
            f'{CONTRACT_ENDPOINT_REGISTRY}.sol')
        source = path.read_text()
        constructor_args = ''
        etherscan_verify_contract(
            etherscan_api,
            apikey,
            contract_manager.contracts[CONTRACT_ENDPOINT_REGISTRY],
            CONTRACT_ENDPOINT_REGISTRY,
            deployment_info['contracts'][CONTRACT_ENDPOINT_REGISTRY],
            source,
            constructor_args,
        )

    if contract_name is None or contract_name == CONTRACT_SECRET_REGISTRY:
        path = source_path['raiden'].joinpath(
            f'{CONTRACT_SECRET_REGISTRY}.sol')
        source = path.read_text()
        constructor_args = ''
        etherscan_verify_contract(
            etherscan_api,
            apikey,
            contract_manager.contracts[CONTRACT_SECRET_REGISTRY],
            CONTRACT_SECRET_REGISTRY,
            deployment_info['contracts'][CONTRACT_SECRET_REGISTRY],
            source,
            constructor_args,
        )

    if contract_name is None or contract_name == CONTRACT_TOKEN_NETWORK_REGISTRY:
        source = (
            source_path['raiden'].joinpath('Utils.sol').read_text() +
            source_path['raiden'].joinpath('Token.sol').read_text() +
            source_path['raiden'].joinpath('lib', 'ECVerify.sol').read_text() +
            source_path['raiden'].joinpath('SecretRegistry.sol').read_text() +
            source_path['raiden'].joinpath('TokenNetwork.sol').read_text() +
            source_path['raiden'].joinpath(
                'TokenNetworkRegistry.sol').read_text())

        source = 'pragma solidity ^0.4.23;' + source.replace(
            'pragma solidity ^0.4.23;', '')
        source = source.replace('import "raiden/Token.sol";\n', '')
        source = source.replace('import "raiden/Utils.sol";\n', '')
        source = source.replace('import "raiden/lib/ECVerify.sol";\n', '')
        source = source.replace('import "raiden/SecretRegistry.sol";\n', '')
        source = source.replace('import "raiden/TokenNetwork.sol";\n', '')

        flatten_path = Path(__file__).parent.joinpath('flatten.sol')
        flatten_path.open('w').write(source)

        constructor_arguments = deployment_info['contracts'][
            CONTRACT_TOKEN_NETWORK_REGISTRY]['constructor_arguments']
        abi = contract_manager.contracts[CONTRACT_TOKEN_NETWORK_REGISTRY][
            'abi']
        constructor_types = [
            arg['type']
            for arg in list(filter(lambda x: x['type'] == 'constructor', abi),
                            )[0]['inputs']
        ]
        constructor_args = encode_abi(constructor_types,
                                      constructor_arguments).hex()
        print('constructor_args', constructor_arguments, constructor_types,
              constructor_args)

        etherscan_verify_contract(
            etherscan_api,
            apikey,
            contract_manager.contracts[CONTRACT_TOKEN_NETWORK_REGISTRY],
            CONTRACT_TOKEN_NETWORK_REGISTRY,
            deployment_info['contracts'][CONTRACT_TOKEN_NETWORK_REGISTRY],
            source,
            constructor_args,
        )
Exemplo n.º 14
0
def test_contract_manager_compile():
    contract_manager_meta(contracts_source_path())