forked from oatot/oatot
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapi.proto
More file actions
319 lines (239 loc) · 7.28 KB
/
api.proto
File metadata and controls
319 lines (239 loc) · 7.28 KB
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
syntax = "proto2";
package oatot;
import "google/protobuf/timestamp.proto";
message SiteAuth {
required string btc_address = 1;
required string session_id = 2;
}
message OaAuth {
required string cl_guid = 1;
}
message SiteLoginStep1Request {
required string btc_address = 1;
}
message SiteLoginStep1Response {
required string challenge = 1;
}
message SiteLoginStep2Request {
required string btc_address = 1;
required string challenge = 2;
required string signed_text = 3;
required string signature = 4;
}
message SiteLoginStep2Response {
required string session_id = 2;
}
message SiteLogoutRequest {
required SiteAuth site_auth = 1;
}
message SiteLogoutResponse {
}
message OaLoginStep1Request {
required string cl_guid = 1;
}
message OaLoginStep1Response {
required string token = 1;
}
message SiteOaLoginStep2Request {
required SiteAuth site_auth = 1;
required string token = 2;
}
message SiteOaLoginStep2Response {
}
message SiteMyClGuidsRequest {
required SiteAuth site_auth = 1;
}
message SiteMyClGuidsResponse {
message ClGuid {
required string cl_guid = 1;
required google.protobuf.Timestamp added_time = 2;
required google.protobuf.Timestamp last_used_time = 3;
}
repeated ClGuid cl_guids = 1;
}
message SiteRemoveClGuidRequest {
required SiteAuth site_auth = 1;
required string cl_guid = 2;
}
message SiteRemoveClGuidResponse {
}
message SiteDepositBtcRequest {
required SiteAuth site_auth = 1;
}
message SiteDepositBtcResponse {
required string btc_address = 1;
}
message SiteWithdrawBtcRequest {
required SiteAuth site_auth = 1;
required string btc_address = 2;
required fixed64 satoshis = 3;
}
message SiteWithdrawBtcResponse {
required string tx = 1;
}
message OaDiscardBetRequest {
required OaAuth oa_auth = 1;
// Unique bet ID.
required fixed64 bet_id = 2;
}
message OaDiscardBetResponse {
}
message OaTransferMoneyRequest {
// TODO: make server-wide, one RPC for all players.
required OaAuth oa_auth = 1;
// Prize.
required fixed64 amount = 2;
required string currency = 3;
}
message OaTransferMoneyResponse {
}
message BetSum {
required fixed64 amount = 1;
required string currency = 2;
required string horse = 3;
}
message OaActiveBetsSumsRequest {
}
message OaActiveBetsSumsResponse {
repeated BetSum bet_sums = 1;
}
enum GameStage {
FORMING_TEAMS = 0;
MAKING_BETS = 1;
PLAYING = 2;
}
message OaChangeGameStageRequest {
required GameStage new_stage = 1;
}
message OaChangeGameStageResponse {
}
message OaIsNewRequest {
required OaAuth oa_auth = 1;
}
message OaIsNewResponse {
required bool result = 1;
}
message OaRegisterRequest {
required OaAuth oa_auth = 1;
}
message OaRegisterResponse {
}
message Balance {
required fixed64 free_money = 1;
required fixed64 money_on_bets = 2;
required string currency = 3;
}
message OaMyBalanceRequest {
required OaAuth oa_auth = 1;
}
message OaMyBalanceResponse {
repeated Balance balances = 1;
}
message Bet {
// Filled by the user who makes the bet.
required string horse = 1;
required string currency = 2;
required fixed64 amount = 3;
// Filled by the system.
optional google.protobuf.Timestamp open_time = 4;
optional google.protobuf.Timestamp close_time = 5;
optional string winner = 6;
optional fixed64 prize = 7;
// Unique bet ID.
optional fixed64 bet_id = 8;
}
message OaMyBetRequest {
required OaAuth oa_auth = 1;
required Bet bet = 2;
}
message OaMyBetResponse {
}
message OaCloseBetsRequest {
required string winner = 1;
}
message OaCloseBetsResponse {
}
message OaCloseBetsByIncidentRequest {
}
message OaCloseBetsByIncidentResponse {
}
message OaMyActiveBetsRequest {
required OaAuth oa_auth = 1;
}
message OaMyActiveBetsResponse {
repeated Bet bets = 1;
}
message OaMyPastBetsRequest {
required OaAuth oa_auth = 1;
// 15 bets per page.
// If page string is empty (""), return last 15 bets.
required string page = 2;
}
message OaMyPastBetsResponse {
repeated Bet bets = 1;
required string next_page = 2; // If empty, stop.
}
message CurrencySummary {
required fixed64 total_bet = 1;
required fixed64 total_prize = 2;
required fixed64 total_lost = 3;
required fixed64 bets_won = 4;
required fixed64 bets_lost = 5;
required string currency = 6;
}
message OaMyBetsSummaryRequest {
required OaAuth oa_auth = 1;
}
message OaMyBetsSummaryResponse {
repeated CurrencySummary currency_summaries = 1;
}
service Oatot {
rpc SiteLoginStep1(SiteLoginStep1Request) returns (SiteLoginStep1Response);
rpc SiteLoginStep2(SiteLoginStep2Request) returns (SiteLoginStep2Response);
rpc SiteLogout(SiteLogoutRequest) returns (SiteLogoutResponse);
// Isn't currently used, for BTC only.
rpc OaLoginStep1(OaLoginStep1Request) returns (OaLoginStep1Response);
rpc SiteOaLoginStep2(SiteOaLoginStep2Request) returns (SiteOaLoginStep2Response);
rpc SiteMyClGuids(SiteMyClGuidsRequest) returns (SiteMyClGuidsResponse);
rpc SiteRemoveClGuid(SiteRemoveClGuidRequest) returns (SiteRemoveClGuidResponse);
rpc SiteDepositBtc(SiteDepositBtcRequest) returns (SiteDepositBtcResponse);
rpc SiteWithdrawBtc(SiteWithdrawBtcRequest) returns (SiteWithdrawBtcResponse);
//////////////////
// Server-wide. //
//////////////////
// Change game stage (FORMING_TEAMS, MAKING_BETS, PLAYING).
rpc OaChangeGameStage(OaChangeGameStageRequest) returns (OaChangeGameStageResponse);
// For all the players, after the match is finished in an appropriate way.
// We know the winner.
rpc OaCloseBets(OaCloseBetsRequest) returns (OaCloseBetsResponse);
// For all the players, in case match is finished by incident (e.g. someone disconnects).
// We have to return all the money back.
rpc OaCloseBetsByIncident(OaCloseBetsByIncidentRequest) returns (OaCloseBetsByIncidentResponse);
//////////////////////////////
// Initiated by the server. //
//////////////////////////////
// Check if this player hasn't appeared before.
rpc OaIsNew(OaIsNewRequest) returns (OaIsNewResponse);
// Register player in the database, sponsor them with the amount of money specified
// by backend option.
rpc OaRegister(OaRegisterRequest) returns (OaRegisterResponse);
// Transfer 'prize' money calculated by player score after the end of match.
rpc OaTransferMoney(OaTransferMoneyRequest) returns (OaTransferMoneyResponse);
// Active bets sums by horse.
rpc OaActiveBetsSums(OaActiveBetsSumsRequest) returns (OaActiveBetsSumsResponse);
//////////////////////////////
// Initiated by the client. //
//////////////////////////////
rpc OaMyBalance(OaMyBalanceRequest) returns (OaMyBalanceResponse);
rpc OaMyBet(OaMyBetRequest) returns (OaMyBetResponse);
// Discard a bet. This MUST only be possible during MAKING_BETS game stage.
// Completely remove it and disregard in OaActiveBetsSums, OaMyActiveBets,
// OaMyPastBets, ...
rpc OaDiscardBet(OaDiscardBetRequest) returns (OaDiscardBetResponse);
// Active bets for this match. Output array MUST BE sorted by open time increase.
// (first opened bet ALWAYS 0, second - 1... etc).
rpc OaMyActiveBets(OaMyActiveBetsRequest) returns (OaMyActiveBetsResponse);
// Past bets (15 per page), DO NOT include active bets here.
rpc OaMyPastBets(OaMyPastBetsRequest) returns (OaMyPastBetsResponse);
rpc OaMyBetsSummary(OaMyBetsSummaryRequest) returns (OaMyBetsSummaryResponse);
}