(* NAME_START:Subtype test:NAME_END *)
open Zen.Types
open Zen.Base
open Zen.Cost
open Zen.Asset
open Zen.Data
module D = Zen.Dictionary
module Tx = Zen.TxSkeleton
module CR = Zen.ContractResult
module RT = Zen.ResultT
module String = FStar.String
module C = Zen.Cost
let getToken contractId command =
if command = "index" then
begin
let! token = Zen.Asset.fromSubtypeInt contractId 100ul in
ret token
end
else
let (version,cHash) = contractId in
let token = (version,cHash,cHash) in
autoRet token
let main txSkeleton _ contractId command sender messageBody wallet state =
let dict = messageBody >!= tryDict in
let! returnAddress =
dict
>?= D.tryFind "returnAddress"
>?= tryLock
in
let! amount =
dict
>?= D.tryFind "amount"
>?= tryU64
in
match returnAddress,amount with
| Some returnAddress, Some amount ->
let! token = getToken contractId command in
let! txSkeleton =
Tx.lockToAddress token amount returnAddress txSkeleton
>>= Tx.mint amount token in
CR.ofTxSkel txSkeleton
| _ ->
RT.autoFailw "parameters are missing"
let cf _ _ _ _ _ wallet _ =
(4 + 64 + 2 + (4 + 64 + 2 + (64 + 0 + 10 + (64 + 64 + 3))) + 38)
|> cast nat
|> C.ret