Skip to content

Instantly share code, notes, and snippets.

@somdoron
Created March 12, 2018 09:38
Show Gist options
  • Save somdoron/6aca0905d2df3351200c3591a299929f to your computer and use it in GitHub Desktop.
Save somdoron/6aca0905d2df3351200c3591a299929f to your computer and use it in GitHub Desktop.
open Zen.Types
open Zen.Vector
open Zen.Base
open Zen.Cost
open Zen.Asset
module E = Zen.Error
module ET = Zen.ErrorT
module Tx = Zen.TxSkeleton
val cf: txSkeleton -> string -> data -> option lock -> #l:nat -> wallet l -> cost nat 13
let cf _ _ _ _ #l _ =
ret (64 + (l * 128 + 192) + 15 + 9 + 11)
val withNoContract: result txSkeleton -> cost (result (txSkeleton ** option message)) 9
let withNoContract result =
match result with
| OK txSkeleton -> ET.ret (txSkeleton,None)
| EX e -> ET.autoFail e
| ERR msg -> ET.autoFailw msg
val get: #l:nat -> txSkeleton -> contractHash -> option lock -> wallet l -> cost (result txSkeleton) (64 + (l * 128 + 192) + 15)
let get #l txSkeleton contractHash returnAddress (wallet:wallet l) =
match returnAddress with
| Some returnAddress ->
let txSkeleton =
Tx.lockToAddress zenAsset 10000UL returnAddress txSkeleton
>>= Tx.fromWallet zenAsset 10000UL contractHash wallet in
ET.of_optionT "contract doesn't have enough zens to pay you" txSkeleton
| None ->
ET.autoFailw "returnAddress is required"
val init: txSkeleton -> contractHash -> cost (result txSkeleton) (64 + 64 + 8)
let init txSkeleton contractHash =
let! tokens = Tx.getAvailableTokens zenAsset txSkeleton in
let txSkeleton = Tx.lockToContract zenAsset tokens contractHash txSkeleton in
ET.retT txSkeleton
val main: txSkeleton -> hash -> string -> data -> option lock -> #l:nat -> wallet l -> cost (result (txSkeleton ** option message)) (64 + (l * 128 + 192) + 15 + 9 + 11)
let main txSkeleton contractHash command data returnAddress #l wallet =
if command <> "init" then
get txSkeleton contractHash returnAddress wallet
>>= withNoContract
else
autoInc (init txSkeleton contractHash >>= withNoContract)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment