code: func (ta TemplateAccount) RealisePublicKeyAndAddress(keyClient keys.KeyClient) (pubKey crypto.PublicKey, address crypto.Address, err error) {
  	if ta.PublicKey == nil {
  		if ta.Address == nil {
  			// If neither PublicKey or Address set then generate a new one
  			address, err = keyClient.Generate(ta.Name, crypto.CurveTypeEd25519)
  			if err != nil {
  				return
  			}
  		} else {
  			address = *ta.Address
  		}
  		// Get the (possibly existing) key
  		pubKey, err = keyClient.PublicKey(address)
  		if err != nil {
  			return
  		}
  	} else {
  		address = (*ta.PublicKey).GetAddress()
  		if ta.Address != nil && *ta.Address != address {
  			err = fmt.Errorf("template address %s does not match public key derived address %s", ta.Address,
  				ta.PublicKey)
  		}
  		pubKey = *ta.PublicKey
  	}
  	return
  }
docs: // Adds a public key and address to the template. If PublicKey will try to fetch it by Address.
  // If both PublicKey and Address are not set will use the keyClient to generate a new keypair