code: func (w *Wallet) SignTransaction(name string, force bool) error {
  	tx, err := w.GetTransaction(name)
  	if err != nil {
  		return err
  	}
  
  	if force == false {
  		// check that the address balances are sufficient for the transaction
  		if err := checkCovered(tx); err != nil {
  			return err
  		}
  
  		// check that the fee is being paid (and not overpaid)
  		if err := checkFee(tx); err != nil {
  			return err
  		}
  	}
  
  	data, err := tx.MarshalBinarySig()
  	if err != nil {
  		return err
  	}
  
  	rcds := tx.GetRCDs()
  	if len(rcds) == 0 {
  		return ErrTXNoInputs
  	}
  	for i, rcd := range rcds {
  		a, err := rcd.GetAddress()
  		if err != nil {
  			return err
  		}
  
  		f, err := w.GetFCTAddress(primitives.ConvertFctAddressToUserStr(a))
  		if err != nil {
  			return err
  		}
  		sig := factoid.NewSingleSignatureBlock(f.SecBytes(), data)
  		tx.SetSignatureBlock(i, sig)
  	}
  
  	return nil
  }
docs: // SignTransaction signs a tmp transaction in the wallet with the appropriate
  // keys from the wallet db
  // force=true ignores the existing balance and fee overpayment checks.