forked from gridcoin-community/Gridcoin-Research
-
Notifications
You must be signed in to change notification settings - Fork 0
/
coding.txt
115 lines (81 loc) · 4.25 KB
/
coding.txt
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
Please be consistent with the existing coding style.
Block style:
bool Function(char* psz, int n)
{
// Comment summarising what this section of code does
for (int i = 0; i < n; i++)
{
// When something fails, return early
if (!Something())
return false;
...
}
// Success return is usually at the end
return true;
}
- ANSI/Allman block style
- 4 space indenting, no tabs
- No extra spaces inside parenthesis; please don't do ( this )
- No space after function names, one space after if, for and while
Variable names begin with the type in lowercase, like nSomeVariable.
Please don't put the first word of the variable name in lowercase like
someVariable.
Common types:
n integer number: short, unsigned short, int, unsigned int,
int64_t, uint64_t, sometimes char if used as a number
d double, float
f flag
hash uint256
p pointer or array, one p for each level of indirection
psz pointer to null terminated string
str string object
v vector or similar list objects
map map or multimap
set set or multiset
bn CBigNum
-------------------------
Locking/mutex usage notes
The code is multi-threaded, and uses mutexes and the
CRITICAL_BLOCK/TRY_CRITICAL_BLOCK macros to protect data structures.
Deadlocks due to inconsistent lock ordering (thread 1 locks cs_main
and then cs_wallet, while thread 2 locks them in the opposite order:
result, deadlock as each waits for the other to release its lock) are
a problem. Compile with -DDEBUG_LOCKORDER to get lock order
inconsistencies reported in the debug.log file.
Re-architecting the core code so there are better-defined interfaces
between the various components is a goal, with any necessary locking
done by the components (e.g. see the self-contained CKeyStore class
and its cs_KeyStore lock for example).
-------
Threads
ThreadAppInit2: Initializes Gridcoin. (grc-appinit2)
ThreadFlushWalletDB: Close the wallet.dat file if it hasn't been used (grc-wallet)
in 500ms.
StartNode : Starts other network threads. (grc-start)
ThreadGetMyExternalIP : Determines outside-the-firewall IP address, (grc-ext-ip)
sends addr message to connected peers when
it determines it.
ThreadDNSAddressSeed : Loads addresses of peers from the DNS. (grc-dnsseed)
ThreadMapPort : Universal plug-and-play startup/shutdown. (grc-UPnP)
ThreadSocketHandler : Sends/Receives data from peers on port 8333. (grc-net)
ThreadOpenAddedConnections: Opens network connections to added nodes. (grc-opencon)
ThreadOpenConnections : Initiates new connections to peers. (grc-opencon)
ThreadMessageHandler : Higher-level message handling (sending and receiving). (grc-msghand)
ThreadDumpAddress : Saves peers to peers.dat (grc-adrdump)
ThreadStakeMiner : Generates Gridcoins. (grc-stake-miner)
ThreadScraper : Pulls statistics from project servers.
Mutually exclusive with ScraperSubscriber
ScraperSubscriber : Generates superblocks.
Mutually exclusive with ThreadScraper
ThreadRPCServer : Remote procedure call handler, listens on port 8332
for connections and services them.
ThreadTopUpKeyPool : Replenishes the keystore's keypool. (grc-key-top)
ThreadCleanWalletPassphrase : Re-locks an encrypted wallet after user (grc-lock-wa)
has unlocked it for a period of time.
CScheduler : Schedules tasks.
ipcThread : Scans to check if a URI (gridcoin:) is used. (grc-gui-ipc)
Shutdown : Does an orderly shutdown of everything. (grc-shutoff)
----------------
Snapshot Threads
SnapshotDownloadThread: Downloads the snapshot from gridcoin.us. (grc-snapshotdl)
SnapshotExtractThread : Extracts the downloaded snapshot. (grc-snapshotex)