code: func newShareClaim(cl *client.Client, target blob.Ref) (blob.Ref, error) {
  	var claim blob.Ref
  	signer, err := cl.ServerPublicKeyBlobRef()
  	if err != nil {
  		return claim, fmt.Errorf("could not get signer: %v", err)
  	}
  	shareSchema := schema.NewShareRef(schema.ShareHaveRef, true)
  	shareSchema.SetShareTarget(target)
  	unsignedClaim, err := shareSchema.SetSigner(signer).JSON()
  	if err != nil {
  		return claim, fmt.Errorf("could not create unsigned share claim: %v", err)
  	}
  	signedClaim, err := cl.Sign(context.TODO(), "", strings.NewReader("json="+unsignedClaim))
  	if err != nil {
  		return claim, fmt.Errorf("could not get signed share claim: %v", err)
  	}
  	sbr, err := cl.Upload(context.TODO(), client.NewUploadHandleFromString(string(signedClaim)))
  	if err != nil {
  		return claim, fmt.Errorf("could not upload share claim: %v", err)
  	}
  	return sbr.BlobRef, nil
  }
docs: // newShareClaim creates, signs, and uploads a transitive haveref share claim
  // for sharing the target item. It returns the ref of the claim.