Esempio n. 1
0
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
Esempio n. 2
0
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, [])
Esempio n. 3
0
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
Esempio n. 4
0
 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
Esempio n. 5
0
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']))
Esempio n. 6
0

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