react-native-zcash 0.0.2 → 0.2.1

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.
package/lib/rnzcash.rn.js CHANGED
@@ -40,6 +40,18 @@ function _asyncToGenerator(fn) {
40
40
  };
41
41
  }
42
42
 
43
+ var SynchronizerStatus;
44
+
45
+ (function (SynchronizerStatus) {
46
+ SynchronizerStatus[SynchronizerStatus["STOPPED"] = 0] = "STOPPED";
47
+ SynchronizerStatus[SynchronizerStatus["DISCONNECTED"] = 1] = "DISCONNECTED";
48
+ SynchronizerStatus[SynchronizerStatus["DOWNLOADING"] = 2] = "DOWNLOADING";
49
+ SynchronizerStatus[SynchronizerStatus["VALIDATING"] = 3] = "VALIDATING";
50
+ SynchronizerStatus[SynchronizerStatus["SCANNING"] = 4] = "SCANNING";
51
+ SynchronizerStatus[SynchronizerStatus["ENHANCING"] = 5] = "ENHANCING";
52
+ SynchronizerStatus[SynchronizerStatus["SYNCED"] = 6] = "SYNCED";
53
+ })(SynchronizerStatus || (SynchronizerStatus = {}));
54
+
43
55
  var RNZcash = reactNative.NativeModules.RNZcash;
44
56
 
45
57
  var snooze = function snooze(ms) {
@@ -48,94 +60,243 @@ var snooze = function snooze(ms) {
48
60
  });
49
61
  };
50
62
 
