code: def setup_ctx(
          ctx: click.Context,
          private_key: str,
          rpc_provider: str,
          wait: int,
          gas_price: int,
          gas_limit: int,
          contracts_version: None = None,
  ):
      
  
      if private_key is None:
          return
      logging.basicConfig(level=logging.DEBUG)
      logging.getLogger('web3').setLevel(logging.INFO)
      logging.getLogger('urllib3').setLevel(logging.INFO)
  
      web3 = Web3(HTTPProvider(rpc_provider, request_kwargs={'timeout': 60}))
      web3.middleware_stack.inject(geth_poa_middleware, layer=0)
      print('Web3 provider is', web3.providers[0])
      private_key = get_private_key(private_key)
      assert private_key is not None
      owner = private_key_to_address(private_key)
      # pylint: disable=E1101
      assert web3.eth.getBalance(owner) > 0, 'Account with insuficient funds.'
      deployer = ContractDeployer(
          web3=web3,
          private_key=private_key,
          gas_limit=gas_limit,
          gas_price=gas_price,
          wait=wait,
          contracts_version=contracts_version,
      )
      ctx.obj = {}
      ctx.obj['deployer'] = deployer
      ctx.obj['deployed_contracts'] = {}
      ctx.obj['token_type'] = 'CustomToken'
      ctx.obj['wait'] = wait
docs: Set up deployment context according to common options (shared among all
      subcommands).