def test_error_to_instantiate_base_class(): with pytest.raises(AttributeError): Contract()
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")
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")