51
- // export function subscribeToFoo(callback: Callback): void {
52
- // const eventEmitter = new NativeEventEmitter(RNZcash)
53
- // eventEmitter.addListener('FooEvent', callback)
54
- // }
55
63
  var KeyTool = {
56
- deriveViewKey: function () {
57
- var _deriveViewKey = _asyncToGenerator(function* (seedBytesHex) {
58
- var result = yield RNZcash.deriveViewKey(seedBytesHex);
64
+ deriveViewingKey: function () {
65
+ var _deriveViewingKey = _asyncToGenerator(function* (seedBytesHex, network) {
66
+ var result = yield RNZcash.deriveViewingKey(seedBytesHex, network);
59
67
  return result;
60
68
  });
61
69
 
62
- function deriveViewKey(_x) {
63
- return _deriveViewKey.apply(this, arguments);
64
- }
65
-
66
- return deriveViewKey;
67
- }() // deriveSpendingKey: async (seedBytesHex: string): Promise<string> => {return ''}
68
-
69
- }; // const makeAddressTool = () => {
70
- // return {
71
- // deriveShieldedAddress: async (viewingKey: string): Promise<string> => {return ''},
72
- // deriveTransparentAddress: async (viewingKey: string): Promise<string> => {return ''},
73
- // isValidShieldedAddress: async (address: string): Promise<boolean> => {return true},
74
- // isValidTransparentAddress: async (address: string): Promise<boolean> => {return true}
75
- // }
76
- // }
77
- //
78
- // interface WalletBalance {
79
- // shieldedAvailable: string
80
- // shieldedTotal: string
81
- // transparentAvailable: string
82
- // transparentTotal: string
83
- // }
84
- // interface InitializerCallbacks {
85
- // onError: (e: Error): void
86
- // onTransactionsChanged: (): void
87
- // onBalanceChanged: (walletBalance: WalletBalance): void
88
- // }
89
- // interface SpendInfo {
90
- // zatoshi: string
91
- // toAddress: string
92
- // memo: string
93
- // fromAccountIndex: number
94
- // spendingKey?: string
95
- // }
96
- // interface ZcashTransaction {
97
- // txId: string
98
- // fee: string
99
- // value: string
100
- // direction: 'inbound' | 'outbound'
101
- // toAddress: string
102
- // memo?: string
103
- // minedHeight: number // 0 for unconfirmed
104
- // blockTime: number // UNIX timestamp
105
- // }
106
- // type PendingTransaction = ZcashTransaction & {
107
- // accountIndex: number
108
- // expiryHeight: number
109
- // cancelled: number
110
- // submitAttemps: number
111
- // errorMessage?: string
112
- // errorCode?: number
113
- // createTime: number
114
- // }
115
- // interface TransactionQuery {
116
- // offset?: number
117
- // limit?: number
118
- // startDate?: number
119
- // endDate?: number
120
- // }
70
+ function deriveViewingKey(_x, _x2) {
71
+ return _deriveViewingKey.apply(this, arguments);
72
+ }
73
+
74
+ return deriveViewingKey;
75
+ }(),
76
+ deriveSpendingKey: function () {
77
+ var _deriveSpendingKey = _asyncToGenerator(function* (seedBytesHex, network) {
78
+ var result = yield RNZcash.deriveSpendingKey(seedBytesHex, network);
79
+ return result;
80
+ });
81
+
82
+ function deriveSpendingKey(_x3, _x4) {
83
+ return _deriveSpendingKey.apply(this, arguments);
84
+ }
85
+
86
+ return deriveSpendingKey;
87
+ }()
88
+ };
89
+ var AddressTool = {
90
+ deriveShieldedAddress: function () {
91
+ var _deriveShieldedAddress = _asyncToGenerator(function* (viewingKey, network) {
92
+ var result = yield RNZcash.deriveShieldedAddress(viewingKey, network);
93
+ return result;
94
+ });
95
+
96
+ function deriveShieldedAddress(_x5, _x6) {
97
+ return _deriveShieldedAddress.apply(this, arguments);
98
+ }
99
+
100
+ return deriveShieldedAddress;
101
+ }(),
102
+ isValidShieldedAddress: function () {
103
+ var _isValidShieldedAddress = _asyncToGenerator(function* (address, network) {
104
+ if (network === void 0) {
105
+ network = 'mainnet';
106
+ }
107
+
108
+ var result = yield RNZcash.isValidShieldedAddress(address, network);
109
+ return result;
110
+ });
111
+
112
+ function isValidShieldedAddress(_x7, _x8) {
113
+ return _isValidShieldedAddress.apply(this, arguments);
114
+ }
115
+
116
+ return isValidShieldedAddress;
117
+ }(),
118
+ isValidTransparentAddress: function () {
119
+ var _isValidTransparentAddress = _asyncToGenerator(function* (address, network) {
120
+ if (network === void 0) {
121
+ network = 'mainnet';
122
+ }
123
+
124
+ var result = yield RNZcash.isValidTransparentAddress(address, network);
125
+ return result;
126
+ });
127
+
128
+ function isValidTransparentAddress(_x9, _x10) {
129
+ return _isValidTransparentAddress.apply(this, arguments);
130
+ }
131
+
132
+ return isValidTransparentAddress;
133
+ }()
134
+ };
121
135
 
122
136
  var Synchronizer = /*#__PURE__*/function () {
123
- function Synchronizer(initializerConfig) {
124
- console.log(initializerConfig);
125
- } // static init (initializerConfig: InitializerConfig): void
126
- // setCallbackHandlers (callbacks: InitializerCallbacks): void
127
- // getLatestHeight (): number
128
- // getProgress (): number // 0-1
129
- // getStatus (): ??
137
+ function Synchronizer(alias, network) {
138
+ this.eventEmitter = new reactNative.NativeEventEmitter(RNZcash);
139
+ this.subscriptions = [];
140
+ this.alias = alias;
141
+ this.network = network;
142
+ } /// ////////////////////////////////////////////////////////////////
143
+ // Start PoC behavior
144
+ // Here are a few functions to demonstrate functionality but the final library should not have these functions
145
+ //
130
146
 
131
147
 
132
148
  var _proto = Synchronizer.prototype;
133
149
 
134
- _proto.getShieldedBalance =
150
+ _proto.readyToSend =
135
151
  /*#__PURE__*/
136
152
  function () {
153
+ var _readyToSend = _asyncToGenerator(function* () {
154
+ var result = yield RNZcash.readyToSend();
155
+ return result;
156
+ });
157
+
158
+ function readyToSend() {
159
+ return _readyToSend.apply(this, arguments);
160
+ }
161
+
162
+ return readyToSend;
163
+ }();
164
+
165
+ _proto.sendTestTransaction = /*#__PURE__*/function () {
166
+ var _sendTestTransaction = _asyncToGenerator(function* (key, address) {
167
+ // send an amount that's guaranteed to be too large for our wallet and expect it to fail but at least show how this is done
168
+ // simply change these two values to send a real transaction but ensure the function isn't called too often (although funds can't be spent if notes are unconfirmed)
169
+ var invalidValue = '9223372036854775807'; // Max long value (change this to 10000 to send a small transaction equal to the miner's fee on every reload and you could send 10,000 of those before it equals 1 ZEC)
170
+
171
+ var invalidAccount = 99; // should be 0
172
+
173
+ return this.sendToAddress({
174
+ zatoshi: invalidValue,
175
+ toAddress: address,
176
+ memo: 'this is a test transaction that will fail',
177
+ fromAccountIndex: invalidAccount,
178
+ spendingKey: key
179
+ });
180
+ });
181
+
182
+ function sendTestTransaction(_x11, _x12) {
183
+ return _sendTestTransaction.apply(this, arguments);
184
+ }
185
+
186
+ return sendTestTransaction;
187
+ }();
188
+
189
+ _proto.getBlockCount = /*#__PURE__*/function () {
190
+ var _getBlockCount = _asyncToGenerator(function* () {
191
+ var result = yield RNZcash.getBlockCount();
192
+ return result;
193
+ });
194
+
195
+ function getBlockCount() {
196
+ return _getBlockCount.apply(this, arguments);
197
+ }
198
+
199
+ return getBlockCount;
200
+ }() // End PoC behavior
201
+ /// ////////////////////////////////////////////////////////////////
202
+ ;
203
+
204
+ _proto.start =
205
+ /*#__PURE__*/
206
+ function () {
207
+ var _start = _asyncToGenerator(function* () {
208
+ var result = yield RNZcash.start(this.alias);
209
+ return result;
210
+ });
211
+
212
+ function start() {
213
+ return _start.apply(this, arguments);
214
+ }
215
+
216
+ return start;
217
+ }();
218
+
219
+ _proto.stop = /*#__PURE__*/function () {
220
+ var _stop = _asyncToGenerator(function* () {
221
+ this.unsubscribe();
222
+ var result = yield RNZcash.stop(this.alias);
223
+ return result;
224
+ });
225
+
226
+ function stop() {
227
+ return _stop.apply(this, arguments);
228
+ }
229
+
230
+ return stop;
231
+ }();
232
+
233
+ _proto.initialize = /*#__PURE__*/function () {
234
+ var _initialize = _asyncToGenerator(function* (initializerConfig) {
235
+ yield RNZcash.initialize(initializerConfig.fullViewingKey.extfvk, initializerConfig.fullViewingKey.extpub, initializerConfig.birthdayHeight, initializerConfig.alias, initializerConfig.networkName, initializerConfig.defaultHost, initializerConfig.defaultPort);
236
+ });
237
+
238
+ function initialize(_x13) {
239
+ return _initialize.apply(this, arguments);
240
+ }
241
+
242
+ return initialize;
243
+ }();
244
+
245
+ _proto.getLatestNetworkHeight = /*#__PURE__*/function () {
246
+ var _getLatestNetworkHeight = _asyncToGenerator(function* (alias) {
247
+ var result = yield RNZcash.getLatestNetworkHeight(alias);
248
+ return result;
249
+ });
250
+
251
+ function getLatestNetworkHeight(_x14) {
252
+ return _getLatestNetworkHeight.apply(this, arguments);
253
+ }
254
+
255
+ return getLatestNetworkHeight;
256
+ }();
257
+
258
+ _proto.getLatestScannedHeight = /*#__PURE__*/function () {
259
+ var _getLatestScannedHeight = _asyncToGenerator(function* () {
260
+ var result = yield RNZcash.getLatestScannedHeight();
261
+ return result;
262
+ });
263
+
264
+ function getLatestScannedHeight() {
265
+ return _getLatestScannedHeight.apply(this, arguments);
266
+ }
267
+
268
+ return getLatestScannedHeight;
269
+ }();
270
+
271
+ _proto.getProgress = /*#__PURE__*/function () {
272
+ var _getProgress = _asyncToGenerator(function* () {
273
+ var result = yield RNZcash.getProgress();
274
+ return result;
275
+ });
276
+
277
+ function getProgress() {
278
+ return _getProgress.apply(this, arguments);
279
+ }
280
+
281
+ return getProgress;
282
+ }();
283
+
284
+ _proto.getStatus = /*#__PURE__*/function () {
285
+ var _getStatus = _asyncToGenerator(function* () {
286
+ var result = yield RNZcash.getStatus();
287
+ return SynchronizerStatus[result.name];
288
+ });
289
+
290
+ function getStatus() {
291
+ return _getStatus.apply(this, arguments);
292
+ }
293
+
294
+ return getStatus;
295
+ }();
296
+
297
+ _proto.getShieldedBalance = /*#__PURE__*/function () {
137
298
  var _getShieldedBalance = _asyncToGenerator(function* () {
138
- var result = yield RNZcash.getShieldedBalance();
299
+ var result = yield RNZcash.getShieldedBalance(this.alias);
139
300
  return result;
140
301
  });
141
302
 
@@ -148,11 +309,12 @@ var Synchronizer = /*#__PURE__*/function () {
148
309
 
149
310
  _proto.getTransparentBalance = /*#__PURE__*/function () {
150
311
  var _getTransparentBalance = _asyncToGenerator(function* () {
312
+ // TODO: integrate with lightwalletd service to provide taddr balance. Edge probably doesn't need this, though so it can wait.
151
313
  yield snooze(0); // Hack to make typescript happy
152
314
 
153
315
  return {
154
- availableBalance: '0',
155
- totalBalance: '0'
316
+ availableZatoshi: '0',
317
+ totalZatoshi: '0'
156
318
  };
157
319
  });
158
320
 
@@ -161,29 +323,87 @@ var Synchronizer = /*#__PURE__*/function () {
161
323
  }
162
324
 
163
325
  return getTransparentBalance;
326
+ }();
327
+
328
+ _proto.getTransactions = /*#__PURE__*/function () {
329
+ var _getTransactions = _asyncToGenerator(function* (range) {
330
+ var result = yield RNZcash.getTransactions(this.alias, range.first, range.last);
331
+ return result;
332
+ });
333
+
334
+ function getTransactions(_x15) {
335
+ return _getTransactions.apply(this, arguments);
336
+ }
337
+
338
+ return getTransactions;
339
+ }();
340
+
341
+ _proto.rescan = function rescan(height) {
342
+ RNZcash.rescan(this.alias, height);
343
+ };
344
+
345
+ _proto.sendToAddress = /*#__PURE__*/function () {
346
+ var _sendToAddress = _asyncToGenerator(function* (spendInfo) {
347
+ var result = yield RNZcash.spendToAddress(this.alias, spendInfo.zatoshi, spendInfo.toAddress, spendInfo.memo, spendInfo.fromAccountIndex, // TODO: ask is it okay to send this across the boundary or should it live on the native side and never leave?
348
+ spendInfo.spendingKey);
349
+ return result;
350
+ });
351
+
352
+ function sendToAddress(_x16) {
353
+ return _sendToAddress.apply(this, arguments);
354
+ }
355
+
356
+ return sendToAddress;
164
357
  }() // estimateFee (spendInfo: SpendInfo): string
165
358
  // sendToAddress (spendInfo: SpendInfo): void
166
- // start (): void
167
- // stop (): void
168
359
  // getPendingTransactions (): PendingTransactions[]
169
360
  // getConfirmedTransactions (query: TransactionQuery): ZcashTransaction[]
361
+ // Events
170
362
  ;
171
363
 
364
+ _proto.subscribe = function subscribe(_ref) {
365
+ var onStatusChanged = _ref.onStatusChanged,
366
+ onUpdate = _ref.onUpdate;
367
+ this.setListener('StatusEvent', onStatusChanged);
368
+ this.setListener('UpdateEvent', onUpdate);
369
+ };
370
+
371
+ _proto.setListener = function setListener(eventName, callback) {
372
+ var _this = this;
373
+
374
+ if (callback === void 0) {
375
+ callback = function callback(t) {
376
+ return null;
377
+ };
378
+ }
379
+
380
+ this.subscriptions.push(this.eventEmitter.addListener(eventName, function (arg) {
381
+ return arg.alias === _this.alias ? callback(arg) : null;
382
+ }));
383
+ };
384
+
385
+ _proto.unsubscribe = function unsubscribe() {
386
+ this.subscriptions.forEach(function (subscription) {
387
+ subscription.remove();
388
+ });
389
+ };
390
+
172
391
  return Synchronizer;
173
392
  }();
174
393
 
175
394
  var makeSynchronizer = /*#__PURE__*/function () {
176
- var _ref = _asyncToGenerator(function* (initializerConfig) {
177
- yield snooze(0); // Hack to make typescript happy
178
-
179
- return new Synchronizer(initializerConfig);
395
+ var _ref2 = _asyncToGenerator(function* (initializerConfig) {
396
+ var synchronizer = new Synchronizer(initializerConfig.alias, initializerConfig.networkName);
397
+ yield synchronizer.initialize(initializerConfig);
398
+ return synchronizer;
180
399
  });
181
400
 
182
- return function makeSynchronizer(_x2) {
183
- return _ref.apply(this, arguments);
401
+ return function makeSynchronizer(_x17) {
402
+ return _ref2.apply(this, arguments);
184
403
  };
185
404
  }();
186
405
 
406
+ exports.AddressTool = AddressTool;
187
407
  exports.KeyTool = KeyTool;
188
408
  exports.makeSynchronizer = makeSynchronizer;
189
409
  //# sourceMappingURL=rnzcash.rn.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rnzcash.rn.js","sources":["../src/react-native.ts"],"sourcesContent":["import { NativeModules } from 'react-native'\n\nimport { InitializerConfig, WalletBalance } from './types'\n\nconst { RNZcash } = NativeModules\n\nconst snooze: Function = (ms: number) =>\n new Promise((resolve: Function) => setTimeout(resolve, ms))\n\ntype Callback = (...args: any[]) => any\n\n// export function subscribeToFoo(callback: Callback): void {\n// const eventEmitter = new NativeEventEmitter(RNZcash)\n// eventEmitter.addListener('FooEvent', callback)\n// }\n\nexport const KeyTool = {\n deriveViewKey: async (seedBytesHex: string): Promise<string> => {\n const result = await RNZcash.deriveViewKey(seedBytesHex)\n return result\n }\n // deriveSpendingKey: async (seedBytesHex: string): Promise<string> => {return ''}\n}\n// const makeAddressTool = () => {\n// return {\n// deriveShieldedAddress: async (viewingKey: string): Promise<string> => {return ''},\n// deriveTransparentAddress: async (viewingKey: string): Promise<string> => {return ''},\n// isValidShieldedAddress: async (address: string): Promise<boolean> => {return true},\n// isValidTransparentAddress: async (address: string): Promise<boolean> => {return true}\n// }\n// }\n//\n// interface WalletBalance {\n// shieldedAvailable: string\n// shieldedTotal: string\n// transparentAvailable: string\n// transparentTotal: string\n// }\n// interface InitializerCallbacks {\n// onError: (e: Error): void\n// onTransactionsChanged: (): void\n// onBalanceChanged: (walletBalance: WalletBalance): void\n// }\n// interface SpendInfo {\n// zatoshi: string\n// toAddress: string\n// memo: string\n// fromAccountIndex: number\n// spendingKey?: string\n// }\n\n// interface ZcashTransaction {\n// txId: string\n// fee: string\n// value: string\n// direction: 'inbound' | 'outbound'\n// toAddress: string\n// memo?: string\n// minedHeight: number // 0 for unconfirmed\n// blockTime: number // UNIX timestamp\n// }\n// type PendingTransaction = ZcashTransaction & {\n// accountIndex: number\n// expiryHeight: number\n// cancelled: number\n// submitAttemps: number\n// errorMessage?: string\n// errorCode?: number\n// createTime: number\n// }\n\n// interface TransactionQuery {\n// offset?: number\n// limit?: number\n// startDate?: number\n// endDate?: number\n// }\nclass Synchronizer {\n constructor(initializerConfig: InitializerConfig) {\n console.log(initializerConfig)\n }\n\n // static init (initializerConfig: InitializerConfig): void\n // setCallbackHandlers (callbacks: InitializerCallbacks): void\n // getLatestHeight (): number\n // getProgress (): number // 0-1\n // getStatus (): ??\n async getShieldedBalance(): Promise<WalletBalance> {\n const result = await RNZcash.getShieldedBalance()\n return result\n }\n\n async getTransparentBalance(): Promise<WalletBalance> {\n await snooze(0) // Hack to make typescript happy\n return {\n availableBalance: '0',\n totalBalance: '0'\n }\n }\n // estimateFee (spendInfo: SpendInfo): string\n // sendToAddress (spendInfo: SpendInfo): void\n // start (): void\n // stop (): void\n // getPendingTransactions (): PendingTransactions[]\n // getConfirmedTransactions (query: TransactionQuery): ZcashTransaction[]\n}\n\nexport const makeSynchronizer = async (\n initializerConfig: InitializerConfig\n): Promise<Synchronizer> => {\n await snooze(0) // Hack to make typescript happy\n return new Synchronizer(initializerConfig)\n}\n"],"names":["RNZcash","NativeModules","snooze","ms","Promise","resolve","setTimeout","KeyTool","deriveViewKey","seedBytesHex","result","Synchronizer","initializerConfig","console","log","getShieldedBalance","getTransparentBalance","availableBalance","totalBalance","makeSynchronizer"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAIQA,UAAYC,0BAAZD;;AAER,IAAME,MAAgB,GAAG,SAAnBA,MAAmB,CAACC,EAAD;AAAA,SACvB,IAAIC,OAAJ,CAAY,UAACC,OAAD;AAAA,WAAuBC,UAAU,CAACD,OAAD,EAAUF,EAAV,CAAjC;AAAA,GAAZ,CADuB;AAAA,CAAzB;;AAKA;AACA;AACA;AACA;IAEaI,OAAO,GAAG;AACrBC,EAAAA,aAAa;AAAA,2CAAE,WAAOC,YAAP,EAAiD;AAC9D,UAAMC,MAAM,SAASV,OAAO,CAACQ,aAAR,CAAsBC,YAAtB,CAArB;AACA,aAAOC,MAAP;AACD,KAHY;;AAAA;AAAA;AAAA;;AAAA;AAAA,KADQ;;AAAA;AAQvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;IACMC;AACJ,wBAAYC,iBAAZ,EAAkD;AAChDC,IAAAA,OAAO,CAACC,GAAR,CAAYF,iBAAZ;AACD;AAGD;AACA;AACA;AACA;;;;;SACMG;;;gDAAN,aAAmD;AACjD,UAAML,MAAM,SAASV,OAAO,CAACe,kBAAR,EAArB;AACA,aAAOL,MAAP;AACD;;;;;;;;;SAEKM;mDAAN,aAAsD;AACpD,YAAMd,MAAM,CAAC,CAAD,CAAZ,CADoD;;AAEpD,aAAO;AACLe,QAAAA,gBAAgB,EAAE,GADb;AAELC,QAAAA,YAAY,EAAE;AAFT,OAAP;AAID;;;;;;;;AAED;AACA;AACA;AACA;AACA;;;;;;IAGWC,gBAAgB;AAAA,+BAAG,WAC9BP,iBAD8B,EAEJ;AAC1B,UAAMV,MAAM,CAAC,CAAD,CAAZ,CAD0B;;AAE1B,WAAO,IAAIS,YAAJ,CAAiBC,iBAAjB,CAAP;AACD,GAL4B;;AAAA,kBAAhBO,gBAAgB;AAAA;AAAA;AAAA;;;;;"}
1
+ {"version":3,"file":"rnzcash.rn.js","sources":["../src/types.ts","../src/react-native.ts"],"sourcesContent":["export type Network = 'mainnet' | 'testnet'\n\nexport interface WalletBalance {\n availableZatoshi: string\n totalZatoshi: string\n}\n\nexport interface InitializerConfig {\n networkName: Network\n defaultHost: string\n defaultPort: number\n fullViewingKey: UnifiedViewingKey\n alias: string\n birthdayHeight: number\n}\n\nexport interface SpendInfo {\n zatoshi: string\n toAddress: string\n memo: string\n fromAccountIndex: number\n spendingKey?: string\n}\n\nexport interface TransactionQuery {\n offset?: number\n limit?: number\n startDate?: number\n endDate?: number\n}\n\nexport interface ZcashTransaction {\n txId: string\n accountIndex: number\n fee: string\n value: string\n direction: 'inbound' | 'outbound'\n toAddress: string\n memo?: string\n minedHeight: number // 0 for unconfirmed\n blockTime: number // UNIX timestamp\n}\n\nexport type PendingTransaction = ZcashTransaction & {\n expiryHeight: number\n cancelled: number\n submitAttempts: number\n errorMessage?: string\n errorCode?: number\n createTime: number\n}\n\nexport enum SynchronizerStatus {\n /** Indicates that [stop] has been called on this Synchronizer and it will no longer be used. */\n STOPPED,\n /** Indicates that this Synchronizer is disconnected from its lightwalletd server. When set, a UI element may want to turn red. */\n DISCONNECTED,\n /** Indicates that this Synchronizer is actively downloading new blocks from the server. */\n DOWNLOADING,\n /** Indicates that this Synchronizer is actively validating new blocks that were downloaded from the server. Blocks need to be verified before they are scanned. This confirms that each block is chain-sequential, thereby detecting missing blocks and reorgs. */\n VALIDATING,\n /** Indicates that this Synchronizer is actively decrypting new blocks that were downloaded from the server. */\n SCANNING,\n /** Indicates that this Synchronizer is actively enhancing newly scanned blocks with additional transaction details, fetched from the server. */\n ENHANCING,\n /** Indicates that this Synchronizer is fully up to date and ready for all wallet functions. When set, a UI element may want to turn green. In this state, the balance can be trusted. */\n SYNCED\n}\n\nexport interface UnifiedViewingKey {\n extfvk: string\n extpub: string\n}\n\nexport interface UpdateEvent {\n lastDownloadedHeight: number\n lastScannedHeight: number\n scanProgress: number // 0 - 100\n networkBlockHeight: number\n}\n\nexport interface SynchronizerCallbacks {\n onShieldedBalanceChanged(walletBalance: WalletBalance): void\n onStatusChanged(status: SynchronizerStatus): void\n onUpdate(event: UpdateEvent): void\n onTransactionsChanged(count: number): void\n onPendingTransactionUpdated(tx: PendingTransaction): void\n}\n\nexport interface BlockRange {\n first: number\n last: number\n}\n\nexport interface ConfirmedTransaction {\n value: string\n memo?: string\n minedHeight: number\n rawTransactionId: string\n toAddress?: string\n}\n","import {\n EventSubscription,\n NativeEventEmitter,\n NativeModules\n} from 'react-native'\n\nimport {\n BlockRange,\n ConfirmedTransaction,\n InitializerConfig,\n Network,\n PendingTransaction,\n SpendInfo,\n SynchronizerCallbacks,\n SynchronizerStatus,\n UnifiedViewingKey,\n WalletBalance\n} from './types'\n\nconst { RNZcash } = NativeModules\n\nconst snooze: Function = (ms: number) =>\n new Promise((resolve: Function) => setTimeout(resolve, ms))\n\ntype Callback = (...args: any[]) => any\n\nexport const KeyTool = {\n deriveViewingKey: async (\n seedBytesHex: string,\n network: Network\n ): Promise<UnifiedViewingKey> => {\n const result = await RNZcash.deriveViewingKey(seedBytesHex, network)\n return result\n },\n deriveSpendingKey: async (\n seedBytesHex: string,\n network: Network\n ): Promise<string> => {\n const result = await RNZcash.deriveSpendingKey(seedBytesHex, network)\n return result\n }\n}\n\nexport const AddressTool = {\n deriveShieldedAddress: async (\n viewingKey: string,\n network: Network\n ): Promise<string> => {\n const result = await RNZcash.deriveShieldedAddress(viewingKey, network)\n return result\n },\n isValidShieldedAddress: async (\n address: string,\n network: Network = 'mainnet'\n ): Promise<boolean> => {\n const result = await RNZcash.isValidShieldedAddress(address, network)\n return result\n },\n isValidTransparentAddress: async (\n address: string,\n network: Network = 'mainnet'\n ): Promise<boolean> => {\n const result = await RNZcash.isValidTransparentAddress(address, network)\n return result\n }\n}\n\nclass Synchronizer {\n eventEmitter: NativeEventEmitter\n subscriptions: EventSubscription[]\n alias: string\n network: Network\n\n constructor(alias: string, network: Network) {\n this.eventEmitter = new NativeEventEmitter(RNZcash)\n this.subscriptions = []\n this.alias = alias\n this.network = network\n }\n\n /// ////////////////////////////////////////////////////////////////\n // Start PoC behavior\n // Here are a few functions to demonstrate functionality but the final library should not have these functions\n //\n async readyToSend(): Promise<boolean> {\n const result = await RNZcash.readyToSend()\n return result\n }\n\n async sendTestTransaction(\n key: string,\n address: string\n ): Promise<PendingTransaction> {\n // send an amount that's guaranteed to be too large for our wallet and expect it to fail but at least show how this is done\n // simply change these two values to send a real transaction but ensure the function isn't called too often (although funds can't be spent if notes are unconfirmed)\n const invalidValue = '9223372036854775807' // Max long value (change this to 10000 to send a small transaction equal to the miner's fee on every reload and you could send 10,000 of those before it equals 1 ZEC)\n const invalidAccount = 99 // should be 0\n return this.sendToAddress({\n zatoshi: invalidValue,\n toAddress: address,\n memo: 'this is a test transaction that will fail',\n fromAccountIndex: invalidAccount,\n spendingKey: key\n })\n }\n\n async getBlockCount(): Promise<number> {\n const result = await RNZcash.getBlockCount()\n return result\n }\n // End PoC behavior\n /// ////////////////////////////////////////////////////////////////\n\n async start(): Promise<String> {\n const result = await RNZcash.start(this.alias)\n return result\n }\n\n async stop(): Promise<String> {\n this.unsubscribe()\n const result = await RNZcash.stop(this.alias)\n return result\n }\n\n async initialize(initializerConfig: InitializerConfig): Promise<void> {\n await RNZcash.initialize(\n initializerConfig.fullViewingKey.extfvk,\n initializerConfig.fullViewingKey.extpub,\n initializerConfig.birthdayHeight,\n initializerConfig.alias,\n initializerConfig.networkName,\n initializerConfig.defaultHost,\n initializerConfig.defaultPort\n )\n }\n\n async getLatestNetworkHeight(alias: string): Promise<number> {\n const result = await RNZcash.getLatestNetworkHeight(alias)\n return result\n }\n\n async getLatestScannedHeight(): Promise<number> {\n const result = await RNZcash.getLatestScannedHeight()\n return result\n }\n\n async getProgress(): Promise<number> {\n const result = await RNZcash.getProgress()\n return result\n }\n\n async getStatus(): Promise<SynchronizerStatus> {\n const result = await RNZcash.getStatus()\n return SynchronizerStatus[result.name as keyof typeof SynchronizerStatus]\n }\n\n async getShieldedBalance(): Promise<WalletBalance> {\n const result = await RNZcash.getShieldedBalance(this.alias)\n return result\n }\n\n async getTransparentBalance(): Promise<WalletBalance> {\n // TODO: integrate with lightwalletd service to provide taddr balance. Edge probably doesn't need this, though so it can wait.\n\n await snooze(0) // Hack to make typescript happy\n return {\n availableZatoshi: '0',\n totalZatoshi: '0'\n }\n }\n\n async getTransactions(range: BlockRange): Promise<ConfirmedTransaction[]> {\n const result = await RNZcash.getTransactions(\n this.alias,\n range.first,\n range.last\n )\n return result\n }\n\n rescan(height: number): void {\n RNZcash.rescan(this.alias, height)\n }\n\n async sendToAddress(spendInfo: SpendInfo): Promise<PendingTransaction> {\n const result = await RNZcash.spendToAddress(\n this.alias,\n spendInfo.zatoshi,\n spendInfo.toAddress,\n spendInfo.memo,\n spendInfo.fromAccountIndex,\n // TODO: ask is it okay to send this across the boundary or should it live on the native side and never leave?\n spendInfo.spendingKey\n )\n return result\n }\n\n // estimateFee (spendInfo: SpendInfo): string\n // sendToAddress (spendInfo: SpendInfo): void\n\n // getPendingTransactions (): PendingTransactions[]\n // getConfirmedTransactions (query: TransactionQuery): ZcashTransaction[]\n\n // Events\n\n subscribe({ onStatusChanged, onUpdate }: SynchronizerCallbacks): void {\n this.setListener('StatusEvent', onStatusChanged)\n this.setListener('UpdateEvent', onUpdate)\n }\n\n private setListener<T>(\n eventName: string,\n callback: Callback = (t: any) => null\n ): void {\n this.subscriptions.push(\n this.eventEmitter.addListener(eventName, arg =>\n arg.alias === this.alias ? callback(arg) : null\n )\n )\n }\n\n unsubscribe(): void {\n this.subscriptions.forEach(subscription => {\n subscription.remove()\n })\n }\n}\n\nexport const makeSynchronizer = async (\n initializerConfig: InitializerConfig\n): Promise<Synchronizer> => {\n const synchronizer = new Synchronizer(\n initializerConfig.alias,\n initializerConfig.networkName\n )\n await synchronizer.initialize(initializerConfig)\n return synchronizer\n}\n"],"names":["SynchronizerStatus","RNZcash","NativeModules","snooze","ms","Promise","resolve","setTimeout","KeyTool","deriveViewingKey","seedBytesHex","network","result","deriveSpendingKey","AddressTool","deriveShieldedAddress","viewingKey","isValidShieldedAddress","address","isValidTransparentAddress","Synchronizer","alias","eventEmitter","NativeEventEmitter","subscriptions","readyToSend","sendTestTransaction","key","invalidValue","invalidAccount","sendToAddress","zatoshi","toAddress","memo","fromAccountIndex","spendingKey","getBlockCount","start","stop","unsubscribe","initialize","initializerConfig","fullViewingKey","extfvk","extpub","birthdayHeight","networkName","defaultHost","defaultPort","getLatestNetworkHeight","getLatestScannedHeight","getProgress","getStatus","name","getShieldedBalance","getTransparentBalance","availableZatoshi","totalZatoshi","getTransactions","range","first","last","rescan","height","spendInfo","spendToAddress","subscribe","onStatusChanged","onUpdate","setListener","eventName","callback","t","push","addListener","arg","forEach","subscription","remove","makeSynchronizer","synchronizer"],"mappings":"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"}
@@ -1,11 +1,38 @@
1
- import { InitializerConfig, WalletBalance } from './types';
1
+ import { EventSubscription, NativeEventEmitter } from 'react-native';
2
+ import { BlockRange, ConfirmedTransaction, InitializerConfig, Network, PendingTransaction, SpendInfo, SynchronizerCallbacks, SynchronizerStatus, UnifiedViewingKey, WalletBalance } from './types';
2
3
  export declare const KeyTool: {
3
- deriveViewKey: (seedBytesHex: string) => Promise<string>;
4
+ deriveViewingKey: (seedBytesHex: string, network: Network) => Promise<UnifiedViewingKey>;
5
+ deriveSpendingKey: (seedBytesHex: string, network: Network) => Promise<string>;
6
+ };
7
+ export declare const AddressTool: {
8
+ deriveShieldedAddress: (viewingKey: string, network: Network) => Promise<string>;
9
+ isValidShieldedAddress: (address: string, network?: Network) => Promise<boolean>;
10
+ isValidTransparentAddress: (address: string, network?: Network) => Promise<boolean>;
4
11
  };
5
12
  declare class Synchronizer {
6
- constructor(initializerConfig: InitializerConfig);
13
+ eventEmitter: NativeEventEmitter;
14
+ subscriptions: EventSubscription[];
15
+ alias: string;
16
+ network: Network;
17
+ constructor(alias: string, network: Network);
18
+ readyToSend(): Promise<boolean>;
19
+ sendTestTransaction(key: string, address: string): Promise<PendingTransaction>;
20
+ getBlockCount(): Promise<number>;
21
+ start(): Promise<String>;
22
+ stop(): Promise<String>;
23
+ initialize(initializerConfig: InitializerConfig): Promise<void>;
24
+ getLatestNetworkHeight(alias: string): Promise<number>;
25
+ getLatestScannedHeight(): Promise<number>;
26
+ getProgress(): Promise<number>;
27
+ getStatus(): Promise<SynchronizerStatus>;
7
28
  getShieldedBalance(): Promise<WalletBalance>;
8
29
  getTransparentBalance(): Promise<WalletBalance>;
30
+ getTransactions(range: BlockRange): Promise<ConfirmedTransaction[]>;
31
+ rescan(height: number): void;
32
+ sendToAddress(spendInfo: SpendInfo): Promise<PendingTransaction>;
33
+ subscribe({ onStatusChanged, onUpdate }: SynchronizerCallbacks): void;
34
+ private setListener;
35
+ unsubscribe(): void;
9
36
  }
10
37
  export declare const makeSynchronizer: (initializerConfig: InitializerConfig) => Promise<Synchronizer>;
11
38
  export {};
@@ -1,10 +1,89 @@
1
+ export declare type Network = 'mainnet' | 'testnet';
1
2
  export interface WalletBalance {
2
- availableBalance: string;
3
- totalBalance: string;
3
+ availableZatoshi: string;
4
+ totalZatoshi: string;
4
5
  }
5
6
  export interface InitializerConfig {
6
- host: string;
7
- port: number;
8
- fullViewingKey: string;
7
+ networkName: Network;
8
+ defaultHost: string;
9
+ defaultPort: number;
10
+ fullViewingKey: UnifiedViewingKey;
11
+ alias: string;
9
12
  birthdayHeight: number;
10
13
  }
14
+ export interface SpendInfo {
15
+ zatoshi: string;
16
+ toAddress: string;
17
+ memo: string;
18
+ fromAccountIndex: number;
19
+ spendingKey?: string;
20
+ }
21
+ export interface TransactionQuery {
22
+ offset?: number;
23
+ limit?: number;
24
+ startDate?: number;
25
+ endDate?: number;
26
+ }
27
+ export interface ZcashTransaction {
28
+ txId: string;
29
+ accountIndex: number;
30
+ fee: string;
31
+ value: string;
32
+ direction: 'inbound' | 'outbound';
33
+ toAddress: string;
34
+ memo?: string;
35
+ minedHeight: number;
36
+ blockTime: number;
37
+ }
38
+ export declare type PendingTransaction = ZcashTransaction & {
39
+ expiryHeight: number;
40
+ cancelled: number;
41
+ submitAttempts: number;
42
+ errorMessage?: string;
43
+ errorCode?: number;
44
+ createTime: number;
45
+ };
46
+ export declare enum SynchronizerStatus {
47
+ /** Indicates that [stop] has been called on this Synchronizer and it will no longer be used. */
48
+ STOPPED = 0,
49
+ /** Indicates that this Synchronizer is disconnected from its lightwalletd server. When set, a UI element may want to turn red. */
50
+ DISCONNECTED = 1,
51
+ /** Indicates that this Synchronizer is actively downloading new blocks from the server. */
52
+ DOWNLOADING = 2,
53
+ /** Indicates that this Synchronizer is actively validating new blocks that were downloaded from the server. Blocks need to be verified before they are scanned. This confirms that each block is chain-sequential, thereby detecting missing blocks and reorgs. */
54
+ VALIDATING = 3,
55
+ /** Indicates that this Synchronizer is actively decrypting new blocks that were downloaded from the server. */
56
+ SCANNING = 4,
57
+ /** Indicates that this Synchronizer is actively enhancing newly scanned blocks with additional transaction details, fetched from the server. */
58
+ ENHANCING = 5,
59
+ /** Indicates that this Synchronizer is fully up to date and ready for all wallet functions. When set, a UI element may want to turn green. In this state, the balance can be trusted. */
60
+ SYNCED = 6
61
+ }
62
+ export interface UnifiedViewingKey {
63
+ extfvk: string;
64
+ extpub: string;
65
+ }
66
+ export interface UpdateEvent {
67
+ lastDownloadedHeight: number;
68
+ lastScannedHeight: number;
69
+ scanProgress: number;
70
+ networkBlockHeight: number;
71
+ }
72
+ export interface SynchronizerCallbacks {
73
+ onShieldedBalanceChanged(walletBalance: WalletBalance): void;
74
+ onStatusChanged(status: SynchronizerStatus): void;
75
+ onUpdate(event: UpdateEvent): void;
76
+ onTransactionsChanged(count: number): void;
77
+ onPendingTransactionUpdated(tx: PendingTransaction): void;
78
+ }
79
+ export interface BlockRange {
80
+ first: number;
81
+ last: number;
82
+ }
83
+ export interface ConfirmedTransaction {
84
+ value: string;
85
+ memo?: string;
86
+ minedHeight: number;
87
+ rawTransactionId: string;
88
+ toAddress?: string;
89
+ }