code: def estimate_gas(
              self,
              transaction: BaseOrSpoofTransaction,
              at_header: BlockHeader=None) -> int:
          
          if at_header is None:
              at_header = self.get_canonical_head()
          with self.get_vm(at_header).state_in_temp_block() as state:
              return self.gas_estimator(state, transaction)
docs: Returns an estimation of the amount of gas the given transaction will
          use if executed on top of the block specified by the given header.