Guest User

Untitled

a guest
Dec 16th, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.48 KB | None | 0 0
  1. class user { key pubkey; }
  2.  
  3. class channel {
  4. key name;
  5. admin: user;
  6. }
  7.  
  8. class channel_member { key channel, member: user; }
  9.  
  10. class message {
  11. key channel, timestamp;
  12. index posted_by: user;
  13. text;
  14. }
  15.  
  16. class balance {
  17. key user;
  18. mutable amount: integer;
  19. }
  20.  
  21. operation init (founder_pubkey: pubkey) {
  22. require( (user@*{} limit 1).len() == 0 );
  23. val founder = create user (founder_pubkey);
  24. create balance (founder, 1000000);
  25. }
  26.  
  27. function decrease_balance (user, deduct_amount: integer) {
  28. require( balance@{user}.amount >= deduct_amount);
  29. update balance@{user} (amount -= deduct_amount);
  30. }
  31.  
  32. operation register_user (
  33. existing_user_pubkey: pubkey,
  34. new_user_pubkey: pubkey,
  35. transfer_amount: integer
  36. ) {
  37. require( is_signer(existing_user_pubkey) );
  38. val registration_cost = 100;
  39. val existing_user = user@{existing_user_pubkey};
  40. require( transfer_amount > 0 );
  41. decrease_balance(existing_user, transfer_amount + registration_cost);
  42. val new_user = create user (new_user_pubkey);
  43. create balance (new_user, transfer_amount);
  44. }
  45.  
  46. operation transfer_tokens (from: pubkey, to: pubkey, transfer_amount: integer) {
  47. require( is_signer(from) );
  48. require( transfer_amount > 0 );
  49. val from_user = user@{from};
  50. decrease_balance(from_user, transfer_amount);
  51. update balance@{user@{to}} (amount += transfer_amount );
  52. }
  53.  
  54. operation create_channel ( admin_pubkey: pubkey, name) {
  55. require( is_signer(admin_pubkey) );
  56. val admin = user@{admin_pubkey};
  57. decrease_balance(admin, 100);
  58. val channel = create channel (admin, name);
  59. create channel_member (channel, admin);
  60. }
  61.  
  62. operation add_channel_member (admin_pubkey: pubkey, channel_name: name, member_pubkey: pubkey) {
  63. require( is_signer(admin_pubkey) );
  64. val admin_usr = user@{admin_pubkey};
  65. decrease_balance(admin_usr, 1);
  66. val channel = channel@{channel_name, admin==user@{admin_pubkey}};
  67. create channel_member (channel, member=user@{member_pubkey});
  68. }
  69.  
  70. operation delete_channel_member (admin_pubkey: pubkey, channel_name: name, member_pubkey: pubkey) {
  71. require( is_signer(admin_pubkey) );
  72. delete channel_member@{
  73. channel@{channel_name, admin==user@{admin_pubkey}},
  74. member=user@{member_pubkey}
  75. };
  76. }
  77.  
  78. operation post_message (channel_name: name, pubkey, message: text, nop: byte_array) {
  79. require( is_signer(pubkey) );
  80. val channel = channel@{channel_name};
  81. val member = user@{pubkey};
  82. require( channel_member@?{channel, member} );
  83. decrease_balance(member, 1);
  84. create message (channel, member, text=message, op_context.last_block_time);
  85. }
  86.  
  87. query get_messages_since(channel_name: name, since_timestamp: timestamp, until_timestamp: timestamp) {
  88. return message@*{ channel@{channel_name}, timestamp > since_timestamp }
  89. ( text, poster_pubkey=posted_by.pubkey, -sort timestamp );
  90. }
  91.  
  92. query get_last_messages(channel_name: name) {
  93. val messages = message@*{ channel@{channel_name} }
  94. ( text, poster_pubkey=posted_by.pubkey, -sort timestamp );
  95.  
  96. if(messages.size() != 0) {
  97. return messages;
  98. } else {
  99. return null;
  100. }
  101. }
  102.  
  103. query get_last_message(channel_name: name) {
  104. return message@?{channel@{channel_name} } (text, poster_pubkey=posted_by.pubkey, -sort timestamp) limit 1;
  105. }
  106.  
  107. query get_channel_members(channel_name: name) {
  108. return channel_member@*{channel@{channel_name}} (member.pubkey);
  109. }
  110.  
  111. query get_balance(user_pubkey: text) {
  112. return balance@{user@{byte_array(user_pubkey)}}.amount;
  113. }
  114.  
  115. query get_channels(user_pubkey: text) {
  116. return channel_member@*{member=user@{byte_array(user_pubkey)}}.channel.name;
  117. }
Add Comment
Please, Sign In to add comment