Raw File
account.mli
(*****************************************************************************)
(*                                                                           *)
(* Open Source License                                                       *)
(* Copyright (c) 2021 Nomadic Labs <contact@nomadic-labs.com>                *)
(*                                                                           *)
(* Permission is hereby granted, free of charge, to any person obtaining a   *)
(* copy of this software and associated documentation files (the "Software"),*)
(* to deal in the Software without restriction, including without limitation *)
(* the rights to use, copy, modify, merge, publish, distribute, sublicense,  *)
(* and/or sell copies of the Software, and to permit persons to whom the     *)
(* Software is furnished to do so, subject to the following conditions:      *)
(*                                                                           *)
(* The above copyright notice and this permission notice shall be included   *)
(* in all copies or substantial portions of the Software.                    *)
(*                                                                           *)
(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*)
(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,  *)
(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL   *)
(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*)
(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING   *)
(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER       *)
(* DEALINGS IN THE SOFTWARE.                                                 *)
(*                                                                           *)
(*****************************************************************************)

(** This type is used to construct values for secret keys.

    Note: The tests only use unencrypted keys for the moment, please
    add new constructors for other keys here, as needed. *)
type secret_key =
  | Unencrypted of string
      (** The string does NOT contain the 'encrypted:' prefix *)
  | Encrypted of string

(** Keys associated to an account. For example:
{[
    {
      alias = "bootstrap1";
      public_key_hash = "tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx";
      public_key = "edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav";
      secret_key =
        Unencrypted "edsk3gUfUPyBSfrS9CCgmCiQsTCHGkviBDusMxDJstFtojtc1zcpsh";
    }
]} *)
type key = {
  alias : string;
  public_key_hash : string;
  public_key : string;
  secret_key : secret_key;
}

(** A [Check.typ] for [key] *)
val key_typ : key Check.typ

(** Keys associated to an aggregatable account. For example:
{[
    {
      aggregate_alias = "bls_account";
      aggregate_public_key_hash = "tz4EECtMxAuJ9UDLaiMZH7G1GCFYUWsj8HZn";
      aggregate_public_key =
        "BLpk1yUiLJ7RezbyViD5ZvWTfQndM3TRRYmvYWkUfH2EJqsLFnzzvpJss6pbuz3U1DDMpk8v16nV";
      aggregate_secret_key =
        Unencrypted "BLsk1hKAHyGqY9qRbgoSVnjiSmDWpKGjFF3WNQ7BaiaMUA6RMA6Pfq";
    }
]} *)
type aggregate_key = {
  aggregate_alias : string;
  aggregate_public_key_hash : string;
  aggregate_public_key : string;
  aggregate_secret_key : secret_key;
}

(** [sign_bytes ~watermark ~signer message] signs the bytes [message] with
    [signer]'s secret key. Returns the corresponding Tezos signature. This
    function can be used to sign transactions, blocks, etc. depending on
    the given [watermark].

    Used for regular accounts. *)
val sign_bytes :
  watermark:Tezos_crypto.Signature.watermark ->
  signer:key ->
  bytes ->
  Tezos_crypto.Signature.t

(** [require_unencrypted_secret_key ~__LOC__ key] returns [sk] if [key] is [Unencrypted sk], or fails. *)
val require_unencrypted_secret_key : __LOC__:string -> secret_key -> string

(** [uri_of_secret_key secret_key] returns [secret_key] as an URI. 
    
    The URI of a secret key is its contents prefixed [unencrypted:] respectively
    [encrypted:] if it is unencrypted respetively encrypted. *)
val uri_of_secret_key : secret_key -> string

(** A [Check.typ] for [secret_key] *)
val secret_key_typ : secret_key Check.typ

(** [write keys ~base_dir] writes the keys into the [octez-client]'s data
   directory [base_dir]. This function has the same effect
   as importing all the keys manually  via [octez-client] but is
   faster. *)
val write : key list -> base_dir:string -> unit

module Bootstrap : sig
  (** Standard name for a bootstrap account parameterised by an
      integer. This alias can be used to name new bootstrap
      accounts. *)
  val alias : int -> string

  (** The default bootstrap keys. *)
  val keys : key array
end

(** [parse_client_output ~alias ~client_output] extracts keys from clients output that
    yields result of the form
{v
      Hash: tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx
      Public Key: edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav
      Secret Key: unencrypted:edsk3gUfUPyBSfrS9CCgmCiQsTCHGkviBDusMxDJstFtojtc1zcpsh
v}
    and returns the corresponding key.
*)
val parse_client_output : alias:string -> client_output:string -> key

(** [parse_client_output_aggregate ~alias ~client_output] extracts keys from
    clients output that yields result of the form
{v
      Hash: tz4EECtMxAuJ9UDLaiMZH7G1GCFYUWsj8HZn
      Public Key: BLpk1yUiLJ7RezbyViD5ZvWTfQndM3TRRYmvYWkUfH2EJqsLFnzzvpJss6pbuz3U1DDMpk8v16nV
      Secret Key: aggregate_unencrypted:BLsk1hKAHyGqY9qRbgoSVnjiSmDWpKGjFF3WNQ7BaiaMUA6RMA6Pfq
v}
    and returns the corresponding key.
*)
val parse_client_output_aggregate :
  alias:string -> client_output:string -> aggregate_key
back to top