dash-shielded-native 0.0.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.
Files changed (49) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/LICENSE +27 -0
  3. package/README.md +36 -0
  4. package/android/build.gradle +56 -0
  5. package/android/src/main/AndroidManifest.xml +1 -0
  6. package/android/src/main/java/app/edge/rndashshielded/RNDashShieldedModule.kt +215 -0
  7. package/android/src/main/java/app/edge/rndashshielded/RNDashShieldedPackage.kt +16 -0
  8. package/android/src/main/java/uniffi/dash/dash.kt +1665 -0
  9. package/android/src/main/jniLibs/arm64-v8a/libdashshielded.so +0 -0
  10. package/dash-shielded-native.podspec +32 -0
  11. package/ios/.uniffi-generated +1 -0
  12. package/ios/EdgeDashClient.swift +88 -0
  13. package/ios/RNDashShielded.m +83 -0
  14. package/ios/RNDashShielded.swift +214 -0
  15. package/ios/dash-shielded-native-Bridging-Header.h +2 -0
  16. package/ios/dash.swift +1124 -0
  17. package/ios/libdashshielded.xcframework/Info.plist +47 -0
  18. package/ios/libdashshielded.xcframework/ios-arm64/Headers/dashFFI.h +696 -0
  19. package/ios/libdashshielded.xcframework/ios-arm64/Headers/module.modulemap +7 -0
  20. package/ios/libdashshielded.xcframework/ios-arm64/libdashshielded.a +0 -0
  21. package/ios/libdashshielded.xcframework/ios-arm64-simulator/Headers/dashFFI.h +696 -0
  22. package/ios/libdashshielded.xcframework/ios-arm64-simulator/Headers/module.modulemap +7 -0
  23. package/ios/libdashshielded.xcframework/ios-arm64-simulator/libdashshielded.a +0 -0
  24. package/lib/load-addon.d.ts +34 -0
  25. package/lib/node.d.ts +50 -0
  26. package/lib/react-native.d.ts +31 -0
  27. package/lib/rndash.rn.js +267 -0
  28. package/lib/rndash.rn.js.map +1 -0
  29. package/lib/src/node.js +328 -0
  30. package/lib/src/node.js.map +1 -0
  31. package/lib/types.d.ts +73 -0
  32. package/node.d.ts +1 -0
  33. package/node.js +2 -0
  34. package/package.json +105 -0
  35. package/prebuilds/darwin-arm64/dashshielded.node +0 -0
  36. package/rust/Cargo.lock +6795 -0
  37. package/rust/Cargo.toml +63 -0
  38. package/rust/build.rs +7 -0
  39. package/rust/rust-toolchain.toml +3 -0
  40. package/rust/src/dash.udl +90 -0
  41. package/rust/src/lib.rs +16 -0
  42. package/rust/src/napi_api.rs +164 -0
  43. package/rust/src/uniffi_api.rs +116 -0
  44. package/rust/src/wallet.rs +888 -0
  45. package/rust/uniffi-bindgen.rs +3 -0
  46. package/src/load-addon.ts +99 -0
  47. package/src/node.ts +248 -0
  48. package/src/react-native.ts +212 -0
  49. package/src/types.ts +88 -0
