2022-08-05 13:00:31 +00:00
|
|
|
import os
|
2022-07-27 13:27:07 +00:00
|
|
|
import socket
|
|
|
|
import time
|
|
|
|
|
2022-08-05 13:00:31 +00:00
|
|
|
from eth_account import Account
|
|
|
|
from web3._utils.transactions import fill_nonce, fill_transaction_defaults
|
|
|
|
|
|
|
|
Account.enable_unaudited_hdwallet_features()
|
|
|
|
|
|
|
|
ACCOUNTS = {
|
|
|
|
"validator": Account.from_mnemonic(os.getenv("VALIDATOR1_MNEMONIC")),
|
|
|
|
"community": Account.from_mnemonic(os.getenv("COMMUNITY_MNEMONIC")),
|
|
|
|
"signer1": Account.from_mnemonic(os.getenv("SIGNER1_MNEMONIC")),
|
|
|
|
"signer2": Account.from_mnemonic(os.getenv("SIGNER2_MNEMONIC")),
|
|
|
|
}
|
|
|
|
KEYS = {name: account.key for name, account in ACCOUNTS.items()}
|
|
|
|
ADDRS = {name: account.address for name, account in ACCOUNTS.items()}
|
|
|
|
|
|
|
|
|
2022-07-27 13:27:07 +00:00
|
|
|
def wait_for_port(port, host="127.0.0.1", timeout=40.0):
|
|
|
|
start_time = time.perf_counter()
|
|
|
|
while True:
|
|
|
|
try:
|
|
|
|
with socket.create_connection((host, port), timeout=timeout):
|
|
|
|
break
|
|
|
|
except OSError as ex:
|
|
|
|
time.sleep(0.1)
|
|
|
|
if time.perf_counter() - start_time >= timeout:
|
|
|
|
raise TimeoutError(
|
|
|
|
"Waited too long for the port {} on host {} to start accepting "
|
|
|
|
"connections.".format(port, host)
|
|
|
|
) from ex
|
2022-08-05 13:00:31 +00:00
|
|
|
|
|
|
|
|
|
|
|
def fill_defaults(w3, tx):
|
|
|
|
return fill_nonce(w3, fill_transaction_defaults(w3, tx))
|
|
|
|
|
|
|
|
|
|
|
|
def sign_transaction(w3, tx, key=KEYS["validator"]):
|
|
|
|
"fill default fields and sign"
|
|
|
|
acct = Account.from_key(key)
|
|
|
|
tx["from"] = acct.address
|
|
|
|
tx = fill_defaults(w3, tx)
|
|
|
|
return acct.sign_transaction(tx)
|
|
|
|
|
|
|
|
|
|
|
|
def send_transaction(w3, tx, key=KEYS["validator"]):
|
|
|
|
signed = sign_transaction(w3, tx, key)
|
|
|
|
txhash = w3.eth.send_raw_transaction(signed.rawTransaction)
|
|
|
|
return w3.eth.wait_for_transaction_receipt(txhash)
|