import sys, math sys.path.append('../../../../..') from ammolite import (Cli, HTTPProvider, Account) from utils import (wait_for_receipts, compile_contracts) frontend = sys.argv[1] ds_token_address = sys.argv[2] owner_key = sys.argv[3] accounts_file = sys.argv[4] output = sys.argv[5] cli = Cli(HTTPProvider(frontend)) compiled_sols = compile_contracts('../../contracts') ds_token = compiled_sols['../../contracts/token.sol:DSToken'] ds_token_contract = cli.eth.contract(abi=ds_token['abi'], address=ds_token_address) owner = Account(owner_key) addresses = [] with open(accounts_file, 'r') as f: for line in f: line = line.rstrip('\n') segments = line.split(',') addresses.append(segments[1]) lines = [] print('len(addresses) = {}'.format(len(addresses))) num_batches = int(math.ceil(len(addresses)) / 1000) #num_batches = 1
input = sys.argv[5] all_users = [] with open(input, 'r') as f: for line in f: line = line.rstrip('\n') segments = line.split(',') u = { 'private_key': segments[0], 'address': segments[1], 'kitty': segments[2], } all_users.append(u) cli = Cli(HTTPProvider(frontend)) compiled_sol = compile_contracts('./contract') kitty_core = compiled_sol['./contract/KittyCore.sol:KittyCore'] kitty_core_contract = cli.eth.contract( abi=kitty_core['abi'], address=kitty_core_address, ) num_per_batch = 1000 lines = [] def make_one_batch(i): users = all_users[i * 2000:(i + 1) * 2000] for i in range(num_per_batch): acc = Account(users[i]['private_key'])
def setup(_w3: Web3, _service_fee: float) -> Union[dict, None]: """ Deploy and initialize Management, BatteryManagement, ServiceProviderWallet and CurrencyToken contracts to the blockchain :param Web3 _w3: Web3 instance :params float _service_fee: Set fee for battery registration :return: Pairs of contract names and their addresses if setup successfull and None if not :rtype: dict/None """ service_fee = _w3.toWei(_service_fee, 'ether') data = utils.open_data_base(ACCOUNT_DB_NAME) if data is None: print("Can't access account database") return actor = data['account'] utils.unlock_account(_w3, actor, data['password']) tx_dict = {} for i in ['token', 'wallet']: tx_dict[i] = utils._deploy_contract(_w3, actor, CONTRACTS[i][0], CONTRACTS[i][1]) # wait for deployment transactions validation receipt_dict = utils._wait_for_validation(_w3, tx_dict) currency_token_contract_addr = receipt_dict['token'][1]['contractAddress'] service_provider_wallet_addr = receipt_dict['wallet'][1]['contractAddress'] if (receipt_dict['token'][1] is not None) and (receipt_dict['wallet'][1] is not None): currency_token_contract_addr = receipt_dict['token'][1]['contractAddress'] service_provider_wallet_addr = receipt_dict['wallet'][1]['contractAddress'] if service_provider_wallet_addr is not None: # deploy managment contract mgmt_contract_addr = utils._deploy_contract_and_wait(_w3, actor, CONTRACTS['mgmt'][0], CONTRACTS['mgmt'][1], service_provider_wallet_addr, service_fee) if mgmt_contract_addr is not None: utils._create_mgmt_contract_db(mgmt_contract_addr) # deploy battery managment battery_mgmt_contract_addr = utils._deploy_contract_and_wait(_w3, actor, CONTRACTS['battery'][0], CONTRACTS['battery'][1], mgmt_contract_addr, currency_token_contract_addr) if battery_mgmt_contract_addr is not None: compiled_contract = utils.compile_contracts(CONTRACTS['mgmt'][0]) mgmt_contract = utils.initialize_contract_factory(_w3, compiled_contract, CONTRACTS['mgmt'][0] + ':' + CONTRACTS['mgmt'][1], mgmt_contract_addr) tx_hash = mgmt_contract.functions.setBatteryManagementContract(battery_mgmt_contract_addr).transact({'from': actor, 'gasPrice': utils.get_actual_gas_price(_w3)}) receipt = web3.eth.wait_for_transaction_receipt(_w3, tx_hash, 120, 0.1) if receipt.status == 1: contract_addresses = { 'Management contract': mgmt_contract_addr, 'Wallet contract' : service_provider_wallet_addr, 'Currency contract:' : currency_token_contract_addr } return contract_addresses return None