@@ -0,0 +1,32 @@
1
+ require "json"
2
+
3
+ package = JSON.parse(File.read(File.join(__dir__, "package.json")))
4
+
5
+ Pod::Spec.new do |s|
6
+ s.name = package['name']
7
+ s.version = package['version']
8
+ s.summary = package['description']
9
+ s.homepage = package['homepage']
10
+ s.license = package['license']
11
+ s.authors = package['author']
12
+
13
+ s.platform = :ios, "13.0"
14
+ s.source = {
15
+ :git => "https://github.com/EdgeApp/dash-shielded-native.git",
16
+ :tag => "v#{s.version}"
17
+ }
18
+ s.source_files =
19
+ "ios/dash-shielded-native-Bridging-Header.h",
20
+ "ios/RNDashShielded.m",
21
+ "ios/RNDashShielded.swift",
22
+ "ios/EdgeDashClient.swift",
23
+ "ios/dash.swift"
24
+ s.vendored_frameworks = "ios/libdashshielded.xcframework"
25
+ s.pod_target_xcconfig = {
26
+ 'SWIFT_INCLUDE_PATHS' => '"${PODS_XCFRAMEWORKS_BUILD_DIR}/dash-shielded-native/Headers"',
27
+ 'OTHER_LDFLAGS' => '-lc++'
28
+ }
29
+ s.libraries = "c++"
30
+
31
+ s.dependency "React-Core"
32
+ end
@@ -0,0 +1 @@
1
+ dash.swift dashFFI.h from rust/src/dash.udl
@@ -0,0 +1,88 @@
1
+ import Foundation
2
+
3
+ /// Thin names over the UniFFI `dash` namespace so RNDashShielded can keep
4
+ /// Objective-C selector names without shadowing the Rust functions.
5
+ enum EdgeDashClient {
6
+ static func rustSetDocumentDirectory(path: String) throws {
7
+ try setDocumentDirectory(path: path)
8
+ }
9
+
10
+ static func rustInitialize(
11
+ mnemonicSeed: String,
12
+ account: UInt32,
13
+ alias: String,
14
+ networkName: String,
15
+ defaultHost: String,
16
+ defaultPort: UInt32
17
+ ) throws {
18
+ try initialize(
19
+ mnemonicSeed: mnemonicSeed,
20
+ account: account,
21
+ alias: alias,
22
+ networkName: networkName,
23
+ defaultHost: defaultHost,
24
+ defaultPort: defaultPort
25
+ )
26
+ }
27
+
28
+ static func rustStop(alias: String) throws -> String {
29
+ try stop(alias: alias)
30
+ }
31
+
32
+ static func rustStartSync(alias: String) throws {
33
+ try startSync(alias: alias)
34
+ }
35
+
36
+ static func rustStopSync(alias: String) throws {
37
+ try stopSync(alias: alias)
38
+ }
39
+
40
+ static func rustDeriveShieldedAddress(alias: String) throws -> Addresses {
41
+ try deriveShieldedAddress(alias: alias)
42
+ }
43
+
44
+ static func rustIsValidAddress(address: String, network: String) -> Bool {
45
+ isValidAddress(address: address, network: network)
46
+ }
47
+
48
+ static func rustDeriveViewingKey(mnemonicSeed: String, network: String) throws -> String {
49
+ try deriveViewingKey(mnemonicSeed: mnemonicSeed, network: network)
50
+ }
51
+
52
+ static func rustWarmUpProver() throws {
53
+ try warmUpProver()
54
+ }
55
+
56
+ static func rustIsProverReady() -> Bool {
57
+ isProverReady()
58
+ }
59
+
60
+ static func rustPoll(alias: String) throws -> Poll {
61
+ try poll(alias: alias)
62
+ }
63
+
64
+ static func rustProposeTransfer(
65
+ alias: String, amountCredits: String, toAddress: String, memo: String?
66
+ ) throws -> String {
67
+ try proposeTransfer(
68
+ alias: alias,
69
+ amountCredits: amountCredits,
70
+ toAddress: toAddress,
71
+ memo: memo
72
+ )
73
+ }
74
+
75
+ static func rustCreateTransfer(
76
+ alias: String, proposalId: String, mnemonicSeed: String
77
+ ) throws -> String {
78
+ try createTransfer(
79
+ alias: alias, proposalId: proposalId, mnemonicSeed: mnemonicSeed)
80
+ }
81
+
82
+ static func rustDeriveShieldedAddressFromSeed(
83
+ mnemonicSeed: String, network: String, account: UInt32
84
+ ) throws -> String {
85
+ try deriveShieldedAddressFromSeed(
86
+ mnemonicSeed: mnemonicSeed, network: network, account: account)
87
+ }
88
+ }
@@ -0,0 +1,83 @@
1
+ #import <React/RCTBridgeModule.h>
2
+ #import <React/RCTEventEmitter.h>
3
+
4
+ @interface RCT_EXTERN_MODULE(RNDashShielded, RCTEventEmitter<RCTBridgeModule>)
5
+
6
+ RCT_EXTERN_METHOD(initialize:(NSString *)seed
7
+ :(NSInteger *)account
8
+ :(NSString *)alias
9
+ :(NSString *)networkName
10
+ :(NSString *)defaultHost
11
+ :(NSInteger *)defaultPort
12
+ resolver:(RCTPromiseResolveBlock)resolve
13
+ rejecter:(RCTPromiseRejectBlock)reject
14
+ )
15
+
16
+ RCT_EXTERN_METHOD(stop:(NSString *)alias
17
+ resolver:(RCTPromiseResolveBlock)resolve
18
+ rejecter:(RCTPromiseRejectBlock)reject
19
+ )
20
+
21
+ RCT_EXTERN_METHOD(startSync:(NSString *)alias
22
+ resolver:(RCTPromiseResolveBlock)resolve
23
+ rejecter:(RCTPromiseRejectBlock)reject
24
+ )
25
+
26
+ RCT_EXTERN_METHOD(stopSync:(NSString *)alias
27
+ resolver:(RCTPromiseResolveBlock)resolve
28
+ rejecter:(RCTPromiseRejectBlock)reject
29
+ )
30
+
31
+ RCT_EXTERN_METHOD(deriveShieldedAddress:(NSString *)alias
32
+ resolver:(RCTPromiseResolveBlock)resolve
33
+ rejecter:(RCTPromiseRejectBlock)reject
34
+ )
35
+
36
+ RCT_EXTERN_METHOD(deriveShieldedAddressFromSeed:(NSString *)seed
37
+ :(NSString *)network
38
+ :(NSInteger *)account
39
+ resolver:(RCTPromiseResolveBlock)resolve
40
+ rejecter:(RCTPromiseRejectBlock)reject
41
+ )
42
+
43
+ RCT_EXTERN_METHOD(isValidAddress:(NSString *)address
44
+ :(NSString *)network
45
+ resolver:(RCTPromiseResolveBlock)resolve
46
+ rejecter:(RCTPromiseRejectBlock)reject
47
+ )
48
+
49
+ RCT_EXTERN_METHOD(deriveViewingKey:(NSString *)seed
50
+ :(NSString *)network
51
+ resolver:(RCTPromiseResolveBlock)resolve
52
+ rejecter:(RCTPromiseRejectBlock)reject
53
+ )
54
+
55
+ RCT_EXTERN_METHOD(warmUpProver:(RCTPromiseResolveBlock)resolve
56
+ rejecter:(RCTPromiseRejectBlock)reject
57
+ )
58
+
59
+ RCT_EXTERN_METHOD(isProverReady:(RCTPromiseResolveBlock)resolve
60
+ rejecter:(RCTPromiseRejectBlock)reject
61
+ )
62
+
63
+ RCT_EXTERN_METHOD(poll:(NSString *)alias
64
+ resolver:(RCTPromiseResolveBlock)resolve
65
+ rejecter:(RCTPromiseRejectBlock)reject
66
+ )
67
+
68
+ RCT_EXTERN_METHOD(proposeTransfer:(NSString *)alias
69
+ :(NSString *)amountCredits
70
+ :(NSString *)toAddress
71
+ :(NSString *)memo
72
+ resolver:(RCTPromiseResolveBlock)resolve
73
+ rejecter:(RCTPromiseRejectBlock)reject
74
+ )
75
+
76
+ RCT_EXTERN_METHOD(createTransfer:(NSString *)alias
77
+ :(NSString *)proposalId
78
+ :(NSString *)seed
79
+ resolver:(RCTPromiseResolveBlock)resolve
80
+ rejecter:(RCTPromiseRejectBlock)reject
81
+ )
82
+
83
+ @end
@@ -0,0 +1,214 @@
1
+ import Foundation
2
+
3
+ @objc(RNDashShielded)
4
+ class RNDashShielded: RCTEventEmitter {
5
+ private static var didSetDocumentDirectory = false
6
+
7
+ override static func requiresMainQueueSetup() -> Bool {
8
+ return true
9
+ }
10
+
11
+ private func ensureDocumentDirectory() throws {
12
+ if RNDashShielded.didSetDocumentDirectory {
13
+ return
14
+ }
15
+ let root = try FileManager.default.url(
16
+ for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
17
+ let path = root.appendingPathComponent("native/dashshielded", isDirectory: true).path
18
+ try EdgeDashClient.rustSetDocumentDirectory(path: path)
19
+ RNDashShielded.didSetDocumentDirectory = true
20
+ }
21
+
22
+ private func run(
23
+ _ resolve: @escaping RCTPromiseResolveBlock,
24
+ _ reject: @escaping RCTPromiseRejectBlock,
25
+ _ name: String,
26
+ _ body: @escaping () throws -> Any?
27
+ ) {
28
+ DispatchQueue.global(qos: .userInitiated).async {
29
+ do {
30
+ try self.ensureDocumentDirectory()
31
+ let value = try body()
32
+ resolve(value)
33
+ } catch {
34
+ reject(name, error.localizedDescription, error)
35
+ }
36
+ }
37
+ }
38
+
39
+ private func pollDictionary(_ snap: Poll) -> NSDictionary {
40
+ let transactions: [NSDictionary] = snap.transactions.map { tx in
41
+ var dict: [String: Any] = [
42
+ "txid": tx.txid,
43
+ "blockTimeInSeconds": tx.blockTimeInSeconds,
44
+ "minedHeight": tx.minedHeight,
45
+ "value": tx.value,
46
+ "memos": tx.memos,
47
+ ]
48
+ if let fee = tx.fee {
49
+ dict["fee"] = fee
50
+ }
51
+ if let toAddress = tx.toAddress {
52
+ dict["toAddress"] = toAddress
53
+ }
54
+ return dict as NSDictionary
55
+ }
56
+ return [
57
+ "alias": snap.alias,
58
+ "status": snap.status,
59
+ "scanProgress": snap.scanProgress,
60
+ "networkBlockHeight": snap.networkBlockHeight,
61
+ "availableCredits": snap.availableCredits,
62
+ "totalCredits": snap.totalCredits,
63
+ "transactions": transactions,
64
+ ] as NSDictionary
65
+ }
66
+
67
+ @objc func initialize(
68
+ _ seed: String, _ account: Int, _ alias: String, _ networkName: String,
69
+ _ defaultHost: String, _ defaultPort: Int,
70
+ resolver resolve: @escaping RCTPromiseResolveBlock,
71
+ rejecter reject: @escaping RCTPromiseRejectBlock
72
+ ) {
73
+ run(resolve, reject, "initialize") {
74
+ try EdgeDashClient.rustInitialize(
75
+ mnemonicSeed: seed,
76
+ account: UInt32(account),
77
+ alias: alias,
78
+ networkName: networkName,
79
+ defaultHost: defaultHost,
80
+ defaultPort: UInt32(defaultPort)
81
+ )
82
+ return nil
83
+ }
84
+ }
85
+
86
+ @objc func stop(
87
+ _ alias: String,
88
+ resolver resolve: @escaping RCTPromiseResolveBlock,
89
+ rejecter reject: @escaping RCTPromiseRejectBlock
90
+ ) {
91
+ run(resolve, reject, "stop") {
92
+ try EdgeDashClient.rustStop(alias: alias)
93
+ }
94
+ }
95
+
96
+ @objc func startSync(
97
+ _ alias: String,
98
+ resolver resolve: @escaping RCTPromiseResolveBlock,
99
+ rejecter reject: @escaping RCTPromiseRejectBlock
100
+ ) {
101
+ run(resolve, reject, "startSync") {
102
+ try EdgeDashClient.rustStartSync(alias: alias)
103
+ return nil
104
+ }
105
+ }
106
+
107
+ @objc func stopSync(
108
+ _ alias: String,
109
+ resolver resolve: @escaping RCTPromiseResolveBlock,
110
+ rejecter reject: @escaping RCTPromiseRejectBlock
111
+ ) {
112
+ run(resolve, reject, "stopSync") {
113
+ try EdgeDashClient.rustStopSync(alias: alias)
114
+ return nil
115
+ }
116
+ }
117
+
118
+ @objc func deriveShieldedAddress(
119
+ _ alias: String,
120
+ resolver resolve: @escaping RCTPromiseResolveBlock,
121
+ rejecter reject: @escaping RCTPromiseRejectBlock
122
+ ) {
123
+ run(resolve, reject, "deriveShieldedAddress") {
124
+ let addresses = try EdgeDashClient.rustDeriveShieldedAddress(alias: alias)
125
+ return ["shieldedAddress": addresses.shieldedAddress]
126
+ }
127
+ }
128
+
129
+ @objc func deriveShieldedAddressFromSeed(
130
+ _ seed: String, _ network: String, _ account: Int,
131
+ resolver resolve: @escaping RCTPromiseResolveBlock,
132
+ rejecter reject: @escaping RCTPromiseRejectBlock
133
+ ) {
134
+ run(resolve, reject, "deriveShieldedAddressFromSeed") {
135
+ try EdgeDashClient.rustDeriveShieldedAddressFromSeed(
136
+ mnemonicSeed: seed, network: network, account: UInt32(account))
137
+ }
138
+ }
139
+
140
+ @objc func isValidAddress(
141
+ _ address: String, _ network: String,
142
+ resolver resolve: @escaping RCTPromiseResolveBlock,
143
+ rejecter reject: @escaping RCTPromiseRejectBlock
144
+ ) {
145
+ run(resolve, reject, "isValidAddress") {
146
+ EdgeDashClient.rustIsValidAddress(address: address, network: network)
147
+ }
148
+ }
149
+
150
+ @objc func deriveViewingKey(
151
+ _ seed: String, _ network: String,
152
+ resolver resolve: @escaping RCTPromiseResolveBlock,
153
+ rejecter reject: @escaping RCTPromiseRejectBlock
154
+ ) {
155
+ run(resolve, reject, "deriveViewingKey") {
156
+ try EdgeDashClient.rustDeriveViewingKey(mnemonicSeed: seed, network: network)
157
+ }
158
+ }
159
+
160
+ @objc func warmUpProver(
161
+ _ resolve: @escaping RCTPromiseResolveBlock,
162
+ rejecter reject: @escaping RCTPromiseRejectBlock
163
+ ) {
164
+ run(resolve, reject, "warmUpProver") {
165
+ try EdgeDashClient.rustWarmUpProver()
166
+ return nil
167
+ }
168
+ }
169
+
170
+ @objc func isProverReady(
171
+ _ resolve: @escaping RCTPromiseResolveBlock,
172
+ rejecter reject: @escaping RCTPromiseRejectBlock
173
+ ) {
174
+ run(resolve, reject, "isProverReady") {
175
+ EdgeDashClient.rustIsProverReady()
176
+ }
177
+ }
178
+
179
+ @objc func poll(
180
+ _ alias: String,
181
+ resolver resolve: @escaping RCTPromiseResolveBlock,
182
+ rejecter reject: @escaping RCTPromiseRejectBlock
183
+ ) {
184
+ run(resolve, reject, "poll") {
185
+ try self.pollDictionary(EdgeDashClient.rustPoll(alias: alias))
186
+ }
187
+ }
188
+
189
+ @objc func proposeTransfer(
190
+ _ alias: String, _ amountCredits: String, _ toAddress: String, _ memo: String,
191
+ resolver resolve: @escaping RCTPromiseResolveBlock,
192
+ rejecter reject: @escaping RCTPromiseRejectBlock
193
+ ) {
194
+ run(resolve, reject, "proposeTransfer") {
195
+ try EdgeDashClient.rustProposeTransfer(
196
+ alias: alias,
197
+ amountCredits: amountCredits,
198
+ toAddress: toAddress,
199
+ memo: memo.isEmpty ? nil : memo
200
+ )
201
+ }
202
+ }
203
+
204
+ @objc func createTransfer(
205
+ _ alias: String, _ proposalId: String, _ seed: String,
206
+ resolver resolve: @escaping RCTPromiseResolveBlock,
207
+ rejecter reject: @escaping RCTPromiseRejectBlock
208
+ ) {
209
+ run(resolve, reject, "createTransfer") {
210
+ try EdgeDashClient.rustCreateTransfer(
211
+ alias: alias, proposalId: proposalId, mnemonicSeed: seed)
212
+ }
213
+ }
214
+ }
@@ -0,0 +1,2 @@
1
+ #import <React/RCTBridgeModule.h>
2
+ #import <React/RCTEventEmitter.h>