PokerUnicorn
Loading...
Searching...
No Matches
deposit.h
Go to the documentation of this file.
1/*
2 * PokerUnicorn Server
3 * This project uses test network, NO real coin or NO real money involved.
4 * Copyright (C) 2023, Oğuzhan Eroğlu <meowingcate@gmail.com> (https://meowingcat.io)
5 * Licensed under GPLv3 License
6 * See LICENSE for more info
7 */
8
9#pragma once
10
22#include <pthread.h>
23#include <stdbool.h>
24
25#include <libpq-fe.h>
26
27#include "sugar.h"
28#include "string.h"
29#include "ref.h"
30
31#include "../include/account.h"
32
33#define PKRSRV_DEPOSIT_SERVICE_DELAY 10000
34#define PKRSRV_DEPOSIT_MONERO_MIN_CONFIRMATIONS 1
35
36typedef struct pkrsrv_deposit_service pkrsrv_deposit_service_t;
37typedef struct pkrsrv_deposit_monero_address pkrsrv_deposit_monero_address_t;
38typedef struct pkrsrv_deposit_monero_tx pkrsrv_deposit_monero_tx_t;
39typedef struct pkrsrv_deposit_monero_tx_list pkrsrv_deposit_monero_tx_list_t;
40typedef struct pkrsrv_deposit_monero_deposit pkrsrv_deposit_monero_deposit_t;
41typedef struct pkrsrv_deposit_monero_deposit_list pkrsrv_deposit_monero_deposit_list_t;
42
49
60
72
77pkrsrv_deposit_monero_address_t* pkrsrv_deposit_monero_address_new(pkrsrv_string_t* address, int account_index, int index, int payment_id);
82void pkrsrv_deposit_monero_address_free(pkrsrv_deposit_monero_address_t* address);
87pkrsrv_deposit_monero_address_t* pkrsrv_deposit_monero_create_address(int account_index, int index);
88
93pkrsrv_deposit_service_t* pkrsrv_deposit_service_new();
98void pkrsrv_deposit_service_free(pkrsrv_deposit_service_t* service);
103void pkrsrv_deposit_service_start(pkrsrv_deposit_service_t* service);
108void pkrsrv_deposit_service_stop(pkrsrv_deposit_service_t* service);
113void pkrsrv_deposit_service_thread_f(pkrsrv_deposit_service_t* service);
114
121pkrsrv_string_t* pkrsrv_deposit_monero_wallet_rpc_call(char* method, char* params);
122
126bool pkrsrv_deposit_monero_wallet_open(char* wallet_name, char* password);
134bool pkrsrv_deposit_monero_wallet_create(char* wallet_name, char* password);
142bool pkrsrv_deposit_monero_get_balance(uint64_t* balance, uint64_t* unlocked_balance);
146bool pkrsrv_deposit_monero_get_address_balance(char* address, uint64_t* balance, uint64_t* unlocked_balance);
147
154 ITEMIFY(pkrsrv_deposit_monero_tx_t*);
155 pkrsrv_string_t* txid;
156 pkrsrv_string_t* address;
157 uint64_t amount;
158 uint64_t fee;
159 uint64_t unlock_time;
160 uint64_t timestamp;
161 uint64_t height;
163};
164
171 LISTIFY(pkrsrv_deposit_monero_tx_t*);
172};
173
178 pkrsrv_string_t* txid;
179 pkrsrv_string_t* address;
180 uint64_t amount;
181 uint64_t fee;
182 uint64_t unlock_time;
183 uint64_t timestamp;
184 uint64_t height;
186};
187typedef struct pkrsrv_deposit_monero_tx_new_params pkrsrv_deposit_monero_tx_new_params_t;
188
193pkrsrv_deposit_monero_tx_t* pkrsrv_deposit_monero_tx_new(pkrsrv_deposit_monero_tx_new_params_t params);
198void pkrsrv_deposit_monero_tx_free(pkrsrv_deposit_monero_tx_t* tx);
199
204pkrsrv_deposit_monero_tx_list_t* pkrsrv_deposit_monero_tx_list_new();
209void pkrsrv_deposit_monero_tx_list_free(pkrsrv_deposit_monero_tx_list_t* list);
214void pkrsrv_deposit_monero_tx_list_add(pkrsrv_deposit_monero_tx_list_t* list, pkrsrv_deposit_monero_tx_t* tx);
219void pkrsrv_deposit_monero_tx_list_remove(pkrsrv_deposit_monero_tx_list_t* list, pkrsrv_deposit_monero_tx_t* tx);
224pkrsrv_deposit_monero_tx_t* pkrsrv_deposit_monero_tx_list_get_by_txid(pkrsrv_deposit_monero_tx_list_t* list, pkrsrv_string_t* txid);
225
234pkrsrv_deposit_monero_tx_list_t* pkrsrv_deposit_monero_get_txs(int account_index, int address_index, int min_height);
235
242 ITEMIFY(pkrsrv_deposit_monero_deposit_t*);
243 uint64_t id;
244 pkrsrv_account_t* account;
245 pkrsrv_string_t* txid;
246 uint64_t timestamp;
247 uint64_t amount;
248 pkrsrv_string_t* to_address;
250};
251
255typedef struct pkrsrv_deposit_monero_deposit_new_params {
256 uint64_t id;
257 pkrsrv_account_t* account;
258 pkrsrv_string_t* txid;
259 uint64_t timestamp;
260 uint64_t amount;
261 pkrsrv_string_t* to_address;
273void pkrsrv_deposit_monero_deposit_free(pkrsrv_deposit_monero_deposit_t* deposit);
278pkrsrv_deposit_monero_deposit_t* pkrsrv_deposit_monero_deposit_getby_txid(PGconn* pg_conn, pkrsrv_string_t* p_txid);
279
286 LISTIFY(pkrsrv_deposit_monero_deposit_t*);
287};
288
293pkrsrv_deposit_monero_deposit_list_t* pkrsrv_deposit_monero_deposit_list_new();
298void pkrsrv_deposit_monero_deposit_list_free(pkrsrv_deposit_monero_deposit_list_t* list);
303void pkrsrv_deposit_monero_deposit_list_add(pkrsrv_deposit_monero_deposit_list_t* list, pkrsrv_deposit_monero_deposit_t* deposit);
308void pkrsrv_deposit_monero_deposit_list_remove(pkrsrv_deposit_monero_deposit_list_t* list, pkrsrv_deposit_monero_deposit_t* deposit);
309
321typedef struct pkrsrv_deposit_monero_get_deposits_param pkrsrv_deposit_monero_get_deposits_params_t;
322
327pkrsrv_deposit_monero_deposit_list_t* pkrsrv_deposit_monero_get_deposits(PGconn* pg_conn, pkrsrv_deposit_monero_get_deposits_params_t params);
328
340typedef struct pkrsrv_deposit_monero_deposit_create_params pkrsrv_deposit_monero_deposit_create_params_t;
345pkrsrv_deposit_monero_deposit_t* pkrsrv_deposit_monero_deposit_create(PGconn* pg_conn, pkrsrv_deposit_monero_deposit_create_params_t params);
346
351bool pkrsrv_deposit_monero_deposit_update_status(PGconn* pg_conn, pkrsrv_deposit_monero_deposit_t* deposit, pkrsrv_deposit_monero_deposit_status_t status);
352
uint64_t amount
Definition deposit.h:260
pkrsrv_account_t * account
Definition deposit.h:244
PGconn * pg_conn
Definition deposit.h:58
int account_index
Definition deposit.h:68
uint64_t fee
Definition deposit.h:181
pkrsrv_string_t * txid
Definition deposit.h:258
int index
Definition deposit.h:69
uint64_t id
Definition deposit.h:256
int max_height
Definition deposit.h:317
bool is_running
Definition deposit.h:57
uint64_t amount
Definition deposit.h:247
bool is_confirmed
Definition deposit.h:185
uint64_t height
Definition deposit.h:161
uint64_t height
Definition deposit.h:184
pkrsrv_string_t * txid
Definition deposit.h:155
uint64_t timestamp
Definition deposit.h:183
pkrsrv_string_t * txid
Definition deposit.h:178
pkrsrv_string_t * to_address
Definition deposit.h:261
bool is_confirmed
Definition deposit.h:162
pkrsrv_account_t * account
Definition deposit.h:257
uint64_t timestamp
Definition deposit.h:335
pkrsrv_string_t * address
Definition deposit.h:179
pthread_t thread
Definition deposit.h:56
pkrsrv_deposit_monero_deposit_status_t status
Definition deposit.h:338
uint64_t timestamp
Definition deposit.h:160
pkrsrv_string_t * to_address
Definition deposit.h:248
uint64_t timestamp
Definition deposit.h:259
uint64_t amount
Definition deposit.h:336
int min_height
Definition deposit.h:316
int limit
Definition deposit.h:319
int payment_id
Definition deposit.h:70
pkrsrv_string_t * address
Definition deposit.h:67
pkrsrv_deposit_monero_deposit_status_t status
Definition deposit.h:262
pkrsrv_string_t * txid
Definition deposit.h:245
uint64_t unlock_time
Definition deposit.h:182
pkrsrv_account_t * account
Definition deposit.h:333
pkrsrv_string_t * txid
Definition deposit.h:334
uint64_t amount
Definition deposit.h:157
pkrsrv_deposit_monero_deposit_status_t status
Definition deposit.h:315
uint64_t unlock_time
Definition deposit.h:159
uint64_t fee
Definition deposit.h:158
pkrsrv_string_t * address
Definition deposit.h:156
pkrsrv_string_t * to_address
Definition deposit.h:337
uint64_t amount
Definition deposit.h:180
uint64_t timestamp
Definition deposit.h:246
pkrsrv_deposit_monero_deposit_status_t status
Definition deposit.h:249
uint64_t id
Definition deposit.h:243
pkrsrv_account_t * account
Definition deposit.h:314
int offset
Definition deposit.h:318
void pkrsrv_deposit_service_thread_f(pkrsrv_deposit_service_t *service)
Deposit service thread function.
pkrsrv_deposit_monero_deposit_status_t
Definition deposit.h:43
pkrsrv_string_t * pkrsrv_deposit_monero_wallet_rpc_call(char *method, char *params)
Makes a Monero wallet RPC call.
bool pkrsrv_deposit_monero_wallet_open(char *wallet_name, char *password)
Initializes the deposit service.
pkrsrv_deposit_monero_deposit_t * pkrsrv_deposit_monero_deposit_create(PGconn *pg_conn, pkrsrv_deposit_monero_deposit_create_params_t params)
Creates a deposit on the database.
bool pkrsrv_deposit_monero_deposit_update_status(PGconn *pg_conn, pkrsrv_deposit_monero_deposit_t *deposit, pkrsrv_deposit_monero_deposit_status_t status)
Updates the status of a deposit.
void pkrsrv_deposit_monero_address_free(pkrsrv_deposit_monero_address_t *address)
Frees a Monero address object.
pkrsrv_deposit_monero_deposit_t * pkrsrv_deposit_monero_deposit_getby_txid(PGconn *pg_conn, pkrsrv_string_t *p_txid)
Gets a Monero deposit object by its transaction ID.
void pkrsrv_deposit_monero_deposit_free(pkrsrv_deposit_monero_deposit_t *deposit)
Frees a Monero deposit object.
pkrsrv_deposit_monero_tx_list_t * pkrsrv_deposit_monero_get_txs(int account_index, int address_index, int min_height)
Initializes the deposit service.
void pkrsrv_deposit_service_start(pkrsrv_deposit_service_t *service)
Starts the deposit service.
pkrsrv_deposit_monero_deposit_t * pkrsrv_deposit_monero_deposit_new(pkrsrv_deposit_monero_deposit_new_params_t params)
Creates a new Monero deposit object.
void pkrsrv_deposit_service_stop(pkrsrv_deposit_service_t *service)
Stops the deposit service.
void pkrsrv_deposit_monero_deposit_list_remove(pkrsrv_deposit_monero_deposit_list_t *list, pkrsrv_deposit_monero_deposit_t *deposit)
Removes a Monero deposit from the list.
pkrsrv_deposit_monero_address_t * pkrsrv_deposit_monero_address_new(pkrsrv_string_t *address, int account_index, int index, int payment_id)
Creates a new Monero address object.
pkrsrv_deposit_monero_deposit_list_t * pkrsrv_deposit_monero_get_deposits(PGconn *pg_conn, pkrsrv_deposit_monero_get_deposits_params_t params)
Retrieves deposits from the database.
bool pkrsrv_deposit_monero_get_balance(uint64_t *balance, uint64_t *unlocked_balance)
Initializes the deposit service.
pkrsrv_deposit_monero_tx_t * pkrsrv_deposit_monero_tx_list_get_by_txid(pkrsrv_deposit_monero_tx_list_t *list, pkrsrv_string_t *txid)
Gets a Monero transaction from the list by its transaction ID.
uint64_t pkrsrv_deposit_monero_get_height()
Initializes the deposit service.
bool pkrsrv_deposit_monero_get_address_balance(char *address, uint64_t *balance, uint64_t *unlocked_balance)
Initializes the deposit service.
bool pkrsrv_deposit_monero_wallet_create(char *wallet_name, char *password)
Initializes the deposit service.
void pkrsrv_deposit_monero_deposit_list_free(pkrsrv_deposit_monero_deposit_list_t *list)
Frees a Monero deposit list object.
bool pkrsrv_deposit_monero_wallet_close()
Initializes the deposit service.
void pkrsrv_deposit_monero_tx_free(pkrsrv_deposit_monero_tx_t *tx)
Frees a Monero transaction object.
pkrsrv_deposit_monero_deposit_list_t * pkrsrv_deposit_monero_deposit_list_new()
Creates a new Monero deposit list object.
void pkrsrv_deposit_service_free(pkrsrv_deposit_service_t *service)
Frees a deposit service object.
pkrsrv_deposit_monero_address_t * pkrsrv_deposit_monero_create_address(int account_index, int index)
Creates a new Monero address.
pkrsrv_deposit_monero_tx_list_t * pkrsrv_deposit_monero_tx_list_new()
Creates a new Monero transaction list object.
void pkrsrv_deposit_monero_tx_list_free(pkrsrv_deposit_monero_tx_list_t *list)
Frees a Monero transaction list object.
void pkrsrv_deposit_monero_tx_list_add(pkrsrv_deposit_monero_tx_list_t *list, pkrsrv_deposit_monero_tx_t *tx)
Adds a Monero transaction to the list.
void pkrsrv_deposit_monero_deposit_list_add(pkrsrv_deposit_monero_deposit_list_t *list, pkrsrv_deposit_monero_deposit_t *deposit)
Adds a Monero deposit to the list.
pkrsrv_deposit_service_t * pkrsrv_deposit_service_new()
Creates a new deposit service object.
void pkrsrv_deposit_monero_tx_list_remove(pkrsrv_deposit_monero_tx_list_t *list, pkrsrv_deposit_monero_tx_t *tx)
Removes a Monero transaction from the list.
pkrsrv_deposit_monero_tx_t * pkrsrv_deposit_monero_tx_new(pkrsrv_deposit_monero_tx_new_params_t params)
Creates a new Monero transaction object.
pkrsrv_string_t * pkrsrv_deposit_monero_get_main_address()
Initializes the deposit service.
@ PKRSRV_DEPOSIT_MONERO_DEPOSIT_STATUS_PENDING
Definition deposit.h:45
@ PKRSRV_DEPOSIT_MONERO_DEPOSIT_STATUS_NONE
Definition deposit.h:44
@ PKRSRV_DEPOSIT_MONERO_DEPOSIT_STATUS_FAILED
Definition deposit.h:47
@ PKRSRV_DEPOSIT_MONERO_DEPOSIT_STATUS_CONFIRMED
Definition deposit.h:46
Monero address object.
Definition deposit.h:65
Monero deposit object.
Definition deposit.h:240
Monero deposit list object.
Definition deposit.h:284
Initializes the deposit service.
Definition deposit.h:152
Creates a new Monero transaction object.
Definition deposit.h:169
Definition deposit.h:177
Deposit service object.
Definition deposit.h:54
#define PKRSRV_REF_COUNTEDIFY()
Makes a structure reference-counted.
Definition ref.h:70
#define LISTIFY(type)
Definition sugar.h:38
#define ITEMIFY(type)
Definition sugar.h:44