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
let user_exists_code = Uint32 2
let true = True
contract SocialMediaPayment (owner: ByStr20)
field users: Map ByStr20 String
= Emp ByStr20 String
field used_usernames: Map String Bool
= Emp String Bool
procedure send_message (code: Uint32)
msg = {
_tag: "";
_recipient: _sender;
_amount: zero;
code: code
};
msgs = one_msg msg;
send msgs
end
transition deposit()
sender_is_owner = builtin eq _sender owner;
match sender_is_owner with
| False =>
send_message not_owner_code
| True =>
accept;
send_message accepted_code
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;
match already_exists with
| True =>
send_message user_exists_code
| False =>
users[user_address] := twitter_username;
used_usernames[twitter_username] := true;
e = {_eventname: "register_user";
user: user_address;
username: twitter_username };
event e
end
end