def generate_genesis(path=None, num_participants=1): privkeys = [ utils.sha3(utils.to_string(i)) for i in range(num_participants) ] addrs = [utils.privtoaddr(k) for k in privkeys] deposit_sizes = [i * 500 + 500 for i in range(num_participants)] randaos = [RandaoManager(utils.sha3(k)) for k in privkeys] validators = [(generate_validation_code(a), ds * 10**18, r.get(9999), a) for a, ds, r in zip(addrs, deposit_sizes, randaos)] s = make_casper_genesis(validators=validators, alloc={a: { 'balance': 10**18 } for a in addrs}, timestamp=int(time.time()), epoch_length=100) genesis_hash = apply_const_message( s, sender=casper_config['METROPOLIS_ENTRY_POINT'], to=casper_config['METROPOLIS_BLOCKHASH_STORE'], data=utils.encode_int32(0)) genesis_number = call_casper(s, 'getBlockNumber') print('genesis block hash: %s' % utils.encode_hex(genesis_hash)) print('genesis block number: %d' % genesis_number) print('%d validators: %r' % (num_participants, [utils.encode_hex(a) for a in addrs])) snapshot = s.to_snapshot() header = s.prev_headers[0] genesis = { "nonce": "0x" + utils.encode_hex(header.nonce), "difficulty": utils.int_to_hex(header.difficulty), "mixhash": "0x" + utils.encode_hex(header.mixhash), "coinbase": "0x" + utils.encode_hex(header.coinbase), "timestamp": utils.int_to_hex(header.timestamp), "parentHash": "0x" + utils.encode_hex(header.prevhash), "extraData": "0x" + utils.encode_hex(header.extra_data), "gasLimit": utils.int_to_hex(header.gas_limit), "alloc": snapshot["alloc"] } if path: with open(path, 'w') as f: json.dump(genesis, f, sort_keys=False, indent=4, separators=(',', ': ')) print('casper genesis generated') else: return genesis
print('Initializing privkeys, addresses and randaos for validators') privkeys = [utils.sha3(str(i)) for i in range(NUM_PARTICIPANTS)] addrs = [utils.privtoaddr(k) for k in privkeys] randaos = [RandaoManager(utils.sha3(str(i))) for i in range(NUM_PARTICIPANTS)] deposit_sizes = [i * 500 + 500 for i in range(NUM_PARTICIPANTS)] vcodes = [generate_validation_code(a) for a in addrs] vchashes = [utils.sha3(c) for c in vcodes] assert len(privkeys) == len(addrs) == len(randaos) == len(deposit_sizes) == len(vcodes) == len(vchashes) == NUM_PARTICIPANTS # Creating casper contract translator ct = get_casper_ct() assert ct print('Constructing genesis') s = make_casper_genesis(validators=[(generate_validation_code(a), ds * 10**18, r.get(9999), a) for a, ds, r in zip(addrs, deposit_sizes, randaos)][:-1], alloc={a: {'balance': 10**18} for a in addrs}, timestamp=int(time.time() - 99999), epoch_length=100) print('Genesis constructed successfully') chains = [Chain(s.to_snapshot(), env=s.env) for i in range(NUM_PARTICIPANTS)] withdrawal_time_1 = call_casper(chains[0].state, 'getLockDuration', [vchashes[0]]) # List of validator IDs that created each block vids = [] # Create and sign a block def make_block(chain, key, randao, vchash, skips): h, _ = make_head_candidate(chain, TransactionQueue(), timestamp=get_timestamp(chain, skips)) return sign_block(h, key, randao.get_parent(call_casper(chain.state, 'getRandao', [vchash])), vchash, skips) next_validator = call_casper(s, 'getValidator', [0])
configure_logging(config_string=config_string) n = networksim.NetworkSimulator(latency=150) n.time = 2 print 'Generating keys' keys = [sha3(str(i)) for i in range(20)] print 'Initializing randaos' randaos = [RandaoManager(sha3(k)) for k in keys] deposit_sizes = [128] * 15 + [256] * 5 print 'Creating genesis state' s = make_casper_genesis( validators=[(generate_validation_code(privtoaddr(k)), ds * 10**18, r.get(9999)) for k, ds, r in zip(keys, deposit_sizes, randaos)], alloc={privtoaddr(k): { 'balance': 10**18 } for k in keys}, timestamp=2, epoch_length=50) g = s.to_snapshot() print 'Genesis state created' validators = [ Validator(g, k, n, Env(config=casper_config), time_offset=4) for k in keys ] n.agents = validators n.generate_peers() lowest_shared_height = -1 made_101_check = 0
# config_string = ':info,eth.vm.log:trace,eth.vm.op:trace,eth.vm.stack:trace,eth.vm.exit:trace,eth.pb.msg:trace,eth.pb.tx:debug' config_string = ':info,eth.vm.log:trace' configure_logging(config_string=config_string) n = networksim.NetworkSimulator(latency=150) n.time = 2 print 'Generating keys' keys = [sha3(str(i)) for i in range(20)] print 'Initializing randaos' randaos = [RandaoManager(sha3(k)) for k in keys] deposit_sizes = [128] * 15 + [256] * 5 print 'Creating genesis state' s = make_casper_genesis(validators=[(generate_validation_code(privtoaddr(k)), ds * 10**18, r.get(9999)) for k, ds, r in zip(keys, deposit_sizes, randaos)], alloc={privtoaddr(k): {'balance': 10**18} for k in keys}, timestamp=2, epoch_length=40) g = s.to_snapshot() print 'Genesis state created' validators = [Validator(g, k, n, Env(config=casper_config), time_offset=4) for k in keys] n.agents = validators n.generate_peers() lowest_shared_height = -1 made_101_check = 0 for i in range(100000): # print 'ticking' n.tick() if i % 100 == 0: