react-native-nitro-ark 0.0.77-rc.6 → 0.0.77-rc.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -32,6 +32,7 @@ void ThrowJavaException(JNIEnv* env, const char* message) {
|
|
|
32
32
|
jclass exClass = env->FindClass("java/lang/RuntimeException");
|
|
33
33
|
if (exClass != nullptr) {
|
|
34
34
|
env->ThrowNew(exClass, message);
|
|
35
|
+
env->DeleteLocalRef(exClass);
|
|
35
36
|
}
|
|
36
37
|
__android_log_print(ANDROID_LOG_ERROR, LOG_TAG, "Throwing Java exception: %s", message);
|
|
37
38
|
}
|
|
@@ -88,18 +89,30 @@ jobject MakeArrayList(JNIEnv* env, const std::vector<std::string>& elements) {
|
|
|
88
89
|
return nullptr;
|
|
89
90
|
jmethodID arrayListCtor = env->GetMethodID(arrayListClass, "<init>", "()V");
|
|
90
91
|
jmethodID arrayListAdd = env->GetMethodID(arrayListClass, "add", "(Ljava/lang/Object;)Z");
|
|
91
|
-
if (arrayListCtor == nullptr || arrayListAdd == nullptr)
|
|
92
|
+
if (arrayListCtor == nullptr || arrayListAdd == nullptr) {
|
|
93
|
+
env->DeleteLocalRef(arrayListClass);
|
|
92
94
|
return nullptr;
|
|
95
|
+
}
|
|
93
96
|
|
|
94
97
|
jobject arrayListObj = env->NewObject(arrayListClass, arrayListCtor);
|
|
95
|
-
if (arrayListObj == nullptr)
|
|
98
|
+
if (arrayListObj == nullptr) {
|
|
99
|
+
env->DeleteLocalRef(arrayListClass);
|
|
96
100
|
return nullptr;
|
|
101
|
+
}
|
|
97
102
|
|
|
98
103
|
for (const auto& element : elements) {
|
|
99
104
|
jstring jStr = env->NewStringUTF(element.c_str());
|
|
100
|
-
if (jStr
|
|
101
|
-
env->
|
|
102
|
-
env->DeleteLocalRef(
|
|
105
|
+
if (jStr == nullptr) {
|
|
106
|
+
env->DeleteLocalRef(arrayListObj);
|
|
107
|
+
env->DeleteLocalRef(arrayListClass);
|
|
108
|
+
return nullptr;
|
|
109
|
+
}
|
|
110
|
+
env->CallBooleanMethod(arrayListObj, arrayListAdd, jStr);
|
|
111
|
+
env->DeleteLocalRef(jStr);
|
|
112
|
+
if (env->ExceptionCheck()) {
|
|
113
|
+
env->DeleteLocalRef(arrayListObj);
|
|
114
|
+
env->DeleteLocalRef(arrayListClass);
|
|
115
|
+
return nullptr;
|
|
103
116
|
}
|
|
104
117
|
}
|
|
105
118
|
env->DeleteLocalRef(arrayListClass);
|
|
@@ -112,8 +125,10 @@ jobject MakeRoundStatusResult(JNIEnv* env, const bark_cxx::RoundStatus& status)
|
|
|
112
125
|
return nullptr;
|
|
113
126
|
jmethodID ctor =
|
|
114
127
|
env->GetMethodID(cls, "<init>", "(Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;ZZ)V");
|
|
115
|
-
if (ctor == nullptr)
|
|
128
|
+
if (ctor == nullptr) {
|
|
129
|
+
env->DeleteLocalRef(cls);
|
|
116
130
|
return nullptr;
|
|
131
|
+
}
|
|
117
132
|
|
|
118
133
|
std::string statusStr(status.status.data(), status.status.length());
|
|
119
134
|
std::string fundingTxid(status.funding_txid.data(), status.funding_txid.length());
|
|
@@ -128,14 +143,43 @@ jobject MakeRoundStatusResult(JNIEnv* env, const bark_cxx::RoundStatus& status)
|
|
|
128
143
|
jobject txidList = MakeArrayList(env, txids);
|
|
129
144
|
|
|
130
145
|
jstring jStatus = env->NewStringUTF(statusStr.c_str());
|
|
131
|
-
|
|
132
|
-
|
|
146
|
+
if (jStatus == nullptr) {
|
|
147
|
+
if (txidList)
|
|
148
|
+
env->DeleteLocalRef(txidList);
|
|
149
|
+
env->DeleteLocalRef(cls);
|
|
150
|
+
return nullptr;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
jstring jFundingTxid = nullptr;
|
|
154
|
+
if (!fundingTxid.empty()) {
|
|
155
|
+
jFundingTxid = env->NewStringUTF(fundingTxid.c_str());
|
|
156
|
+
if (jFundingTxid == nullptr) {
|
|
157
|
+
env->DeleteLocalRef(jStatus);
|
|
158
|
+
if (txidList)
|
|
159
|
+
env->DeleteLocalRef(txidList);
|
|
160
|
+
env->DeleteLocalRef(cls);
|
|
161
|
+
return nullptr;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
jstring jError = nullptr;
|
|
166
|
+
if (!error.empty()) {
|
|
167
|
+
jError = env->NewStringUTF(error.c_str());
|
|
168
|
+
if (jError == nullptr) {
|
|
169
|
+
env->DeleteLocalRef(jStatus);
|
|
170
|
+
if (jFundingTxid)
|
|
171
|
+
env->DeleteLocalRef(jFundingTxid);
|
|
172
|
+
if (txidList)
|
|
173
|
+
env->DeleteLocalRef(txidList);
|
|
174
|
+
env->DeleteLocalRef(cls);
|
|
175
|
+
return nullptr;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
133
178
|
|
|
134
179
|
jobject result =
|
|
135
180
|
env->NewObject(cls, ctor, jStatus, jFundingTxid, txidList, jError, status.is_final, status.is_success);
|
|
136
181
|
|
|
137
|
-
|
|
138
|
-
env->DeleteLocalRef(jStatus);
|
|
182
|
+
env->DeleteLocalRef(jStatus);
|
|
139
183
|
if (jFundingTxid)
|
|
140
184
|
env->DeleteLocalRef(jFundingTxid);
|
|
141
185
|
if (jError)
|
|
@@ -151,21 +195,31 @@ jobject MakeKeyPairResult(JNIEnv* env, const bark_cxx::KeyPairResult& keypair) {
|
|
|
151
195
|
if (cls == nullptr)
|
|
152
196
|
return nullptr;
|
|
153
197
|
jmethodID ctor = env->GetMethodID(cls, "<init>", "(Ljava/lang/String;Ljava/lang/String;)V");
|
|
154
|
-
if (ctor == nullptr)
|
|
198
|
+
if (ctor == nullptr) {
|
|
199
|
+
env->DeleteLocalRef(cls);
|
|
155
200
|
return nullptr;
|
|
201
|
+
}
|
|
156
202
|
|
|
157
203
|
std::string pub(keypair.public_key.data(), keypair.public_key.length());
|
|
158
204
|
std::string sec(keypair.secret_key.data(), keypair.secret_key.length());
|
|
159
205
|
|
|
160
206
|
jstring jPub = env->NewStringUTF(pub.c_str());
|
|
207
|
+
if (jPub == nullptr) {
|
|
208
|
+
env->DeleteLocalRef(cls);
|
|
209
|
+
return nullptr;
|
|
210
|
+
}
|
|
211
|
+
|
|
161
212
|
jstring jSec = env->NewStringUTF(sec.c_str());
|
|
213
|
+
if (jSec == nullptr) {
|
|
214
|
+
env->DeleteLocalRef(jPub);
|
|
215
|
+
env->DeleteLocalRef(cls);
|
|
216
|
+
return nullptr;
|
|
217
|
+
}
|
|
162
218
|
|
|
163
219
|
jobject result = env->NewObject(cls, ctor, jPub, jSec);
|
|
164
220
|
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
if (jSec)
|
|
168
|
-
env->DeleteLocalRef(jSec);
|
|
221
|
+
env->DeleteLocalRef(jPub);
|
|
222
|
+
env->DeleteLocalRef(jSec);
|
|
169
223
|
env->DeleteLocalRef(cls);
|
|
170
224
|
return result;
|
|
171
225
|
}
|
|
@@ -175,25 +229,41 @@ jobject MakeBolt11Invoice(JNIEnv* env, const bark_cxx::Bolt11Invoice& invoice) {
|
|
|
175
229
|
if (cls == nullptr)
|
|
176
230
|
return nullptr;
|
|
177
231
|
jmethodID ctor = env->GetMethodID(cls, "<init>", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V");
|
|
178
|
-
if (ctor == nullptr)
|
|
232
|
+
if (ctor == nullptr) {
|
|
233
|
+
env->DeleteLocalRef(cls);
|
|
179
234
|
return nullptr;
|
|
235
|
+
}
|
|
180
236
|
|
|
181
237
|
std::string bolt11(invoice.bolt11_invoice.data(), invoice.bolt11_invoice.length());
|
|
182
238
|
std::string paymentSecret(invoice.payment_secret.data(), invoice.payment_secret.length());
|
|
183
239
|
std::string paymentHash(invoice.payment_hash.data(), invoice.payment_hash.length());
|
|
184
240
|
|
|
185
241
|
jstring jBolt11 = env->NewStringUTF(bolt11.c_str());
|
|
242
|
+
if (jBolt11 == nullptr) {
|
|
243
|
+
env->DeleteLocalRef(cls);
|
|
244
|
+
return nullptr;
|
|
245
|
+
}
|
|
246
|
+
|
|
186
247
|
jstring jSecret = env->NewStringUTF(paymentSecret.c_str());
|
|
248
|
+
if (jSecret == nullptr) {
|
|
249
|
+
env->DeleteLocalRef(jBolt11);
|
|
250
|
+
env->DeleteLocalRef(cls);
|
|
251
|
+
return nullptr;
|
|
252
|
+
}
|
|
253
|
+
|
|
187
254
|
jstring jHash = env->NewStringUTF(paymentHash.c_str());
|
|
255
|
+
if (jHash == nullptr) {
|
|
256
|
+
env->DeleteLocalRef(jBolt11);
|
|
257
|
+
env->DeleteLocalRef(jSecret);
|
|
258
|
+
env->DeleteLocalRef(cls);
|
|
259
|
+
return nullptr;
|
|
260
|
+
}
|
|
188
261
|
|
|
189
262
|
jobject result = env->NewObject(cls, ctor, jBolt11, jSecret, jHash);
|
|
190
263
|
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
env->DeleteLocalRef(jSecret);
|
|
195
|
-
if (jHash)
|
|
196
|
-
env->DeleteLocalRef(jHash);
|
|
264
|
+
env->DeleteLocalRef(jBolt11);
|
|
265
|
+
env->DeleteLocalRef(jSecret);
|
|
266
|
+
env->DeleteLocalRef(jHash);
|
|
197
267
|
env->DeleteLocalRef(cls);
|
|
198
268
|
return result;
|
|
199
269
|
}
|
|
@@ -242,7 +312,7 @@ JNIEXPORT void JNICALL Java_com_margelo_nitro_nitroark_NitroArkNative_loadWallet
|
|
|
242
312
|
opts.mnemonic = mnemonic;
|
|
243
313
|
|
|
244
314
|
auto birthday_height = GetOptionalInt(env, jBirthdayHeight);
|
|
245
|
-
|
|
315
|
+
uint32_t birthday_height_val = 0;
|
|
246
316
|
if (birthday_height.has_value()) {
|
|
247
317
|
birthday_height_val = static_cast<uint32_t>(birthday_height.value());
|
|
248
318
|
opts.birthday_height = &birthday_height_val;
|
|
@@ -268,13 +338,13 @@ JNIEXPORT void JNICALL Java_com_margelo_nitro_nitroark_NitroArkNative_loadWallet
|
|
|
268
338
|
|
|
269
339
|
opts.config = config;
|
|
270
340
|
|
|
341
|
+
std::string birthday_height_str = opts.birthday_height != nullptr ? std::to_string(*opts.birthday_height) : "null";
|
|
271
342
|
__android_log_print(ANDROID_LOG_INFO, LOG_TAG,
|
|
272
343
|
"load_wallet(native) datadir=%s regtest=%s signet=%s bitcoin=%s birthday_height=%s ark=%s "
|
|
273
344
|
"esplora=%s bitcoind=%s",
|
|
274
345
|
datadir.c_str(), opts.regtest ? "true" : "false", opts.signet ? "true" : "false",
|
|
275
|
-
opts.bitcoin ? "true" : "false",
|
|
276
|
-
|
|
277
|
-
config.ark.c_str(), config.esplora.c_str(), config.bitcoind.c_str());
|
|
346
|
+
opts.bitcoin ? "true" : "false", birthday_height_str.c_str(), config.ark.c_str(),
|
|
347
|
+
config.esplora.c_str(), config.bitcoind.c_str());
|
|
278
348
|
|
|
279
349
|
bark_cxx::load_wallet(datadir, opts);
|
|
280
350
|
__android_log_print(ANDROID_LOG_INFO, LOG_TAG, "load_wallet(native) success");
|