> ## Documentation Index
> Fetch the complete documentation index at: https://hedera-0c6e0218-mintlify-bc559771.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Delete a smart contract

> Delete a Hedera smart contract with ContractDeleteTransaction signed by the admin key, transferring its HBAR balance to a beneficiary account or contract.

A transaction that deletes a smart contract from a Hedera network. Once a smart contract is marked deleted, you will not be able to modify any of the contract's properties. If a smart contract did not have an admin key defined, you cannot delete the smart contract. You can verify the smart contract was deleted by submitting a smart contract info query to the network. If a smart contract has an associated hbar balance, you will need to transfer the balance to another Hedera account.

**Transaction Signing Requirements**

* If the admin key was defined for the smart contract it is required to sign the transaction.
* The client operator's (fee payer account) private key is required to sign the transaction.

**Transaction Fees**

* Please see the transaction and query NextCall a smart contract function table for base transaction fee
* Please use the [Hedera fee estimator](https://hedera.com/fees) to estimate your transaction fee cost

### Methods

| Method                                      | Type                                                            | Description                                                          | Requirement |
| ------------------------------------------- | --------------------------------------------------------------- | -------------------------------------------------------------------- | ----------- |
| `setContractId(<contractId>)`               | [ContractId](/native/fundamentals/specialized-types#contractid) | Sets the contract ID (x.z.y) which should be deleted.                | Required    |
| `setTransferAccountId(<transferAccountId>)` | [AccountId](/native/fundamentals/specialized-types#accountid)   | Sets the account ID (x.z.y) which will receive all remaining hbars   | Optional    |
| `setTransferContractId(<contractId>)`       | [ContractId](/native/fundamentals/specialized-types#contractid) | Sets the contract ID (x.z.y) which will receive all remaining hbars. | Optional    |

<CodeGroup>
  ```java Java theme={null}
  //Create the transaction
  ContractDeleteTransaction transaction = new ContractDeleteTransaction()
      .setContractId(contractId);

  //Freeze the transaction for signing, sign with the admin key on the contract, sign with the client operator private key and submit to a Hedera network
  TransactionResponse txResponse = transaction.freezeWith(client).sign(adminKey).execute(client);

  //Get the receipt of the transaction
  TransactionReceipt receipt = txResponse.getReceipt(client);

  //Get the transaction consensus status
  Status transactionStatus = receipt.status;

  System.out.println("The transaction consensus status is " +transactionStatus);

  //v2.0.0
  ```

  ```javascript JavaScript theme={null}
  //Create the transaction
  const transaction = await new ContractDeleteTransaction()
      .setContractId(contractId)
      .freezeWith(client);

  //Sign with the admin key on the contract
  const signTx = await transaction.sign(adminKey)

  //Sign the transaction with the client operator's private key and submit to a Hedera network
  const txResponse = await signTx.execute(client);

  //Get the receipt of the transaction
  const receipt = await txResponse.getReceipt(client);

  //Get the transaction consensus status
  const transactionStatus = receipt.status;

  console.log("The transaction consensus status is " +transactionStatus);

  //v2.0.5
  ```

  ```java Go theme={null}
  //Create and freeze the transaction
  transaction := hedera.NewContractDeleteTransaction().
  	  SetContractID(contractID)
  	  FreezeWith(client)
  	
  //Sign with the admin key on the contract, sign with the client operator private key and submit to a Hedera network
  txResponse. err := transaction.Sign(adminKey).Execute(client)
  if err != nil {
  		panic(err)
  }

  //Get the receipt of the transaction
  receipt, err := txResponse.GetReceipt(client)
  if err != nil {
  		panic(err)
  }

  //Get the transaction consensus status
  transactionStatus := receipt.Status

  fmt.Printf("The transaction consensus status is %v\n", transactionStatus)

  //v2.0.0
  ```

  ```rust Rust theme={null}
  // Create the transaction
  let transaction = ContractDeleteTransaction::new()
      .contract_id(contract_id)
      .freeze_with(&client)?
      .sign(admin_key);

  // Sign with the client operator private key and submit to a Hedera network
  let tx_response = transaction.execute(&client).await?;

  // Get the receipt of the transaction
  let receipt = tx_response.get_receipt(&client).await?;

  // Get the transaction consensus status
  let transaction_status = receipt.status;
  println!("The transaction consensus status is {:?}", transaction_status);

  // v0.34.0
  ```
</CodeGroup>
