def mk_basic_state(alloc, header=None, env=None, executing_on_head=False): state = State(root = "6c08c2bdb7c09eb5a2524e9ed8f3dac707c7b0f6ca2116a173989a5370f77340".decode('hex'),env=environment, executing_on_head=executing_on_head) print(state.get_balance("3282791d6fd713f1e94f4bfd565eaa78b3a0599d")) if not header: header = { "number": 0, "gas_limit": environment.config['BLOCK_GAS_LIMIT'], "gas_used": 0, "timestamp": 1467446877, "difficulty": 1 } h = BlockHeader() state.prev_headers = [h] for addr, data in alloc.items(): addr = normalize_address(addr) assert len(addr) == 20 if 'balance' in data: state.set_balance(addr, parse_as_int(data['balance'])) if 'nonce' in data: state.set_nonce(addr, parse_as_int(data['nonce'])) state.block_number = header["number"] state.timestamp = header["timestamp"] state.commit() environment.db.commit() return state
def block_from_genesis_declaration(genesis_data, env): h = BlockHeader(timestamp=parse_as_int(genesis_data["timestamp"]), coinbase=parse_as_bin(genesis_data["coinbase"]), prevhash=parse_as_bin(genesis_data["parentHash"]), random_number=parse_as_bin(genesis_data["random_number"]), group_sig=genesis_data["group_sig"], group_pubkey=genesis_data["group_key"], count=parse_as_int(genesis_data["count"])) return Block(h, [])
def mk_basic_state(alloc, header=None, env=None, executing_on_head=False): env = env or Env() state = State(env=env, executing_on_head=executing_on_head) if not header: header = {"number": 0, "timestamp": 1467446877} h = BlockHeader(timestamp=parse_as_int(header['timestamp']), number=parse_as_int(header['number'])) state.prev_headers = [h] for addr, data in alloc.items(): addr = normalize_address(addr) assert len(addr) == 20 if 'balance' in data: state.set_balance(addr, parse_as_int(data['balance'])) if 'nonce' in data: state.set_nonce(addr, parse_as_int(data['nonce'])) state.block_number = header["number"] state.timestamp = header["timestamp"] state.commit() return state
def from_snapshot(cls, snapshot_data, env, executing_on_head=False): state = State(env=env) if "alloc" in snapshot_data: for addr, data in snapshot_data["alloc"].items(): if len(addr) == 40: addr = decode_hex(addr) assert len(addr) == 20 if 'balance' in data: state.set_balance(addr, utils.bin_to_object(data['balance'])) if 'nonce' in data: state.set_nonce(addr, parse_as_int(data['nonce'])) elif "state_root" in snapshot_data: state.trie.root_hash = parse_as_bin(snapshot_data["state_root"]) else: raise Exception( "Must specify either alloc or state root parameter") for k, default in STATE_DEFAULTS.items(): default = copy.copy(default) v = snapshot_data[k] if k in snapshot_data else None if is_numeric(default): setattr(state, k, parse_as_int(v) if k in snapshot_data else default) elif is_string(default): setattr(state, k, parse_as_bin(v) if k in snapshot_data else default) elif k == 'prev_headers': if k in snapshot_data: headers = [dict_to_prev_header(h) for h in v] else: headers = default setattr(state, k, headers) if executing_on_head: state.executing_on_head = True state.commit() state.changed = {} return state
def dict_to_prev_header(h): return FakeHeader(hash=parse_as_bin(h['hash']), number=parse_as_int(h['number']), timestamp=parse_as_int(h['timestamp']))
with open('../genesis.json') as data_file: data = json.load(data_file) print("INITIALAZING") alloc = data['alloc'] state = mk_basic_state(alloc, None) addresses = [] balances = [] tx = {} for addr, data in alloc.items(): addresses.append(addr) balances.append(parse_as_int(data['balance'])) tx[addr] = 0 N = 50 print("DOING SOME RANDOM TX...") for i in range(N): randFrom = random.randint(0, len(addresses)-1) randTo = random.randint(0, len(addresses)-1) randBalance = random.randint(0, 5000) if(i%10000==0): print("...") balances[randFrom] = balances[randFrom] - parse_as_int(randBalance) balances[randTo] = balances[randTo] + parse_as_int(randBalance) state.increment_nonce(addresses[randFrom]) state.transfer_value(addresses[randFrom],addresses[randTo],parse_as_int(randBalance)) tx[addresses[randFrom]] = tx[addresses[randFrom]] - randBalance