code: func (w *Wallet) SignTx(account accounts.Account, tx *types.Transaction, chainID *big.Int) (*types.Transaction, error) {
  	signer := types.NewEIP155Signer(chainID)
  	hash := signer.Hash(tx)
  	sig, err := w.signHash(account, hash[:])
  	if err != nil {
  		return nil, err
  	}
  	return tx.WithSignature(signer, sig)
  }
docs: // SignTx requests the wallet to sign the given transaction.
  //
  // It looks up the account specified either solely via its address contained within,
  // or optionally with the aid of any location metadata from the embedded URL field.
  //
  // If the wallet requires additional authentication to sign the request (e.g.
  // a password to decrypt the account, or a PIN code o verify the transaction),
  // an AuthNeededError instance will be returned, containing infos for the user
  // about which fields or actions are needed. The user may retry by providing
  // the needed details via SignTxWithPassphrase, or by other means (e.g. unlock
  // the account in a keystore).