0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OCamlでEthereumのスマートコントラクトを開発できるようにするプロジェクトの紹介2 (bool 演算と if 式)

Posted at

株式会社 proof ninja 技術顧問の池渕です.

この記事はこちらの記事
OCamlでEthereumのスマートコントラクトを開発できるようにするプロジェクトの紹介
の続きです.今回は,新しく bool 値や if 式の実装を行ったのでその紹介をします.

ソースコードはこちら:

具体的には今回,ocaml2evm に以下のような値や式が追加されました.

  • bool 値 true, false
  • bool 演算 &&, ||, not
  • sint 型の整数の比較演算 <, >, <=, >=
  • if ... then ... else ...

具体例として,サンプルコードである ocaml2evm/sample/src/simple_storage.ml の中身を見てみましょう.

open OCamYul.Primitives

module SimpleStorageIf : sig
  type storage

  val set : sint -> storage -> unit * storage
  val get : unit -> storage -> sint * storage
  val lt : sint * sint -> storage -> bool * storage
  val gt : sint * sint -> storage -> bool * storage
  val lte : sint * sint -> storage -> bool * storage
  val gte : sint * sint -> storage -> bool * storage
  val xor : bool * bool -> storage -> bool * storage
  val xor2 : bool * bool -> storage -> bool * storage
  val max : sint * sint -> storage -> sint * storage
end = struct
  type storage = sint

  let set n _ = ((), n)
  let get () s = (s, s)
  let lt (x, y) s = (x < y, s)
  let gt (x, y) s = (x > y, s)
  let lte (x, y) s = (x <= y, s)
  let gte (x, y) s = (x >= y, s)

  let xor (x, y) s =
    let b = (x || y) && not (x && y) in
    (b, s)

  let xor2 (x, y) s =
    let b = if x then (if y then false else true) else (if y then true else false) in
    (b, s)

  let max (n, m) s =
    let b = n > m in
    ((if b then n else m), s)
end

ここで定義している xorxor2 は,上記のブール値演算や if 式を使って xor を(あえて複雑に)実装してみています.
OCaml の if は式なので,let b = if x then ... else ... のように代入の = の右側に if が書けます.C 言語などでいう三項条件演算子と同じです.

また,> を使って,整数の max 関数も定義しています.

このファイルをコンパイルするには,前回の記事と同様に,

$ dune exec ocamyulc sample/src/simple_storage_if.ml

を実行します.また,その結果は sample/contracts/SimpleStorageIf.json として出力されます.

bool 演算や if 式が使えるようになったことにより,前回よりいろいろなコントラクトが実装できるようになったと期待できます.
今後はこの機能の範囲でもう少し実用的なコントラクトを定義し,さらには簡単な形式検証を行っていくことが目標です.

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?