Пример #1
0
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
Пример #2
0
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'])
Пример #3
0
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