-
Notifications
You must be signed in to change notification settings - Fork 0
/
Function_call_cycle.c
95 lines (79 loc) · 2.24 KB
/
Function_call_cycle.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include "vntlib.h"
typedef struct
{
uint256 balance;
string nickName;
bool freeAddress;
uint64 winCount;
uint64 loseCount;
uint64 chickenCount;
uint256 winReward;
uint256 loseAmount;
} Account;
KEY mapping(address, Account) accounts;
KEY uint64 totalGameCount;
KEY uint256 deposit;
KEY uint256 fee = U256(10);
KEY address owner;
KEY uint256 freeAmount = U256(100000000000000000000); // 100*10**18;
EVENT EVENT_WITHDRAW(indexed address from, string nickname, uint256 amount);
EVENT EVENT_DEPOSIT(indexed address from, string nickname, uint256 amount);
EVENT EVENT_GETFREEVNT(indexed address from, bool got);
constructor $Dice() {
owner = GetSender();
totalGameCount = 0;
}
// check if the amount is enough
void checkAmount(uint256 amount) {
Require(U256_Cmp(amount, U256(0) == 1), "amount must > 0");
address from = GetSender();
accounts.key = from;
uint256 balance = accounts.value.balance;
PrintAddress("get sender:", from);
PrintUint256T("get balance:", balance);
Require(U256_Cmp(U256SafeSub(balance, amount), 0) != -1,
"No enough money to bet");
GetAmount(amount);
}
// withdraw money
MUTABLE
void Withdraw(uint256 amount) {
checkAmount(amount);
address from = GetSender();
if (TransferFromContract(from, amount) == true) {
accounts.key = from;
accounts.value.balance = U256SafeSub(accounts.value.balance, amount);
deposit = U256SafeSub(deposit, amount);
EVENT_WITHDRAW(from, accounts.value.nickName, amount);
}
}
// withdraw all money
MUTABLE
void WithdrawAll() {
accounts.key = GetSender();
uint256 amount = accounts.value.balance;
Withdraw(amount);
}
// deposit money
MUTABLE
void $Deposit() {
uint256 amount = GetValue();
address from = GetSender();
accounts.key = from;
accounts.value.balance = U256SafeAdd(accounts.value.balance, amount);
deposit = U256SafeAdd(deposit, amount);
EVENT_DEPOSIT(from, accounts.value.balance, amount);
}
// get money from certain address
UNMUTABLE
uint256 GetAmountFromAddress(address addr) {
accounts.key = addr;
return accounts.value.balance;
}
// get money
UNMUTABLE
uint256 GetAmount(uint256 amount) {
checkAmount(amount);
return GetAmountFromAddress(GetSender());
}
$_() { $Deposit(); } // fallback function