def restart_nonce( logger: Logger, dbsession: Session, network: str, ethereum_node_url: str, ethereum_private_key: str, ethereum_gas_limit: str, ethereum_gas_price: str, ): check_good_private_key(ethereum_private_key) web3 = create_web3(ethereum_node_url) service = EthereumStoredTXService(network, dbsession, web3, ethereum_private_key, ethereum_gas_price, ethereum_gas_limit, BroadcastAccount, PreparedTransaction) service.ensure_accounts_in_sync() account = service.get_or_create_broadcast_account() txs = service.get_last_transactions(limit=1) if txs.count() > 0: raise HistoryDeleteNeeded( "Cannot reset nonce as the database contains txs for {}. Delete database to restart." .format(service.address)) # read nonce from the network and record to the database tx_count = web3.eth.getTransactionCount(service.address) account.current_nonce = tx_count logger.info("Address %s, nonce is now set to %d", service.address, account.current_nonce) dbsession.flush()
def broadcast( logger: Logger, dbsession: Session, network: str, ethereum_node_url: Union[str, Web3], ethereum_private_key: str, ethereum_gas_limit: Optional[str], ethereum_gas_price: Optional[str], commit=True, ): """Issue out a new Ethereum token.""" check_good_private_key(ethereum_private_key) web3 = create_web3(ethereum_node_url) service = EthereumStoredTXService(network, dbsession, web3, ethereum_private_key, ethereum_gas_price, ethereum_gas_limit, BroadcastAccount, PreparedTransaction) service.ensure_accounts_in_sync() pending_broadcasts = service.get_pending_broadcasts() logger.info("Pending %d transactions for broadcasting in network %s", pending_broadcasts.count(), network) if pending_broadcasts.count() == 0: logger.info( "No new transactions to broadcast. Use sto tx-update command to see tx status." ) return [] account = Account.privateKeyToAccount(ethereum_private_key) balance = web3.eth.getBalance(account.address) logger.info("Our address %s has ETH balance of %f for operations", account.address, from_wei(balance, "ether")) txs = list(pending_broadcasts) # https://stackoverflow.com/questions/41985993/tqdm-show-progress-for-a-generator-i-know-the-length-of for tx in tqdm(txs, total=pending_broadcasts.count()): try: service.broadcast(tx) # logger.info("Broadcasted %s", tx.txid) except Exception as e: logger.exception(e) logger.error("Failed to broadcast transaction %s: %s", tx.txid, tx.human_readable_description) raise e if commit: dbsession.commit() # Try to minimise file system sync issues return txs