> ## 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".

# Manually sign a transaction

> Manually sign a transaction with the private keys it requires using sign(), signWith(), and related SDK methods, and learn when the operator key signs automatically on execute().

Sign a transaction using the private key(s) required to sign the transaction. You cannot sign the transaction with a public key. If your client operator account private key is the key used in the key field(s) of a transaction, you do not need to manually sign the transaction. The `execute(client)` method signs the transaction with the client operator account private key before it is submitted to a Hedera network.

<table><thead><tr><th /><th /><th /></tr></thead><tbody><tr><td><strong>Method</strong></td><td><strong>Type</strong></td><td><strong>Description</strong></td></tr><tr><td><code>sign(\<privateKey>)</code></td><td>PrivateKey</td><td>Sign the transaction with an ED25519 private key</td></tr><tr><td><code>signWith(\<publicKey, transactionSigner>)</code></td><td>PublicKey, TransactionSigner</td><td>Sign the transaction with a callback that may block waiting for user confirmation.</td></tr><tr><td><code>signWithOperator(\<client>)</code></td><td>Client</td><td>Sign the transaction with the client</td></tr><tr><td><code>signWithSigner(\<signer>)</code></td><td /><td>Sign the transaction with a local wallet. Local wallet available in Hedera JavaScript SDK only. >=<code>v2.11.0</code></td></tr></tbody></table>

<CodeGroup>
  ```java Java theme={null}
  //Create any transaction
  AccountUpdateTransaction transaction = new AccountUpdateTransaction()
       .setAccountId(accountId)
       .setKey(key);

  //Freeze the transaction for signing
  AccountUpdateTransaction freezeTransaction = transaction.freezeWith(client);

  //Sign the transaction with a private key
  AccountCreateTransaction signedTransaction = freezeTransaction
      .sign(PrivateKey.fromString("302e020100300506032b65700422042012a4a4add3d885bd61d7ce5cff88c5ef2d510651add00a7f64cb90de3359bc5c"));

  //v2.0.0    
  ```

  ```javascript JavaScript theme={null}
  //Create any transaction
  const transaction = await new AccountUpdateTransaction()
       .setAccountId(accountId)
       .setKey(key)
       .freezeWith(client);

  //Sign the transaction with a private key
  const signedTransaction = transaction
      .sign(PrivateKey.fromString("302e020100300506032b65700422042012a4a4add3d885bd61d7ce5cff88c5ef2d510651add00a7f64cb90de3359bc5c"));
  ```

  ```go Go theme={null}
  //Create any transaction
  transaction := hedera.NewAccountUpdateTransaction().
  		SetAccountID(newAccountId).
  		SetKey(updateKey.PublicKey())
  	
  //Freeze the transaction for signing
  freezeTransaction, err := transaction.FreezeWith(client)
  if err != nil {
      panic(err)
  }

  signedTransaction := freezeTransaction.Sign(hedera.PrivateKeyFromString("302e020100300506032b65700422042012a4a4add3d885bd61d7ce5cff88c5ef2d510651add00a7f64cb90de3359bc5c"))
  //v2.0.0
  ```

  ```rust Rust theme={null}
  // Create any transaction
  let transaction = AccountUpdateTransaction::new()
      .account_id(account_id)
      .key(key);

  // Freeze the transaction for signing
  let frozen_transaction = transaction.freeze_with(&client)?;

  // Sign the transaction with a private key
  let signed_transaction = frozen_transaction.sign(
      PrivateKey::from_str("302e020100300506032b65700422042012a4a4add3d885bd61d7ce5cff88c5ef2d510651add00a7f64cb90de3359bc5c")
  );

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