package tezos-protocol-006-PsCARTHA

  1. Overview
  2. Docs
Legend:
Library
Module
Module type
Parameter
Class
Class type
type var_annot = [
  1. | `Var_annot of string
]
type type_annot = [
  1. | `Type_annot of string
]
type field_annot = [
  1. | `Field_annot of string
]
type annot = [
  1. | var_annot
  2. | type_annot
  3. | field_annot
]
type address = Alpha_context.Contract.t * string
type ('a, 'b) pair = 'a * 'b
type ('a, 'b) union =
  1. | L of 'a
  2. | R of 'b
type comb =
  1. | Comb
type leaf =
  1. | Leaf
type (_, _) comparable_struct =
  1. | Int_key : type_annot option -> (Alpha_context.Script_int.z Alpha_context.Script_int.num, _) comparable_struct
  2. | Nat_key : type_annot option -> (Alpha_context.Script_int.n Alpha_context.Script_int.num, _) comparable_struct
  3. | String_key : type_annot option -> (string, _) comparable_struct
  4. | Bytes_key : type_annot option -> (Tezos_protocol_environment.MBytes.t, _) comparable_struct
  5. | Mutez_key : type_annot option -> (Alpha_context.Tez.t, _) comparable_struct
  6. | Bool_key : type_annot option -> (bool, _) comparable_struct
  7. | Key_hash_key : type_annot option -> (Alpha_context.public_key_hash, _) comparable_struct
  8. | Timestamp_key : type_annot option -> (Alpha_context.Script_timestamp.t, _) comparable_struct
  9. | Address_key : type_annot option -> (address, _) comparable_struct
  10. | Pair_key : (('a, leaf) comparable_struct * field_annot option) * (('b, comb) comparable_struct * field_annot option) * type_annot option -> (('a, 'b) pair, comb) comparable_struct
type 'a comparable_ty = ('a, comb) comparable_struct
module type Boxed_set = sig ... end
type 'elt set = (module Boxed_set with type elt = 'elt)
module type Boxed_map = sig ... end
type ('key, 'value) map = (module Boxed_map with type key = 'key and type value = 'value)
type ('arg, 'storage) script = {
  1. code : (('arg, 'storage) pair, (operation list, 'storage) pair) lambda;
  2. arg_type : 'arg ty;
  3. storage : 'storage;
  4. storage_type : 'storage ty;
  5. root_name : string option;
}
and end_of_stack = unit
and ('arg, 'ret) lambda =
  1. | Lam : ('arg * end_of_stack, 'ret * end_of_stack) descr * Alpha_context.Script.node -> ('arg, 'ret) lambda
and 'arg typed_contract = 'arg ty * address
and 'ty ty =
  1. | Unit_t : type_annot option -> unit ty
  2. | Int_t : type_annot option -> Alpha_context.Script_int.z Alpha_context.Script_int.num ty
  3. | Nat_t : type_annot option -> Alpha_context.Script_int.n Alpha_context.Script_int.num ty
  4. | Signature_t : type_annot option -> Alpha_context.signature ty
  5. | String_t : type_annot option -> string ty
  6. | Bytes_t : type_annot option -> Tezos_protocol_environment.MBytes.t ty
  7. | Mutez_t : type_annot option -> Alpha_context.Tez.t ty
  8. | Key_hash_t : type_annot option -> Alpha_context.public_key_hash ty
  9. | Key_t : type_annot option -> Alpha_context.public_key ty
  10. | Timestamp_t : type_annot option -> Alpha_context.Script_timestamp.t ty
  11. | Address_t : type_annot option -> address ty
  12. | Bool_t : type_annot option -> bool ty
  13. | Pair_t : ('a ty * field_annot option * var_annot option) * ('b ty * field_annot option * var_annot option) * type_annot option * bool -> ('a, 'b) pair ty
  14. | Union_t : ('a ty * field_annot option) * ('b ty * field_annot option) * type_annot option * bool -> ('a, 'b) union ty
  15. | Lambda_t : 'arg ty * 'ret ty * type_annot option -> ('arg, 'ret) lambda ty
  16. | Option_t : 'v ty * type_annot option * bool -> 'v option ty
  17. | List_t : 'v ty * type_annot option * bool -> 'v list ty
  18. | Set_t : 'v comparable_ty * type_annot option -> 'v set ty
  19. | Map_t : 'k comparable_ty * 'v ty * type_annot option * bool -> ('k, 'v) map ty
  20. | Big_map_t : 'k comparable_ty * 'v ty * type_annot option -> ('k, 'v) big_map ty
  21. | Contract_t : 'arg ty * type_annot option -> 'arg typed_contract ty
  22. | Operation_t : type_annot option -> operation ty
  23. | Chain_id_t : type_annot option -> Tezos_protocol_environment.Chain_id.t ty
and 'ty stack_ty =
  1. | Item_t : 'ty ty * 'rest stack_ty * var_annot option -> ('ty * 'rest) stack_ty
  2. | Empty_t : end_of_stack stack_ty
and ('key, 'value) big_map = {
  1. id : Tezos_protocol_environment.Z.t option;
  2. diff : ('key, 'value option) map;
  3. key_type : 'key ty;
  4. value_type : 'value ty;
}
and ('bef, 'aft) instr =
  1. | Drop : (_ * 'rest, 'rest) instr
  2. | Dup : ('top * 'rest, 'top * ('top * 'rest)) instr
  3. | Swap : ('tip * ('top * 'rest), 'top * ('tip * 'rest)) instr
  4. | Const : 'ty -> ('rest, 'ty * 'rest) instr
  5. | Cons_pair : ('car * ('cdr * 'rest), ('car, 'cdr) pair * 'rest) instr
  6. | Car : (('car, _) pair * 'rest, 'car * 'rest) instr
  7. | Cdr : ((_, 'cdr) pair * 'rest, 'cdr * 'rest) instr
  8. | Cons_some : ('v * 'rest, 'v option * 'rest) instr
  9. | Cons_none : 'a ty -> ('rest, 'a option * 'rest) instr
  10. | If_none : ('bef, 'aft) descr * ('a * 'bef, 'aft) descr -> ('a option * 'bef, 'aft) instr
  11. | Left : ('l * 'rest, ('l, 'r) union * 'rest) instr
  12. | Right : ('r * 'rest, ('l, 'r) union * 'rest) instr
  13. | If_left : ('l * 'bef, 'aft) descr * ('r * 'bef, 'aft) descr -> (('l, 'r) union * 'bef, 'aft) instr
  14. | Cons_list : ('a * ('a list * 'rest), 'a list * 'rest) instr
  15. | Nil : ('rest, 'a list * 'rest) instr
  16. | If_cons : ('a * ('a list * 'bef), 'aft) descr * ('bef, 'aft) descr -> ('a list * 'bef, 'aft) instr
  17. | List_map : ('a * 'rest, 'b * 'rest) descr -> ('a list * 'rest, 'b list * 'rest) instr
  18. | List_iter : ('a * 'rest, 'rest) descr -> ('a list * 'rest, 'rest) instr
  19. | List_size : ('a list * 'rest, Alpha_context.Script_int.n Alpha_context.Script_int.num * 'rest) instr
  20. | Empty_set : 'a comparable_ty -> ('rest, 'a set * 'rest) instr
  21. | Set_iter : ('a * 'rest, 'rest) descr -> ('a set * 'rest, 'rest) instr
  22. | Set_mem : ('elt * ('elt set * 'rest), bool * 'rest) instr
  23. | Set_update : ('elt * (bool * ('elt set * 'rest)), 'elt set * 'rest) instr
  24. | Set_size : ('a set * 'rest, Alpha_context.Script_int.n Alpha_context.Script_int.num * 'rest) instr
  25. | Empty_map : 'a comparable_ty * 'v ty -> ('rest, ('a, 'v) map * 'rest) instr
  26. | Map_map : (('a * 'v) * 'rest, 'r * 'rest) descr -> (('a, 'v) map * 'rest, ('a, 'r) map * 'rest) instr
  27. | Map_iter : (('a * 'v) * 'rest, 'rest) descr -> (('a, 'v) map * 'rest, 'rest) instr
  28. | Map_mem : ('a * (('a, 'v) map * 'rest), bool * 'rest) instr
  29. | Map_get : ('a * (('a, 'v) map * 'rest), 'v option * 'rest) instr
  30. | Map_update : ('a * ('v option * (('a, 'v) map * 'rest)), ('a, 'v) map * 'rest) instr
  31. | Map_size : (('a, 'b) map * 'rest, Alpha_context.Script_int.n Alpha_context.Script_int.num * 'rest) instr
  32. | Empty_big_map : 'a comparable_ty * 'v ty -> ('rest, ('a, 'v) big_map * 'rest) instr
  33. | Big_map_mem : ('a * (('a, 'v) big_map * 'rest), bool * 'rest) instr
  34. | Big_map_get : ('a * (('a, 'v) big_map * 'rest), 'v option * 'rest) instr
  35. | Big_map_update : ('key * ('value option * (('key, 'value) big_map * 'rest)), ('key, 'value) big_map * 'rest) instr
  36. | Concat_string : (string list * 'rest, string * 'rest) instr
  37. | Concat_string_pair : (string * (string * 'rest), string * 'rest) instr
  38. | Slice_string : (Alpha_context.Script_int.n Alpha_context.Script_int.num * (Alpha_context.Script_int.n Alpha_context.Script_int.num * (string * 'rest)), string option * 'rest) instr
  39. | String_size : (string * 'rest, Alpha_context.Script_int.n Alpha_context.Script_int.num * 'rest) instr
  40. | Concat_bytes : (Tezos_protocol_environment.MBytes.t list * 'rest, Tezos_protocol_environment.MBytes.t * 'rest) instr
  41. | Concat_bytes_pair : (Tezos_protocol_environment.MBytes.t * (Tezos_protocol_environment.MBytes.t * 'rest), Tezos_protocol_environment.MBytes.t * 'rest) instr
  42. | Slice_bytes : (Alpha_context.Script_int.n Alpha_context.Script_int.num * (Alpha_context.Script_int.n Alpha_context.Script_int.num * (Tezos_protocol_environment.MBytes.t * 'rest)), Tezos_protocol_environment.MBytes.t option * 'rest) instr
  43. | Bytes_size : (Tezos_protocol_environment.MBytes.t * 'rest, Alpha_context.Script_int.n Alpha_context.Script_int.num * 'rest) instr
  44. | Add_seconds_to_timestamp : (Alpha_context.Script_int.z Alpha_context.Script_int.num * (Alpha_context.Script_timestamp.t * 'rest), Alpha_context.Script_timestamp.t * 'rest) instr
  45. | Add_timestamp_to_seconds : (Alpha_context.Script_timestamp.t * (Alpha_context.Script_int.z Alpha_context.Script_int.num * 'rest), Alpha_context.Script_timestamp.t * 'rest) instr
  46. | Sub_timestamp_seconds : (Alpha_context.Script_timestamp.t * (Alpha_context.Script_int.z Alpha_context.Script_int.num * 'rest), Alpha_context.Script_timestamp.t * 'rest) instr
  47. | Diff_timestamps : (Alpha_context.Script_timestamp.t * (Alpha_context.Script_timestamp.t * 'rest), Alpha_context.Script_int.z Alpha_context.Script_int.num * 'rest) instr
  48. | Add_tez : (Alpha_context.Tez.t * (Alpha_context.Tez.t * 'rest), Alpha_context.Tez.t * 'rest) instr
  49. | Sub_tez : (Alpha_context.Tez.t * (Alpha_context.Tez.t * 'rest), Alpha_context.Tez.t * 'rest) instr
  50. | Mul_teznat : (Alpha_context.Tez.t * (Alpha_context.Script_int.n Alpha_context.Script_int.num * 'rest), Alpha_context.Tez.t * 'rest) instr
  51. | Mul_nattez : (Alpha_context.Script_int.n Alpha_context.Script_int.num * (Alpha_context.Tez.t * 'rest), Alpha_context.Tez.t * 'rest) instr
  52. | Ediv_teznat : (Alpha_context.Tez.t * (Alpha_context.Script_int.n Alpha_context.Script_int.num * 'rest), (Alpha_context.Tez.t, Alpha_context.Tez.t) pair option * 'rest) instr
  53. | Ediv_tez : (Alpha_context.Tez.t * (Alpha_context.Tez.t * 'rest), (Alpha_context.Script_int.n Alpha_context.Script_int.num, Alpha_context.Tez.t) pair option * 'rest) instr
  54. | Or : (bool * (bool * 'rest), bool * 'rest) instr
  55. | And : (bool * (bool * 'rest), bool * 'rest) instr
  56. | Xor : (bool * (bool * 'rest), bool * 'rest) instr
  57. | Not : (bool * 'rest, bool * 'rest) instr
  58. | Is_nat : (Alpha_context.Script_int.z Alpha_context.Script_int.num * 'rest, Alpha_context.Script_int.n Alpha_context.Script_int.num option * 'rest) instr
  59. | Neg_nat : (Alpha_context.Script_int.n Alpha_context.Script_int.num * 'rest, Alpha_context.Script_int.z Alpha_context.Script_int.num * 'rest) instr
  60. | Neg_int : (Alpha_context.Script_int.z Alpha_context.Script_int.num * 'rest, Alpha_context.Script_int.z Alpha_context.Script_int.num * 'rest) instr
  61. | Abs_int : (Alpha_context.Script_int.z Alpha_context.Script_int.num * 'rest, Alpha_context.Script_int.n Alpha_context.Script_int.num * 'rest) instr
  62. | Int_nat : (Alpha_context.Script_int.n Alpha_context.Script_int.num * 'rest, Alpha_context.Script_int.z Alpha_context.Script_int.num * 'rest) instr
  63. | Add_intint : (Alpha_context.Script_int.z Alpha_context.Script_int.num * (Alpha_context.Script_int.z Alpha_context.Script_int.num * 'rest), Alpha_context.Script_int.z Alpha_context.Script_int.num * 'rest) instr
  64. | Add_intnat : (Alpha_context.Script_int.z Alpha_context.Script_int.num * (Alpha_context.Script_int.n Alpha_context.Script_int.num * 'rest), Alpha_context.Script_int.z Alpha_context.Script_int.num * 'rest) instr
  65. | Add_natint : (Alpha_context.Script_int.n Alpha_context.Script_int.num * (Alpha_context.Script_int.z Alpha_context.Script_int.num * 'rest), Alpha_context.Script_int.z Alpha_context.Script_int.num * 'rest) instr
  66. | Add_natnat : (Alpha_context.Script_int.n Alpha_context.Script_int.num * (Alpha_context.Script_int.n Alpha_context.Script_int.num * 'rest), Alpha_context.Script_int.n Alpha_context.Script_int.num * 'rest) instr
  67. | Sub_int : ('s Alpha_context.Script_int.num * ('t Alpha_context.Script_int.num * 'rest), Alpha_context.Script_int.z Alpha_context.Script_int.num * 'rest) instr
  68. | Mul_intint : (Alpha_context.Script_int.z Alpha_context.Script_int.num * (Alpha_context.Script_int.z Alpha_context.Script_int.num * 'rest), Alpha_context.Script_int.z Alpha_context.Script_int.num * 'rest) instr
  69. | Mul_intnat : (Alpha_context.Script_int.z Alpha_context.Script_int.num * (Alpha_context.Script_int.n Alpha_context.Script_int.num * 'rest), Alpha_context.Script_int.z Alpha_context.Script_int.num * 'rest) instr
  70. | Mul_natint : (Alpha_context.Script_int.n Alpha_context.Script_int.num * (Alpha_context.Script_int.z Alpha_context.Script_int.num * 'rest), Alpha_context.Script_int.z Alpha_context.Script_int.num * 'rest) instr
  71. | Mul_natnat : (Alpha_context.Script_int.n Alpha_context.Script_int.num * (Alpha_context.Script_int.n Alpha_context.Script_int.num * 'rest), Alpha_context.Script_int.n Alpha_context.Script_int.num * 'rest) instr
  72. | Ediv_intint : (Alpha_context.Script_int.z Alpha_context.Script_int.num * (Alpha_context.Script_int.z Alpha_context.Script_int.num * 'rest), (Alpha_context.Script_int.z Alpha_context.Script_int.num, Alpha_context.Script_int.n Alpha_context.Script_int.num) pair option * 'rest) instr
  73. | Ediv_intnat : (Alpha_context.Script_int.z Alpha_context.Script_int.num * (Alpha_context.Script_int.n Alpha_context.Script_int.num * 'rest), (Alpha_context.Script_int.z Alpha_context.Script_int.num, Alpha_context.Script_int.n Alpha_context.Script_int.num) pair option * 'rest) instr
  74. | Ediv_natint : (Alpha_context.Script_int.n Alpha_context.Script_int.num * (Alpha_context.Script_int.z Alpha_context.Script_int.num * 'rest), (Alpha_context.Script_int.z Alpha_context.Script_int.num, Alpha_context.Script_int.n Alpha_context.Script_int.num) pair option * 'rest) instr
  75. | Ediv_natnat : (Alpha_context.Script_int.n Alpha_context.Script_int.num * (Alpha_context.Script_int.n Alpha_context.Script_int.num * 'rest), (Alpha_context.Script_int.n Alpha_context.Script_int.num, Alpha_context.Script_int.n Alpha_context.Script_int.num) pair option * 'rest) instr
  76. | Lsl_nat : (Alpha_context.Script_int.n Alpha_context.Script_int.num * (Alpha_context.Script_int.n Alpha_context.Script_int.num * 'rest), Alpha_context.Script_int.n Alpha_context.Script_int.num * 'rest) instr
  77. | Lsr_nat : (Alpha_context.Script_int.n Alpha_context.Script_int.num * (Alpha_context.Script_int.n Alpha_context.Script_int.num * 'rest), Alpha_context.Script_int.n Alpha_context.Script_int.num * 'rest) instr
  78. | Or_nat : (Alpha_context.Script_int.n Alpha_context.Script_int.num * (Alpha_context.Script_int.n Alpha_context.Script_int.num * 'rest), Alpha_context.Script_int.n Alpha_context.Script_int.num * 'rest) instr
  79. | And_nat : (Alpha_context.Script_int.n Alpha_context.Script_int.num * (Alpha_context.Script_int.n Alpha_context.Script_int.num * 'rest), Alpha_context.Script_int.n Alpha_context.Script_int.num * 'rest) instr
  80. | And_int_nat : (Alpha_context.Script_int.z Alpha_context.Script_int.num * (Alpha_context.Script_int.n Alpha_context.Script_int.num * 'rest), Alpha_context.Script_int.n Alpha_context.Script_int.num * 'rest) instr
  81. | Xor_nat : (Alpha_context.Script_int.n Alpha_context.Script_int.num * (Alpha_context.Script_int.n Alpha_context.Script_int.num * 'rest), Alpha_context.Script_int.n Alpha_context.Script_int.num * 'rest) instr
  82. | Not_nat : (Alpha_context.Script_int.n Alpha_context.Script_int.num * 'rest, Alpha_context.Script_int.z Alpha_context.Script_int.num * 'rest) instr
  83. | Not_int : (Alpha_context.Script_int.z Alpha_context.Script_int.num * 'rest, Alpha_context.Script_int.z Alpha_context.Script_int.num * 'rest) instr
  84. | Seq : ('bef, 'trans) descr * ('trans, 'aft) descr -> ('bef, 'aft) instr
  85. | If : ('bef, 'aft) descr * ('bef, 'aft) descr -> (bool * 'bef, 'aft) instr
  86. | Loop : ('rest, bool * 'rest) descr -> (bool * 'rest, 'rest) instr
  87. | Loop_left : ('a * 'rest, ('a, 'b) union * 'rest) descr -> (('a, 'b) union * 'rest, 'b * 'rest) instr
  88. | Dip : ('bef, 'aft) descr -> ('top * 'bef, 'top * 'aft) instr
  89. | Exec : ('arg * (('arg, 'ret) lambda * 'rest), 'ret * 'rest) instr
  90. | Apply : 'arg ty -> ('arg * (('arg * 'remaining, 'ret) lambda * 'rest), ('remaining, 'ret) lambda * 'rest) instr
  91. | Lambda : ('arg, 'ret) lambda -> ('rest, ('arg, 'ret) lambda * 'rest) instr
  92. | Failwith : 'a ty -> ('a * 'rest, 'aft) instr
  93. | Nop : ('rest, 'rest) instr
  94. | Compare : 'a comparable_ty -> ('a * ('a * 'rest), Alpha_context.Script_int.z Alpha_context.Script_int.num * 'rest) instr
  95. | Eq : (Alpha_context.Script_int.z Alpha_context.Script_int.num * 'rest, bool * 'rest) instr
  96. | Neq : (Alpha_context.Script_int.z Alpha_context.Script_int.num * 'rest, bool * 'rest) instr
  97. | Lt : (Alpha_context.Script_int.z Alpha_context.Script_int.num * 'rest, bool * 'rest) instr
  98. | Gt : (Alpha_context.Script_int.z Alpha_context.Script_int.num * 'rest, bool * 'rest) instr
  99. | Le : (Alpha_context.Script_int.z Alpha_context.Script_int.num * 'rest, bool * 'rest) instr
  100. | Ge : (Alpha_context.Script_int.z Alpha_context.Script_int.num * 'rest, bool * 'rest) instr
  101. | Address : (_ typed_contract * 'rest, address * 'rest) instr
  102. | Contract : 'p ty * string -> (address * 'rest, 'p typed_contract option * 'rest) instr
  103. | Transfer_tokens : ('arg * (Alpha_context.Tez.t * ('arg typed_contract * 'rest)), operation * 'rest) instr
  104. | Create_account : (Alpha_context.public_key_hash * (Alpha_context.public_key_hash option * (bool * (Alpha_context.Tez.t * 'rest))), operation * (address * 'rest)) instr
  105. | Implicit_account : (Alpha_context.public_key_hash * 'rest, unit typed_contract * 'rest) instr
  106. | Create_contract : 'g ty * 'p ty * ('p * 'g, operation list * 'g) lambda * string option -> (Alpha_context.public_key_hash * (Alpha_context.public_key_hash option * (bool * (bool * (Alpha_context.Tez.t * ('g * 'rest))))), operation * (address * 'rest)) instr
  107. | Create_contract_2 : 'g ty * 'p ty * ('p * 'g, operation list * 'g) lambda * string option -> (Alpha_context.public_key_hash option * (Alpha_context.Tez.t * ('g * 'rest)), operation * (address * 'rest)) instr
  108. | Set_delegate : (Alpha_context.public_key_hash option * 'rest, operation * 'rest) instr
  109. | Now : ('rest, Alpha_context.Script_timestamp.t * 'rest) instr
  110. | Balance : ('rest, Alpha_context.Tez.t * 'rest) instr
  111. | Check_signature : (Alpha_context.public_key * (Alpha_context.signature * (Tezos_protocol_environment.MBytes.t * 'rest)), bool * 'rest) instr
  112. | Hash_key : (Alpha_context.public_key * 'rest, Alpha_context.public_key_hash * 'rest) instr
  113. | Pack : 'a ty -> ('a * 'rest, Tezos_protocol_environment.MBytes.t * 'rest) instr
  114. | Unpack : 'a ty -> (Tezos_protocol_environment.MBytes.t * 'rest, 'a option * 'rest) instr
  115. | Blake2b : (Tezos_protocol_environment.MBytes.t * 'rest, Tezos_protocol_environment.MBytes.t * 'rest) instr
  116. | Sha256 : (Tezos_protocol_environment.MBytes.t * 'rest, Tezos_protocol_environment.MBytes.t * 'rest) instr
  117. | Sha512 : (Tezos_protocol_environment.MBytes.t * 'rest, Tezos_protocol_environment.MBytes.t * 'rest) instr
  118. | Steps_to_quota : ('rest, Alpha_context.Script_int.n Alpha_context.Script_int.num * 'rest) instr
  119. | Source : ('rest, address * 'rest) instr
  120. | Sender : ('rest, address * 'rest) instr
  121. | Self : 'p ty * string -> ('rest, 'p typed_contract * 'rest) instr
  122. | Amount : ('rest, Alpha_context.Tez.t * 'rest) instr
  123. | Dig : int * ('x * 'rest, 'rest, 'bef, 'aft) stack_prefix_preservation_witness -> ('bef, 'x * 'aft) instr
  124. | Dug : int * ('rest, 'x * 'rest, 'bef, 'aft) stack_prefix_preservation_witness -> ('x * 'bef, 'aft) instr
  125. | Dipn : int * ('fbef, 'faft, 'bef, 'aft) stack_prefix_preservation_witness * ('fbef, 'faft) descr -> ('bef, 'aft) instr
  126. | Dropn : int * ('rest, 'rest, 'bef, _) stack_prefix_preservation_witness -> ('bef, 'rest) instr
  127. | ChainId : ('rest, Tezos_protocol_environment.Chain_id.t * 'rest) instr
and ('bef, 'aft, 'bef_suffix, 'aft_suffix) stack_prefix_preservation_witness =
  1. | Prefix : ('fbef, 'faft, 'bef, 'aft) stack_prefix_preservation_witness -> ('fbef, 'faft, 'x * 'bef, 'x * 'aft) stack_prefix_preservation_witness
  2. | Rest : ('bef, 'aft, 'bef, 'aft) stack_prefix_preservation_witness
and ('bef, 'aft) descr = {
  1. loc : Alpha_context.Script.location;
  2. bef : 'bef stack_ty;
  3. aft : 'aft stack_ty;
  4. instr : ('bef, 'aft) instr;
}
type ex_big_map =
  1. | Ex_bm : ('key, 'value) big_map -> ex_big_map