forked from breadwallet/breadwallet-core
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBRGeneric.c
More file actions
206 lines (165 loc) · 5.86 KB
/
Copy pathBRGeneric.c
File metadata and controls
206 lines (165 loc) · 5.86 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
//
// BRGeneric.c
// Core
//
// Created by Ed Gamble on 6/19/19.
// Copyright © 2019 Breadwinner AG. All rights reserved.
//
// See the LICENSE file at the project root for license information.
// See the CONTRIBUTORS file at the project root for a list of contributors.
#include <stdlib.h>
#include <assert.h>
#include <string.h>
#include "BRGeneric.h"
#include "BRGenericHandlers.h"
// This is, admittedly, a little odd.
static BRGenericAccount
gwmAccountCreateInternal (BRGenericHandlers handlers, void *base) {
BRGenericAccountWithType account = calloc (1, sizeof (struct BRGenericAccountWithTypeRecord));
account->handlers = handlers;
account->base = base;
return account;
}
extern BRGenericAccount
gwmAccountCreate (const char *type,
UInt512 seed) {
BRGenericHandlers handlers = genericHandlerLookup(type);
assert (NULL != handlers);
return gwmAccountCreateInternal (handlers, handlers->account.create (type, seed));
}
extern BRGenericAccount
gwmAccountCreateWithPublicKey (const char *type,
BRKey publicKey) {
BRGenericHandlers handlers = genericHandlerLookup(type);
assert (NULL != handlers);
return gwmAccountCreateInternal (handlers, handlers->account.createWithPublicKey (type, publicKey));
}
extern BRGenericAccount
gwmAccountCreateWithSerialization(const char *type,
uint8_t *bytes,
size_t bytesCount) {
BRGenericHandlers handlers = genericHandlerLookup(type);
assert (NULL != handlers);
return gwmAccountCreateInternal (handlers, handlers->account.createWithSerialization (type, bytes, bytesCount));
}
extern void
gwmAccountRelease (BRGenericAccount account) {
BRGenericAccountWithType accountWithType = account;
accountWithType->handlers->account.free (accountWithType->base);
free (accountWithType);
}
extern const char *
gwmAccountGetType (BRGenericAccount account) {
BRGenericAccountWithType accountWithType = account;
return accountWithType->handlers->type;
}
extern int
gwmAccountHasType (BRGenericAccount account,
const char *type) {
BRGenericAccountWithType accountWithType = account;
return 0 == strcmp (type, accountWithType->handlers->type);
}
extern BRGenericAddress
gwmAccountGetAddress (BRGenericAccount account) {
BRGenericAccountWithType accountWithType = account;
return accountWithType->handlers->account.getAddress (accountWithType->base);
}
extern uint8_t *
gwmAccountGetSerialization (BRGenericAccount account, size_t *bytesCount) {
assert (NULL != bytesCount);
BRGenericAccountWithType accountWithType = account;
return accountWithType->handlers->account.getSerialization(accountWithType->base, bytesCount);
}
// MARK: - Address
extern char *
gwmAddressAsString (BRGenericWalletManager gwm,
BRGenericAddress aid) {
return gwmGetHandlers(gwm)->address.asString (aid);
}
extern int
gwmAddressEqual (BRGenericWalletManager gwm,
BRGenericAddress aid1,
BRGenericAddress aid2) {
return gwmGetHandlers(gwm)->address.equal (aid1, aid2);
}
// MARK: - Transfer
extern BRGenericAddress
gwmTransferGetSourceAddress (BRGenericWalletManager gwm,
BRGenericTransfer tid) {
return gwmGetHandlers(gwm)->transfer.sourceAddress (tid);
}
extern BRGenericAddress
gwmTransferGetTargetAddress (BRGenericWalletManager gwm,
BRGenericTransfer tid) {
return gwmGetHandlers(gwm)->transfer.targetAddress (tid);
}
extern UInt256
gwmTransferGetAmount (BRGenericWalletManager gwm,
BRGenericTransfer tid) {
return gwmGetHandlers(gwm)->transfer.amount (tid);
}
// TODO: Direction is needed?
extern UInt256
gwmTransferGetFee (BRGenericWalletManager gwm,
BRGenericTransfer tid) {
return gwmGetHandlers(gwm)->transfer.fee (tid);
}
extern BRGenericFeeBasis
gwmTransferGetFeeBasis (BRGenericWalletManager gwm,
BRGenericTransfer tid) {
return gwmGetHandlers(gwm)->transfer.feeBasis (tid);
}
extern BRGenericHash
gwmTransferGetHash (BRGenericWalletManager gwm,
BRGenericTransfer tid) {
return gwmGetHandlers(gwm)->transfer.hash (tid);
}
// MARK: - Wallet
extern BRGenericWallet
gwmWalletCreate (BRGenericWalletManager gwm) {
return gwmGetHandlers(gwm)->wallet.create (gwmGetAccount(gwm));
}
extern UInt256
gwmWalletGetBalance (BRGenericWalletManager gwm,
BRGenericWallet wallet) {
return gwmGetHandlers(gwm)->wallet.balance (wallet);
}
// TODO: Set Balance? Add transfer/directed-amount?
extern BRGenericAddress
gwmWalletGetAddress (BRGenericWalletManager gwm,
BRGenericWallet wid) {
return NULL;
}
extern BRGenericFeeBasis
gwmWalletGetDefaultFeeBasis (BRGenericWalletManager gwm,
BRGenericWallet wid) {
return NULL;
}
extern void
gwmWalletSetDefaultFeeBasis (BRGenericWalletManager gwm,
BRGenericWallet wid,
BRGenericFeeBasis bid) {
return;
}
extern BRGenericTransfer
gwmWalletCreateTransfer (BRGenericWalletManager gwm,
BRGenericWallet wid,
BRGenericAddress target, // TODO: BRGenericAddress - ownership given
UInt256 amount) {
return NULL;
}
extern UInt256
gwmWalletEstimateTransferFee (BRGenericWalletManager gwm,
BRGenericWallet wid,
UInt256 amount,
BRGenericFeeBasis feeBasis,
int *overflow) {
return UINT256_ZERO;
}
extern void
gwmWalletSubmitTransfer (BRGenericWalletManager gwm,
BRGenericWallet wid,
BRGenericTransfer tid,
UInt512 seed) {
return;
}