Working local sim with WAIT_GENESIS=yes
This commit is contained in:
parent
9cd8a6c730
commit
8140b4458c
|
@ -168,6 +168,7 @@ proc init*(T: type BeaconNode, conf: BeaconNodeConf): Future[BeaconNode] {.async
|
|||
mainchainMonitor.start()
|
||||
|
||||
genesisState = await mainchainMonitor.waitGenesis()
|
||||
|
||||
info "Eth2 genesis state detected",
|
||||
genesisTime = genesisState.genesisTime,
|
||||
eth1Block = genesisState.eth1_data.block_hash,
|
||||
|
|
|
@ -40,7 +40,7 @@ type
|
|||
contract(Deposit):
|
||||
proc drain()
|
||||
|
||||
proc deployContract*(web3: Web3, code: string): Future[Address] {.async.} =
|
||||
proc deployContract*(web3: Web3, code: string): Future[ReceiptObject] {.async.} =
|
||||
var code = code
|
||||
if code[1] notin {'x', 'X'}:
|
||||
code = "0x" & code
|
||||
|
@ -51,8 +51,7 @@ proc deployContract*(web3: Web3, code: string): Future[Address] {.async.} =
|
|||
gasPrice: 1.some)
|
||||
|
||||
let r = await web3.send(tr)
|
||||
let receipt = await web3.getMinedTransactionReceipt(r)
|
||||
result = receipt.contractAddress.get
|
||||
result = await web3.getMinedTransactionReceipt(r)
|
||||
|
||||
proc sendEth(web3: Web3, to: string, valueEth: int): Future[TxHash] =
|
||||
let tr = EthSend(
|
||||
|
@ -75,8 +74,8 @@ proc main() {.async.} =
|
|||
|
||||
case cfg.cmd
|
||||
of StartUpCommand.deploy:
|
||||
let contractAddress = await web3.deployContract(contractCode)
|
||||
echo "0x", contractAddress
|
||||
let receipt = await web3.deployContract(contractCode)
|
||||
echo "0x", receipt.contractAddress.get, ";", receipt.blockHash
|
||||
of StartUpCommand.drain:
|
||||
let sender = web3.contractSender(Deposit, Address.fromHex(cfg.contractAddress))
|
||||
discard await sender.drain().send(gasPrice = 1)
|
||||
|
|
|
@ -162,11 +162,11 @@ const
|
|||
# Validators
|
||||
# ---------------------------------------------------------------
|
||||
# https://github.com/ethereum/eth2.0-specs/blob/v0.11.3/configs/mainnet.yaml#L38
|
||||
ETH1_FOLLOW_DISTANCE* = 1024 # blocks ~ 4 hours
|
||||
ETH1_FOLLOW_DISTANCE* {.intdefine.} = 1024 # blocks ~ 4 hours
|
||||
TARGET_AGGREGATORS_PER_COMMITTEE* = 16 # validators
|
||||
RANDOM_SUBNETS_PER_VALIDATOR* = 1 # subnet
|
||||
EPOCHS_PER_RANDOM_SUBNET_SUBSCRIPTION* = 256 # epochs ~ 27 hours
|
||||
SECONDS_PER_ETH1_BLOCK* = 14 # (estimate from Eth1 mainnet)
|
||||
SECONDS_PER_ETH1_BLOCK* {.intdefine.} = 14 # (estimate from Eth1 mainnet)
|
||||
|
||||
# Phase 1: Upgrade from Phase 0
|
||||
# https://github.com/ethereum/eth2.0-specs/blob/v0.11.3/configs/mainnet.yaml#L161
|
||||
|
|
|
@ -138,13 +138,13 @@ const
|
|||
# https://github.com/ethereum/eth2.0-specs/blob/v0.11.3/configs/minimal.yaml#L38
|
||||
|
||||
# Changed
|
||||
ETH1_FOLLOW_DISTANCE* = 16 # blocks
|
||||
ETH1_FOLLOW_DISTANCE* {.intdefine.} = 16 # blocks
|
||||
|
||||
# Unchanged
|
||||
TARGET_AGGREGATORS_PER_COMMITTEE* = 16 # validators
|
||||
RANDOM_SUBNETS_PER_VALIDATOR* = 1 # subnet
|
||||
EPOCHS_PER_RANDOM_SUBNET_SUBSCRIPTION* = 256 # epochs ~ 27 hours
|
||||
SECONDS_PER_ETH1_BLOCK* = 14 # estimate from Eth1 mainnet)
|
||||
SECONDS_PER_ETH1_BLOCK* {.intdefine.} = 14 # estimate from Eth1 mainnet)
|
||||
|
||||
# Phase 1: Upgrade from Phase 0
|
||||
# ---------------------------------------------------------------
|
||||
|
|
|
@ -74,9 +74,9 @@ const
|
|||
# Time parameters
|
||||
# ---------------------------------------------------------------
|
||||
# https://github.com/ethereum/eth2.0-specs/blob/v0.11.3/configs/mainnet.yaml#L77
|
||||
GENESIS_DELAY* = 172800 # 172800 seconds (2 days)
|
||||
GENESIS_DELAY* {.intdefine.} = 172800 # 172800 seconds (2 days)
|
||||
|
||||
SECONDS_PER_SLOT*{.intdefine.} = 12'u64 # Compile with -d:SECONDS_PER_SLOT=1 for 12x faster slots
|
||||
SECONDS_PER_SLOT* {.intdefine.} = 12'u64 # Compile with -d:SECONDS_PER_SLOT=1 for 12x faster slots
|
||||
## TODO consistent time unit across projects, similar to C++ chrono?
|
||||
|
||||
MIN_ATTESTATION_INCLUSION_DELAY* = 1 ##\
|
||||
|
@ -161,11 +161,11 @@ const
|
|||
# Validators
|
||||
# ---------------------------------------------------------------
|
||||
# https://github.com/ethereum/eth2.0-specs/blob/v0.11.3/configs/mainnet.yaml#L38
|
||||
ETH1_FOLLOW_DISTANCE* = 1024 # blocks ~ 4 hours
|
||||
ETH1_FOLLOW_DISTANCE* {.intdefine.} = 1024 # blocks ~ 4 hours
|
||||
TARGET_AGGREGATORS_PER_COMMITTEE* = 16 # validators
|
||||
RANDOM_SUBNETS_PER_VALIDATOR* = 1 # subnet
|
||||
EPOCHS_PER_RANDOM_SUBNET_SUBSCRIPTION* = 256 # epochs ~ 27 hours
|
||||
SECONDS_PER_ETH1_BLOCK* = 14 # (estimate from Eth1 mainnet)
|
||||
SECONDS_PER_ETH1_BLOCK* {.intdefine.} = 14 # (estimate from Eth1 mainnet)
|
||||
|
||||
# Phase 1: Upgrade from Phase 0
|
||||
# https://github.com/ethereum/eth2.0-specs/blob/v0.11.3/configs/mainnet.yaml#L161
|
||||
|
|
|
@ -63,7 +63,7 @@ const
|
|||
# https://github.com/ethereum/eth2.0-specs/blob/v0.12.1/configs/minimal.yaml#L77
|
||||
# Changed: Faster to spin up testnets, but does not give validator
|
||||
# reasonable warning time for genesis
|
||||
GENESIS_DELAY* = 300
|
||||
GENESIS_DELAY* {.intdefine.} = 300
|
||||
|
||||
# Unchanged
|
||||
SECONDS_PER_SLOT*{.intdefine.} = 6'u64
|
||||
|
@ -137,13 +137,13 @@ const
|
|||
# https://github.com/ethereum/eth2.0-specs/blob/v0.12.1/configs/minimal.yaml#L38
|
||||
|
||||
# Changed
|
||||
ETH1_FOLLOW_DISTANCE* = 16 # blocks
|
||||
ETH1_FOLLOW_DISTANCE* {.intdefine.} = 16 # blocks
|
||||
|
||||
# Unchanged
|
||||
TARGET_AGGREGATORS_PER_COMMITTEE* = 16 # validators
|
||||
RANDOM_SUBNETS_PER_VALIDATOR* = 1 # subnet
|
||||
EPOCHS_PER_RANDOM_SUBNET_SUBSCRIPTION* = 256 # epochs ~ 27 hours
|
||||
SECONDS_PER_ETH1_BLOCK* = 14 # estimate from Eth1 mainnet)
|
||||
SECONDS_PER_ETH1_BLOCK* {.intdefine.} = 14 # estimate from Eth1 mainnet)
|
||||
|
||||
# Phase 1: Upgrade from Phase 0
|
||||
# ---------------------------------------------------------------
|
||||
|
|
|
@ -83,7 +83,9 @@ fi
|
|||
|
||||
DEPOSIT_CONTRACT_ARGS=""
|
||||
if [ -f "${DEPOSIT_CONTRACT_FILE}" ]; then
|
||||
DEPOSIT_CONTRACT_ARGS="--deposit-contract=$(cat $DEPOSIT_CONTRACT_FILE) $WEB3_ARG"
|
||||
DEPOSIT_CONTRACT_ARGS="$WEB3_ARG \
|
||||
--deposit-contract=$(cat $DEPOSIT_CONTRACT_FILE) \
|
||||
--deposit-contract-block=$(cat $DEPOSIT_CONTRACT_BLOCK_FILE)"
|
||||
fi
|
||||
|
||||
cd "$NODE_DATA_DIR"
|
||||
|
|
|
@ -50,10 +50,15 @@ mkdir -p "$SECRETS_DIR"
|
|||
cd "$GIT_ROOT"
|
||||
|
||||
CUSTOM_NIMFLAGS="${NIMFLAGS} -d:useSysAsserts -d:chronicles_sinks:textlines,json[file] -d:const_preset=mainnet -d:insecure"
|
||||
GANACHE_BLOCK_TIME=5
|
||||
|
||||
# Run with "SLOTS_PER_EPOCH=8 ./start.sh" to change these
|
||||
DEFS=""
|
||||
DEFS+="-d:MIN_GENESIS_ACTIVE_VALIDATOR_COUNT=${NUM_VALIDATORS} -d:MIN_GENESIS_TIME=0 "
|
||||
DEFS+="-d:MIN_GENESIS_ACTIVE_VALIDATOR_COUNT=${NUM_VALIDATORS} \
|
||||
-d:MIN_GENESIS_TIME=0 \
|
||||
-d:GENESIS_DELAY=10 \
|
||||
-d:SECONDS_PER_ETH1_BLOCK=$GANACHE_BLOCK_TIME \
|
||||
-d:ETH1_FOLLOW_DISTANCE=1 "
|
||||
DEFS+="-d:MAX_COMMITTEES_PER_SLOT=${MAX_COMMITTEES_PER_SLOT:-1} " # Spec default: 64
|
||||
DEFS+="-d:SLOTS_PER_EPOCH=${SLOTS_PER_EPOCH:-6} " # Spec default: 32
|
||||
DEFS+="-d:SECONDS_PER_SLOT=${SECONDS_PER_SLOT:-6} " # Spec default: 12
|
||||
|
@ -76,7 +81,7 @@ COMMANDS=()
|
|||
|
||||
if [[ "$USE_GANACHE" == "yes" ]]; then
|
||||
if [[ "$USE_TMUX" == "yes" ]]; then
|
||||
$TMUX_CMD new-window -d -t $TMUX_SESSION_NAME -n "$GANACHE_CMD" "$GANACHE_CMD --blockTime 5 --gasLimit 100000000 -e 100000 --verbose"
|
||||
$TMUX_CMD new-window -d -t $TMUX_SESSION_NAME -n "$GANACHE_CMD" "$GANACHE_CMD --blockTime $GANACHE_BLOCK_TIME --gasLimit 100000000 -e 100000 --verbose"
|
||||
else
|
||||
echo NOTICE: $GANACHE_CMD will be started automatically only with USE_TMUX=yes
|
||||
USE_GANACHE="no"
|
||||
|
@ -161,10 +166,16 @@ function run_cmd {
|
|||
if [ "$USE_GANACHE" != "no" ]; then
|
||||
make deposit_contract
|
||||
echo Deploying the validator deposit contract...
|
||||
echo $DEPLOY_DEPOSIT_CONTRACT_BIN deploy $WEB3_ARG
|
||||
DEPOSIT_CONTRACT_ADDRESS=$($DEPLOY_DEPOSIT_CONTRACT_BIN deploy $WEB3_ARG)
|
||||
echo Contract deployed at $DEPOSIT_CONTRACT_ADDRESS
|
||||
|
||||
DEPLOY_CMD_OUTPUT=$($DEPLOY_DEPOSIT_CONTRACT_BIN deploy $WEB3_ARG)
|
||||
# https://stackoverflow.com/questions/918886/how-do-i-split-a-string-on-a-delimiter-in-bash
|
||||
OUTPUT_PIECES=(${DEPLOY_CMD_OUTPUT//;/ })
|
||||
DEPOSIT_CONTRACT_ADDRESS=${OUTPUT_PIECES[0]}
|
||||
DEPOSIT_CONTRACT_BLOCK=${OUTPUT_PIECES[1]}
|
||||
|
||||
echo Contract deployed at $DEPOSIT_CONTRACT_ADDRESS:$DEPOSIT_CONTRACT_BLOCK
|
||||
echo $DEPOSIT_CONTRACT_ADDRESS > $DEPOSIT_CONTRACT_FILE
|
||||
echo $DEPOSIT_CONTRACT_BLOCK > $DEPOSIT_CONTRACT_BLOCK_FILE
|
||||
|
||||
if [[ "$WAIT_GENESIS" == "yes" ]]; then
|
||||
run_cmd "(deposit maker)" "$BEACON_NODE_BIN deposits send \
|
||||
|
|
|
@ -32,6 +32,7 @@ SECRETS_DIR="${SIM_ROOT}/secrets"
|
|||
SNAPSHOT_FILE="${SIMULATION_DIR}/state_snapshot.ssz"
|
||||
NETWORK_BOOTSTRAP_FILE="${SIMULATION_DIR}/bootstrap_nodes.txt"
|
||||
DEPOSIT_CONTRACT_FILE="${SIMULATION_DIR}/deposit_contract.txt"
|
||||
DEPOSIT_CONTRACT_BLOCK_FILE="${SIMULATION_DIR}/deposit_contract_block.txt"
|
||||
BEACON_NODE_BIN="${GIT_ROOT}/build/beacon_node"
|
||||
VALIDATOR_CLIENT_BIN="${GIT_ROOT}/build/validator_client"
|
||||
DEPLOY_DEPOSIT_CONTRACT_BIN="${GIT_ROOT}/build/deposit_contract"
|
||||
|
|
Loading…
Reference in New Issue