Esempio n. 1
0
def test_error_to_instantiate_base_class():
    with pytest.raises(AttributeError):
        Contract()
Esempio n. 2
0
def deploy_crowdsale(project: Project, chain, source_definitions: dict,
                     deploy_address) -> Tuple[dict, dict, dict]:
    """Deploy multiple contracts from crowdsale definitions.

    :param chain: Populus chain object
    :param data: One of mainnet/ropsten parsed data definitions in a YAML file
    :return: Tuple (expaneded definitions, statistics, contract object map). The expanded definitions are run-time data that has everything expanded out and actual contract addresses
    """

    statistics = Counter()

    # This will contain our output and parsed values
    runtime_data = copy.deepcopy(source_definitions)

    # Contract handles for post-actions
    contracts = {}

    # Store the address we used for the deployment
    runtime_data["deploy_address"] = deploy_address
    chain_name = runtime_data["chain"]
    verify_on_etherscan = asbool(runtime_data["verify_on_etherscan"])
    browser_driver = runtime_data.get("browser_driver", "chrome")

    need_unlock = runtime_data.get("unlock_deploy_address", True)

    for name, contract_def in runtime_data["contracts"].items():

        contract_name = contract_def["contract_name"]

        # First expand out all variables
        address = contract_def.get("address")
        if address:
            print("Already deployed contract,", name, address)
            Contract = getattr(chain.contract_factories, contract_name)
            contracts[name] = Contract(address=address)
            statistics["already_deployed"] += 1
            continue

        # Expand Jinja templated variables for this contract
        context = get_jinja_context(runtime_data)

        try:
            expanded_contract_def = interpolate_data(contract_def, context)
        except jinja2.exceptions.TemplateError as e:
            raise RuntimeError(
                "Could not expand data for section {}".format(name)) from e

        # Store expanded data for output
        runtime_data["contracts"][name] = expanded_contract_def

        contracts[name] = deploy_contract(project,
                                          chain,
                                          deploy_address,
                                          expanded_contract_def,
                                          chain_name,
                                          need_unlock=need_unlock)
        statistics["deployed"] += 1

        # Perform manual verification of the deployed contract
        if verify_on_etherscan:
            fname = runtime_data["contracts"][name]["contract_file"]
            src = verify_contract(
                project=project,
                chain_name=chain_name,
                address=runtime_data["contracts"][name]["address"],
                contract_name=contract_name,
                contract_filename=fname,
                constructor_args=runtime_data["contracts"][name]
                ["constructor_args"],
                libraries=runtime_data["contracts"][name]["libraries"],
                browser_driver=browser_driver)
            runtime_data["contracts"][name][
                "etherscan_link"] = get_etherscan_link(
                    chain_name, runtime_data["contracts"][name]["address"])

            # Write out our expanded contract
            expanded_path = os.path.join(os.getcwd(), "build", "expanded",
                                         fname)
            with open(expanded_path, "wt") as out:
                out.write(src)

    return runtime_data, statistics, contracts
def get_vault_contract(w3, vault: Vault, config: Config) -> Contract:
    api = Contract(address=vault.smart_contract_address,
                   api_key=config.ETHERSCAN_API_KEY)
    abi = api.get_abi()
    contract = w3.eth.contract(address=vault.smart_contract_address, abi=abi)
    return contract
            address = address.strip()
            amount = amount.strip()
            assert address.startswith("0x")
            amount = int(float(amount) *
                         1000000000)  # Use this precision. CHANGED
            if contract.call().balances(address) == 0:
                contract.transact({
                    "from": deploy_address
                }).addInvestor(address, amount)
            #time.sleep(1)


with p.get_chain("mainnet") as chain:
    web3 = chain.web3
    Contract = getattr(chain.contract_factories, "MultiVault")
    seed_participant_vault1 = Contract(
        address="0x35AfB92d3F2bE0D206E808355ca7bfAc9d820735")
    seed_participant_vault2 = Contract(
        address="0x1962A6183412360Ca64eD34c111efDabF08b909B")
    founders_vault = Contract(
        address="0x33222541eaE599124dF510D02f6e70DAdA1a9331")

    import_investor_data(seed_participant_vault1,
                         "0x6efD5665ab4B345A7eBE63c679b651f375DDdB7E",
                         "seed_investor_data.csv")
    import_investor_data(seed_participant_vault2,
                         "0x6efD5665ab4B345A7eBE63c679b651f375DDdB7E",
                         "seed_investor_data.csv")
    import_investor_data(founders_vault,
                         "0x6efD5665ab4B345A7eBE63c679b651f375DDdB7E",
                         "founders_data.csv")
Esempio n. 5
0
    assert fname.endswith(".csv")

    txs = []
    with open(fname, "rt") as inp:
        for line in inp:
            address, amount = line.split(",")
            address = address.strip()
            amount = amount.strip()
            assert address.startswith("0x")
            amount = int(float(amount) * 10000)  # Use this precision
            if contract.call().balances(address) == 0:
                contract.transact({
                    "from": deploy_address
                }).addInvestor(address, amount)


with p.get_chain("kovan") as chain:
    web3 = chain.web3
    Contract = getattr(chain.contract_factories, "MultiVault")
    seed_participant_vault1 = Contract(
        address="0x6d73EA22232aF29465A6a5070F32e199bF1D11e9")
    seed_participant_vault2 = Contract(
        address="0xbcd575b7D3187251752300892aD680A63a0e0050")

    import_investor_data(seed_participant_vault1,
                         "0x001FC7d7E506866aEAB82C11dA515E9DD6D02c25",
                         "fake_seed_investor_data.csv")
    import_investor_data(seed_participant_vault2,
                         "0x001FC7d7E506866aEAB82C11dA515E9DD6D02c25",
                         "fake_seed_investor_data.csv")