We now have already_exists
variable. If the value of this variable is true, then we don’t want to allow the user to register, however, if it’s false then we do want to allow the user to register.
To implement this, we need to use a conditional structure which we learned in the previous chapter, the match
keyword.
We can quickly revisit the syntax for the match
expression.
already_exists
.match
will be True
and False
end
of the statements.We’ll fill in the code for the individual branches over the next lessons.
Show Solution
scilla_version 0
import BoolUtils
library SocialMediaPayment
let one_msg =
fun (msg: Message) =>
let nil_msg = Nil {Message} in
Cons {Message} msg nil_msg
let zero = Uint128 0
let not_owner_code = Uint32 1
let accepted_code = Uint32 0
contract SocialMediaPayment (owner: ByStr20)
field users: Map ByStr20 String
= Emp ByStr20 String
field used_usernames: Map String Bool
= Emp String Bool
transition deposit()
sender_is_owner = builtin eq _sender owner;
match sender_is_owner with
| False =>
msg = { _tag: "";
_recipient: _sender;
_amount: zero;
code: not_owner_code};
msgs = one_msg msg;
send msgs
| True =>
accept;
msg = { _tag: "";
_recipient: _sender;
_amount: zero;
code: accepted_code};
msgs = one_msg msg;
send msgs
end
end
transition register_user (user_address: ByStr20, twitter_username: String)
user_exists <- exists users[user_address];
username_exists <- exists used_usernames[twitter_username]
already_exists = orb user_exists username_exists
(* Start typing from the line below *)
end
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657