Skip to main content
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 to estimate your transaction fee cost

Methods

MethodTypeDescriptionRequirement
setContractId(<contractId>)ContractIdSets the contract ID (x.z.y) which should be deleted.Required
setTransferAccountId(<transferAccountId>)AccountIdSets the account ID (x.z.y) which will receive all remaining hbarsOptional
setTransferContractId(<contractId>)ContractIdSets the contract ID (x.z.y) which will receive all remaining hbars.Optional
//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
//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
//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
// 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