Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

## Unreleased

- added: `proposeFulfillingPaymentURI` support
- changed: iOS - Emit balance after rescan
- fixed: iOS - get UUID after starting synchronizer

Expand Down
26 changes: 26 additions & 0 deletions android/src/main/java/app/edge/rnzcash/RNZcashModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -381,6 +381,32 @@ class RNZcashModule(
}
}

@ReactMethod
fun proposeFulfillingPaymentURI(
alias: String,
paymentUri: String,
promise: Promise,
) {
val wallet = getWallet(alias)
wallet.coroutineScope.launch {
try {
val account = wallet.getAccounts().first()
val proposal =
wallet.proposeFulfillingPaymentUri(
account,
paymentUri,
)
val map = Arguments.createMap()
map.putInt("transactionCount", proposal.transactionCount())
map.putString("totalFee", proposal.totalFeeRequired().value.toString())
map.putString("proposalBase64", Base64.getEncoder().encodeToString(proposal.toByteArray()))
promise.resolve(map)
} catch (t: Throwable) {
promise.reject("Err", t)
}
}
}

@kotlin.ExperimentalStdlibApi
@ReactMethod
fun createTransfer(
Expand Down
6 changes: 6 additions & 0 deletions ios/RNZcash.m
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,12 @@ @interface RCT_EXTERN_MODULE(RNZcash, RCTEventEmitter<RCTBridgeModule>)
rejecter:(RCTPromiseRejectBlock)reject
)

RCT_EXTERN_METHOD(proposeFulfillingPaymentURI:(NSString *)alias
:(NSString *)paymentUri
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject
)

RCT_EXTERN_METHOD(createTransfer:(NSString *)alias
:(NSString *)proposalBase64
:(NSString *)seed
Expand Down
36 changes: 36 additions & 0 deletions ios/RNZcash.swift
Original file line number Diff line number Diff line change
Expand Up @@ -247,6 +247,42 @@ class RNZcash: RCTEventEmitter {
}
}

@objc func proposeFulfillingPaymentURI(
_ alias: String, _ paymentUri: String,
resolver resolve: @escaping RCTPromiseResolveBlock,
rejecter reject: @escaping RCTPromiseRejectBlock
) {
Task {
if let wallet = await synchronizerStore.get(alias) {
do {
guard let accountUUID = wallet.accountUUID else {
reject("proposeFulfillingPaymentURI", "Account UUID not found", genericError)
return
}
let proposal = try await wallet.synchronizer.proposefulfillingPaymentURI(
paymentUri,
accountUUID: accountUUID
)
let proposalBase64 = try proposal.inner.serializedData().base64EncodedString()

let out: NSMutableDictionary = [
"proposalBase64": proposalBase64,
"transactionCount": proposal.transactionCount(),
"totalFee": String(proposal.totalFeeRequired().amount),
]

resolve(out)
} catch let error as ZcashError {
reject("proposeFulfillingPaymentURI", "Failed to propose from payment URI", error)
} catch {
reject("proposeFulfillingPaymentURI", "Unknown error", error)
}
} else {
reject("proposeFulfillingPaymentURI", "Wallet does not exist", genericError)
}
}
}

@objc func createTransfer(
_ alias: String, _ proposalBase64: String, _ seed: String,
resolver resolve: @escaping RCTPromiseResolveBlock,
Expand Down
10 changes: 10 additions & 0 deletions src/react-native.ts
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,16 @@ export class Synchronizer {
return result
}

async proposeFulfillingPaymentURI(
paymentUri: string
): Promise<ProposalSuccess> {
const result = await RNZcash.proposeFulfillingPaymentURI(
this.alias,
paymentUri
)
return result
}

async createTransfer(
opts: CreateTransferOpts
): Promise<string | SpendFailure> {
Expand Down
Loading