Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

better mutez error detection + fixed links in readme #5

Merged
merged 5 commits into from
Mar 2, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .travis.sh
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ opam switch create techelson 4.07.1
eval $(opam config env)

opam update
opam install dune menhir zarith ptime
opam install dune menhir zarith ptime stdint

opam --version

Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ and run
Techelson relies on the [dune] build system and a few other libraries:

```bash
> opam install dune menhir zarith ptime
> opam install dune menhir zarith ptime stdint
```

(This list of dependencies might be out-of-date. Check `.travis.sh` for the latest version.) Finally, build Techelson with `make`. The binary will be `./bin/techelson`.
Expand Down Expand Up @@ -66,5 +66,5 @@ For example
[dune]: https://github.com/ocaml/dune
[mdbook]: https://github.com/rust-lang-nursery/mdBook
[Liquidity]: http://www.liquidity-lang.org/
[adrienchampion.github.io/blog]: https://adrienchampion.github.io/blog
[the main repository's github pages]: https://adrienchampion.github.io/blog/tezos/techelson/with_liquidity/index.html
[adrienchampion.github.io/blog]: https://adrienchampion.github.io/blog/tezos/techelson/with_liquidity/index.html
[the main repository's github pages]: https://ocamlpro.github.io/techelson/user_doc/
6 changes: 3 additions & 3 deletions docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ and run
Techelson relies on the [dune] build system and a few other libraries:

```bash
> opam install dune menhir zarith ptime
> opam install dune menhir zarith ptime stdint
```

(This list of dependencies might be out-of-date. Check `.travis.sh` for the latest version.) Finally, build Techelson with `make`. The binary will be `./bin/techelson`.
Expand Down Expand Up @@ -66,5 +66,5 @@ For example
[dune]: https://github.com/ocaml/dune
[mdbook]: https://github.com/rust-lang-nursery/mdBook
[Liquidity]: http://www.liquidity-lang.org/
[adrienchampion.github.io/blog]: https://adrienchampion.github.io/blog
[the main repository's github pages]: https://adrienchampion.github.io/blog/tezos/techelson/with_liquidity/index.html
[adrienchampion.github.io/blog]: https://adrienchampion.github.io/blog/tezos/techelson/with_liquidity/index.html
[the main repository's github pages]: https://ocamlpro.github.io/techelson/user_doc/
2 changes: 1 addition & 1 deletion docs/user_doc/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ <h1 class="menu-title">Techelson User Documentation</h1>
<div id="content" class="content">
<main>
<a class="header" href="#techelson" id="techelson"><h1>Techelson</h1></a>
<p><strong>Techelson</strong> is a <strong>T</strong>est <strong>E</strong>xecution <strong>E</strong>nvironment (TEE) for <a href="https://tezos.gitlab.io/master/whitedoc/michelson.html" title="Michelson documentation page">Michelson smart contracts</a>.
<p><strong><a href="https://ocamlpro.github.io/techelson" title="Techelson's homepage">Techelson</a></strong> is a <strong>T</strong>est <strong>E</strong>xecution <strong>E</strong>nvironment (TEE) for <a href="https://tezos.gitlab.io/master/whitedoc/michelson.html" title="Michelson documentation page">Michelson smart contracts</a>.
Michelson is the stack-based language used by the <a href="https://tezos.com" title="Tezos official page">tezos blockchain</a>. Techelson is open
source and <a href="https://github.com/OCamlPro/techelson" title="Techelson on github.com">hosted on github</a>, where you can find the build instructions.</p>
<p>Techelson emulates just enough of the tezos blockchain protocol to be able to create smart
Expand Down
10 changes: 5 additions & 5 deletions docs/user_doc/print.html
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ <h1 class="menu-title">Techelson User Documentation</h1>
<div id="content" class="content">
<main>
<a class="header" href="#techelson" id="techelson"><h1>Techelson</h1></a>
<p><strong>Techelson</strong> is a <strong>T</strong>est <strong>E</strong>xecution <strong>E</strong>nvironment (TEE) for <a href="https://tezos.gitlab.io/master/whitedoc/michelson.html" title="Michelson documentation page">Michelson smart contracts</a>.
<p><strong><a href="https://ocamlpro.github.io/techelson" title="Techelson's homepage">Techelson</a></strong> is a <strong>T</strong>est <strong>E</strong>xecution <strong>E</strong>nvironment (TEE) for <a href="https://tezos.gitlab.io/master/whitedoc/michelson.html" title="Michelson documentation page">Michelson smart contracts</a>.
Michelson is the stack-based language used by the <a href="https://tezos.com" title="Tezos official page">tezos blockchain</a>. Techelson is open
source and <a href="https://github.com/OCamlPro/techelson" title="Techelson on github.com">hosted on github</a>, where you can find the build instructions.</p>
<p>Techelson emulates just enough of the tezos blockchain protocol to be able to create smart
Expand Down Expand Up @@ -463,7 +463,7 @@ <h1 class="menu-title">Techelson User Documentation</h1>
stack:
|==================================================================================================|
| @storage |
| 0 |
| 0p |
| nat |
|--------------------------------------------------------------------------------------------------|
| @amount |
Expand Down Expand Up @@ -699,7 +699,7 @@ <h1 class="menu-title">Techelson User Documentation</h1>
running test script...
stack:
|==================================================================================================|
| 0 |
| 0p |
| nat |
|==================================================================================================|

Expand Down Expand Up @@ -817,7 +817,7 @@ <h1 class="menu-title">Techelson User Documentation</h1>
running test script...
stack:
|==================================================================================================|
| 0 |
| 0p |
| nat |
|==================================================================================================|

Expand Down Expand Up @@ -939,7 +939,7 @@ <h1 class="menu-title">Techelson User Documentation</h1>
running test script...
stack:
|==================================================================================================|
| 1 |
| 1p |
| nat |
|==================================================================================================|

Expand Down
2 changes: 1 addition & 1 deletion docs/user_doc/searchindex.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/user_doc/searchindex.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/user_doc/testing/anonymous.html
Original file line number Diff line number Diff line change
Expand Up @@ -246,7 +246,7 @@ <h1 class="menu-title">Techelson User Documentation</h1>
running test script...
stack:
|==================================================================================================|
| 0 |
| 0p |
| nat |
|==================================================================================================|

Expand Down
2 changes: 1 addition & 1 deletion docs/user_doc/testing/contracts.html
Original file line number Diff line number Diff line change
Expand Up @@ -212,7 +212,7 @@ <h1 class="menu-title">Techelson User Documentation</h1>
stack:
|==================================================================================================|
| @storage |
| 0 |
| 0p |
| nat |
|--------------------------------------------------------------------------------------------------|
| @amount |
Expand Down
2 changes: 1 addition & 1 deletion docs/user_doc/testing/inspection.html
Original file line number Diff line number Diff line change
Expand Up @@ -233,7 +233,7 @@ <h1 class="menu-title">Techelson User Documentation</h1>
running test script...
stack:
|==================================================================================================|
| 0 |
| 0p |
| nat |
|==================================================================================================|

Expand Down
2 changes: 1 addition & 1 deletion docs/user_doc/testing/transfers.html
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,7 @@ <h1 class="menu-title">Techelson User Documentation</h1>
running test script...
stack:
|==================================================================================================|
| 1 |
| 1p |
| nat |
|==================================================================================================|

Expand Down
28 changes: 21 additions & 7 deletions src/1_base/common.ml
Original file line number Diff line number Diff line change
Expand Up @@ -223,19 +223,33 @@ let rec indent (fmt : formatter) (count : int) : unit =
count - 1 |> indent fmt
) else ()

let log (lvl : int) (args : ('a, formatter, unit) format) : 'a =
let log (must_indent : bool) (lvl : int) (args : ('a, formatter, unit) format) : 'a =
if lvl <= (!conf_ref).verb then (
(lvl - 1) * 4 |> indent out;
if lvl > 0 && must_indent then (
(lvl - 1) * 4 |> indent out
);
fprintf out args;
) else (
ifprintf out args
)

let log_0 (args : ('a, Format.formatter, unit) format) : 'a = log 0 args
let log_1 (args : ('a, Format.formatter, unit) format) : 'a = log 1 args
let log_2 (args : ('a, Format.formatter, unit) format) : 'a = log 2 args
let log_3 (args : ('a, Format.formatter, unit) format) : 'a = log 3 args
let log_4 (args : ('a, Format.formatter, unit) format) : 'a = log 4 args
let log_0 (args : ('a, Format.formatter, unit) format) : 'a = log false 0 args
let log_1 (args : ('a, Format.formatter, unit) format) : 'a = log false 1 args
let log_2
?indent:(indent=true)
(args : ('a, Format.formatter, unit) format)
: 'a
= log indent 2 args
let log_3
?indent:(indent=true)
(args : ('a, Format.formatter, unit) format)
: 'a
= log indent 3 args
let log_4
?indent:(indent=true)
(args : ('a, Format.formatter, unit) format)
: 'a
= log indent 4 args

let catch_exn (f : unit -> 'a) : ('a, exn) Either.t =
try f () |> Either.lft with
Expand Down
13 changes: 8 additions & 5 deletions src/1_base/common.mli
Original file line number Diff line number Diff line change
Expand Up @@ -219,8 +219,11 @@ val catch_internal_exn : (unit -> 'a) -> ('a, Exc.Internal.t) Either.t

(** Logs something at some log level.

Actually output if the configuration's log level is `>=` the level. *)
val log : int -> ('a, formatter, unit) format -> 'a
If the first argument is true, then the output will be indented based on the log level.

Actually output if the configuration's log level is `>=` the level.
*)
val log : bool -> int -> ('a, formatter, unit) format -> 'a

(** Logs something at log level 0 (always active). *)
val log_0 : ('a, Format.formatter, unit) format -> 'a
Expand All @@ -229,13 +232,13 @@ val log_0 : ('a, Format.formatter, unit) format -> 'a
val log_1 : ('a, Format.formatter, unit) format -> 'a

(** Logs something at log level 2. *)
val log_2 : ('a, Format.formatter, unit) format -> 'a
val log_2 : ?indent : bool -> ('a, Format.formatter, unit) format -> 'a

(** Logs something at log level 3. *)
val log_3 : ('a, Format.formatter, unit) format -> 'a
val log_3 : ?indent : bool -> ('a, Format.formatter, unit) format -> 'a

(** Logs something at log level 4. *)
val log_4 : ('a, Format.formatter, unit) format -> 'a
val log_4 : ?indent : bool -> ('a, Format.formatter, unit) format -> 'a

(** Random number generator, all bounds are exclusive.

Expand Down
21 changes: 20 additions & 1 deletion src/1_base/exc.ml
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,26 @@ module Protocol = struct
| Failure of string
| TooPoor of string * string * Int64.t
| MutezOvrflw of string
| MutezUdrflw of string
| DivZero of string
| Tezos of string

let fmt (fmt : formatter) (self : t) : unit =
match self with
| Failure blah -> fprintf fmt "Failure on value %s" blah
| Tezos blah -> fprintf fmt "%s" blah
| MutezOvrflw blah -> fprintf fmt "mutez operation overflow: %s" blah
| MutezOvrflw blah -> (
fprintf fmt "mutez operation overflow";
if blah <> "" then fprintf fmt ": %s" blah
)
| MutezUdrflw blah -> (
fprintf fmt "mutez operation underflow";
if blah <> "" then fprintf fmt ": %s" blah
)
| DivZero blah -> (
fprintf fmt "division by zero";
if blah <> "" then fprintf fmt ": %s" blah
)
| TooPoor (src, tgt, mutez) ->
fprintf fmt
"@[<hov>insufficient balance to process transaction of %s mutez"
Expand Down Expand Up @@ -62,6 +75,12 @@ module Throw = struct

let mutez_overflow (blah : string) : 'a =
Exc (Protocol (Protocol.MutezOvrflw blah)) |> raise

let mutez_underflow (blah : string) : 'a =
Exc (Protocol (Protocol.MutezUdrflw blah)) |> raise

let div_zero (blah : string) : 'a =
Exc (Protocol (Protocol.DivZero blah)) |> raise
end

let rec fmt (fmtt : formatter) (e : exn) : unit =
Expand Down
13 changes: 13 additions & 0 deletions src/1_base/exc.mli
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,13 @@ module Protocol : sig

Can happen either during a transfer or during operations on mutez.
*)
| MutezUdrflw of string
(** Mutez underflow.

Can happen either during a transfer or during operations on mutez.
*)
| DivZero of string
(** Division by zero. *)
| Tezos of string
(** Something went wrong in the protocol.

Expand Down Expand Up @@ -79,6 +86,12 @@ module Throw : sig

(** Raises a mutez overflow error. *)
val mutez_overflow : string -> 'a

(** Raises a mutez underflow error. *)
val mutez_underflow : string -> 'a

(** Raises a division by zero error. *)
val div_zero : string -> 'a
end

(** Raises an exception from a single trace frame. *)
Expand Down
2 changes: 2 additions & 0 deletions src/4_theory/bigArith.ml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ end
module BNat = struct
include BigInt

let fmt fmt n = fprintf fmt "%ap" Z.pp_print n

let of_string (s : string) : t =
let nat = Z.of_string s in
if Z.geq nat Z.zero then nat
Expand Down
3 changes: 2 additions & 1 deletion src/4_theory/dune
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@
(libraries
base
parse
zarith
ptime
stdint
zarith
)
)
Loading