92 lines
3.9 KiB
Swift
92 lines
3.9 KiB
Swift
//
|
|
// ZcashRustBackendWelding.swift
|
|
// ZcashLightClientKit
|
|
//
|
|
// Created by Francisco Gindre on 12/09/2019.
|
|
// Copyright © 2019 Electric Coin Company. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
public enum RustWeldingError: Error {
|
|
case genericError(message: String)
|
|
case dataDbInitFailed(message: String)
|
|
case dataDbNotEmpty
|
|
case saplingSpendParametersNotFound
|
|
}
|
|
|
|
public struct ZcashRustBackendWeldingConstants {
|
|
static let validChain: Int32 = -1
|
|
}
|
|
|
|
public protocol ZcashRustBackendWelding {
|
|
static func lastError() -> RustWeldingError?
|
|
|
|
static func getLastError() -> String?
|
|
|
|
static func initDataDb(dbData: URL) throws
|
|
|
|
static func initAccountsTable(dbData: URL, seed: [UInt8], accounts: Int32) -> [String]?
|
|
|
|
static func initBlocksTable(dbData: URL, height: Int32, hash: String, time: UInt32, saplingTree: String) throws
|
|
|
|
static func getAddress(dbData: URL, account: Int32) -> String?
|
|
|
|
static func getBalance(dbData: URL, account: Int32) -> Int64
|
|
|
|
static func getVerifiedBalance(dbData: URL, account: Int32) -> Int64
|
|
|
|
static func getReceivedMemoAsUTF8(dbData: URL, idNote: Int64) -> String?
|
|
|
|
static func getSentMemoAsUTF8(dbData: URL, idNote: Int64) -> String?
|
|
|
|
/**
|
|
* Checks that the scanned blocks in the data database, when combined with the recent
|
|
* `CompactBlock`s in the cache database, form a valid chain.
|
|
* This function is built on the core assumption that the information provided in the
|
|
* cache database is more likely to be accurate than the previously-scanned information.
|
|
* This follows from the design (and trust) assumption that the `lightwalletd` server
|
|
* provides accurate block information as of the time it was requested.
|
|
* Returns:
|
|
* - `-1` if the combined chain is valid.
|
|
* - `upper_bound` if the combined chain is invalid.
|
|
* `upper_bound` is the height of the highest invalid block (on the assumption that the
|
|
* highest block in the cache database is correct).
|
|
* - `0` if there was an error during validation unrelated to chain validity.
|
|
* This function does not mutate either of the databases.
|
|
*/
|
|
static func validateCombinedChain(dbCache: URL, dbData: URL) -> Int32
|
|
|
|
static func rewindToHeight(dbData: URL, height: Int32) -> Bool
|
|
|
|
/**
|
|
Scans new blocks added to the cache for any transactions received by the tracked
|
|
accounts.
|
|
This function pays attention only to cached blocks with heights greater than the
|
|
highest scanned block in `db_data`. Cached blocks with lower heights are not verified
|
|
against previously-scanned blocks. In particular, this function **assumes** that the
|
|
caller is handling rollbacks.
|
|
For brand-new light client databases, this function starts scanning from the Sapling
|
|
activation height. This height can be fast-forwarded to a more recent block by calling
|
|
[`zcashlc_init_blocks_table`] before this function.
|
|
Scanned blocks are required to be height-sequential. If a block is missing from the
|
|
cache, an error will be signalled.
|
|
*/
|
|
static func scanBlocks(dbCache: URL, dbData: URL) -> Bool
|
|
|
|
/**
|
|
Creates a transaction to the given address from the given account
|
|
- Parameters:
|
|
- dbData: URL for the Data DB
|
|
- account: the account index that will originate the transaction
|
|
- extsk: extended spending key string
|
|
- to: recipient address
|
|
- value: transaction amount in Zatoshi
|
|
- memo: the memo string for this transaction
|
|
- spendParamsPath: path escaped String for the filesystem locations where the spend paremeters are located
|
|
- outputParamsPath: path escaped String for the filesystem locations where the output paremeters are located
|
|
*/
|
|
static func createToAddress(dbData: URL, account: Int32, extsk: String, to: String, value: Int64, memo: String?, spendParamsPath: String, outputParamsPath: String) -> Int64
|
|
|
|
}
|