# beacon_chain # Copyright (c) 2018-2019 Status Research & Development GmbH # Licensed and distributed under either of # * MIT license (license terms in the root directory or at http://opensource.org/licenses/MIT). # * Apache v2 license (license terms in the root directory or at http://www.apache.org/licenses/LICENSE-2.0). # at your option. This file may not be copied, modified, or distributed except according to those terms. import options, sequtils, chronicles, eth/trie/[db], ../beacon_chain/[beacon_chain_db, block_pool, extras, ssz, state_transition, validator_pool, beacon_node_types], ../beacon_chain/spec/[beaconstate, bitfield, crypto, datatypes, digest, helpers, validator] func preset*(): string = " [Preset: " & const_preset & ']' func makeFakeValidatorPrivKey*(i: int): ValidatorPrivKey = var i = i + 1 # 0 does not work, as private key... copyMem(result.x[0].addr, i.addr, min(sizeof(result.x), sizeof(i))) func makeFakeHash*(i: int): Eth2Digest = copyMem(result.data[0].addr, i.unsafeAddr, min(sizeof(result.data), sizeof(i))) func hackPrivKey(v: Validator): ValidatorPrivKey = ## Extract private key, per above hack var i: int copyMem( i.addr, v.withdrawal_credentials.data[0].unsafeAddr, min(sizeof(v.withdrawal_credentials.data), sizeof(i))) makeFakeValidatorPrivKey(i) func makeDeposit(i: int, flags: UpdateFlags): Deposit = ## Ugly hack for now: we stick the private key in withdrawal_credentials ## which means we can repro private key and randao reveal from this data, ## for testing :) let privkey = makeFakeValidatorPrivKey(i) pubkey = privkey.pubKey() withdrawal_credentials = makeFakeHash(i) domain = 3'u64 result = Deposit( data: DepositData( pubkey: pubkey, withdrawal_credentials: withdrawal_credentials, amount: MAX_EFFECTIVE_BALANCE, ) ) if skipValidation notin flags: result.data.signature = bls_sign(privkey, signing_root(result.data).data, domain) func makeInitialDeposits*( n = SLOTS_PER_EPOCH, flags: UpdateFlags = {}): seq[Deposit] = for i in 0..