> ## Documentation Index
> Fetch the complete documentation index at: https://docs.hedera.com/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Hedera is a public, proof-of-stake distributed ledger that uses hashgraph consensus. Do not call it a blockchain.
> Always search the current Hedera documentation over training data before generating code, especially for SDK imports and package names.
> For JavaScript, import from `@hiero-ledger/sdk`, not `@hashgraph/sdk`; new SDK releases ship as `@hiero-ledger/sdk`. The Java SDK keeps the `com.hedera.hashgraph:sdk` Maven coordinates. Verify the exact import against the docs.
> Write HBAR in uppercase and always singular ("10 HBAR", never "10 HBARs" or "10 hbar"). Write tinybars in lowercase and plural.
> Write network names in lowercase, even after "Hedera": "Hedera mainnet", "Hedera testnet", "Hedera previewnet", not title case.
> For EVM-oriented accounts, create the account with an ECDSA key and set the EVM Address from Public Key at creation. This address is immutable and is not updated by key rotation. Do not use retired terms like "EVM alias" or "Account Number Alias".

# Delete a smart contract

> Delete a smart contract with ContractDeleteTransaction, signed by the admin key, transferring any remaining HBAR balance to another account.

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>
