// // DO NOT EDIT. // // Generated by the protocol buffer compiler. // Source: darkside.proto // // // Copyright 2018, gRPC Authors All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // import Foundation import GRPC import NIO import NIOHTTP1 import SwiftProtobuf @testable import ZcashLightClientKit /// Usage: instantiate DarksideStreamerClient, then call methods of this protocol to make API calls. internal protocol DarksideStreamerClientProtocol { func reset(_ request: DarksideMetaState, callOptions: CallOptions?) -> UnaryCall func stageBlocksStream(callOptions: CallOptions?) -> ClientStreamingCall func stageBlocks(_ request: DarksideBlocksURL, callOptions: CallOptions?) -> UnaryCall func stageBlocksCreate(_ request: DarksideEmptyBlocks, callOptions: CallOptions?) -> UnaryCall func stageTransactionsStream(callOptions: CallOptions?) -> ClientStreamingCall func stageTransactions(_ request: DarksideTransactionsURL, callOptions: CallOptions?) -> UnaryCall func applyStaged(_ request: DarksideHeight, callOptions: CallOptions?) -> UnaryCall func getIncomingTransactions(_ request: Empty, callOptions: CallOptions?, handler: @escaping (RawTransaction) -> Void) -> ServerStreamingCall func clearIncomingTransactions(_ request: Empty, callOptions: CallOptions?) -> UnaryCall } internal final class DarksideStreamerClient: GRPCClient, DarksideStreamerClientProtocol { internal let channel: GRPCChannel internal var defaultCallOptions: CallOptions /// Creates a client for the cash.z.wallet.sdk.rpc.DarksideStreamer service. /// /// - Parameters: /// - channel: `GRPCChannel` to the service host. /// - defaultCallOptions: Options to use for each service call if the user doesn't provide them. internal init(channel: GRPCChannel, defaultCallOptions: CallOptions = CallOptions()) { self.channel = channel self.defaultCallOptions = defaultCallOptions } /// Reset reverts all darksidewalletd state (active block range, latest height, /// staged blocks and transactions) and lightwalletd state (cache) to empty, /// the same as the initial state. This occurs synchronously and instantaneously; /// no reorg happens in lightwalletd. This is good to do before each independent /// test so that no state leaks from one test to another. /// Also sets (some of) the values returned by GetLightdInfo(). /// /// - Parameters: /// - request: Request to send to Reset. /// - callOptions: Call options; `self.defaultCallOptions` is used if `nil`. /// - Returns: A `UnaryCall` with futures for the metadata, status and response. internal func reset(_ request: DarksideMetaState, callOptions: CallOptions? = nil) -> UnaryCall { return self.makeUnaryCall(path: "/cash.z.wallet.sdk.rpc.DarksideStreamer/Reset", request: request, callOptions: callOptions ?? self.defaultCallOptions) } /// StageBlocksStream accepts a list of blocks and saves them into the blocks /// staging area until ApplyStaged() is called; there is no immediate effect on /// the mock zcashd. Blocks are hex-encoded. /// /// Callers should use the `send` method on the returned object to send messages /// to the server. The caller should send an `.end` after the final message has been sent. /// /// - Parameters: /// - callOptions: Call options; `self.defaultCallOptions` is used if `nil`. /// - Returns: A `ClientStreamingCall` with futures for the metadata, status and response. internal func stageBlocksStream(callOptions: CallOptions? = nil) -> ClientStreamingCall { return self.makeClientStreamingCall(path: "/cash.z.wallet.sdk.rpc.DarksideStreamer/StageBlocksStream", callOptions: callOptions ?? self.defaultCallOptions) } /// StageBlocks is the same as StageBlocksStream() except the blocks are fetched /// from the given URL. Blocks are one per line, hex-encoded (not JSON). /// /// - Parameters: /// - request: Request to send to StageBlocks. /// - callOptions: Call options; `self.defaultCallOptions` is used if `nil`. /// - Returns: A `UnaryCall` with futures for the metadata, status and response. internal func stageBlocks(_ request: DarksideBlocksURL, callOptions: CallOptions? = nil) -> UnaryCall { return self.makeUnaryCall(path: "/cash.z.wallet.sdk.rpc.DarksideStreamer/StageBlocks", request: request, callOptions: callOptions ?? self.defaultCallOptions) } /// StageBlocksCreate is like the previous two, except it creates 'count' /// empty blocks at consecutive heights starting at height 'height'. The /// 'nonce' is part of the header, so it contributes to the block hash; this /// lets you create two fake blocks with the same transactions (or no /// transactions) and same height, with two different hashes. /// /// - Parameters: /// - request: Request to send to StageBlocksCreate. /// - callOptions: Call options; `self.defaultCallOptions` is used if `nil`. /// - Returns: A `UnaryCall` with futures for the metadata, status and response. internal func stageBlocksCreate(_ request: DarksideEmptyBlocks, callOptions: CallOptions? = nil) -> UnaryCall { return self.makeUnaryCall(path: "/cash.z.wallet.sdk.rpc.DarksideStreamer/StageBlocksCreate", request: request, callOptions: callOptions ?? self.defaultCallOptions) } /// StageTransactions stores the given transaction-height pairs in the /// staging area until ApplyStaged() is called. Note that these transactions /// are not returned by the production GetTransaction() gRPC until they /// appear in a "mined" block (contained in the active blockchain presented /// by the mock zcashd). /// /// Callers should use the `send` method on the returned object to send messages /// to the server. The caller should send an `.end` after the final message has been sent. /// /// - Parameters: /// - callOptions: Call options; `self.defaultCallOptions` is used if `nil`. /// - Returns: A `ClientStreamingCall` with futures for the metadata, status and response. internal func stageTransactionsStream(callOptions: CallOptions? = nil) -> ClientStreamingCall { return self.makeClientStreamingCall(path: "/cash.z.wallet.sdk.rpc.DarksideStreamer/StageTransactionsStream", callOptions: callOptions ?? self.defaultCallOptions) } /// Unary call to StageTransactions /// /// - Parameters: /// - request: Request to send to StageTransactions. /// - callOptions: Call options; `self.defaultCallOptions` is used if `nil`. /// - Returns: A `UnaryCall` with futures for the metadata, status and response. internal func stageTransactions(_ request: DarksideTransactionsURL, callOptions: CallOptions? = nil) -> UnaryCall { return self.makeUnaryCall(path: "/cash.z.wallet.sdk.rpc.DarksideStreamer/StageTransactions", request: request, callOptions: callOptions ?? self.defaultCallOptions) } /// ApplyStaged iterates the list of blocks that were staged by the /// StageBlocks*() gRPCs, in the order they were staged, and "merges" each /// into the active, working blocks list that the mock zcashd is presenting /// to lightwalletd. The resulting working block list can't have gaps; if the /// working block range is 1000-1006, and the staged block range is 1003-1004, /// the resulting range is 1000-1004, with 1000-1002 unchanged, blocks /// 1003-1004 from the new range, and 1005-1006 dropped. After merging all /// blocks, ApplyStaged() appends staged transactions (in the order received) /// into each one's corresponding block. The staging area is then cleared. /// /// The argument specifies the latest block height that mock zcashd reports /// (i.e. what's returned by GetLatestBlock). Note that ApplyStaged() can /// also be used to simply advance the latest block height presented by mock /// zcashd. That is, there doesn't need to be anything in the staging area. /// /// - Parameters: /// - request: Request to send to ApplyStaged. /// - callOptions: Call options; `self.defaultCallOptions` is used if `nil`. /// - Returns: A `UnaryCall` with futures for the metadata, status and response. internal func applyStaged(_ request: DarksideHeight, callOptions: CallOptions? = nil) -> UnaryCall { return self.makeUnaryCall(path: "/cash.z.wallet.sdk.rpc.DarksideStreamer/ApplyStaged", request: request, callOptions: callOptions ?? self.defaultCallOptions) } /// Calls to the production gRPC SendTransaction() store the transaction in /// a separate area (not the staging area); this method returns all transactions /// in this separate area, which is then cleared. The height returned /// with each transaction is -1 (invalid) since these transactions haven't /// been mined yet. The intention is that the transactions returned here can /// then, for example, be given to StageTransactions() to get them "mined" /// into a specified block on the next ApplyStaged(). /// /// - Parameters: /// - request: Request to send to GetIncomingTransactions. /// - callOptions: Call options; `self.defaultCallOptions` is used if `nil`. /// - handler: A closure called when each response is received from the server. /// - Returns: A `ServerStreamingCall` with futures for the metadata and status. internal func getIncomingTransactions(_ request: Empty, callOptions: CallOptions? = nil, handler: @escaping (RawTransaction) -> Void) -> ServerStreamingCall { return self.makeServerStreamingCall(path: "/cash.z.wallet.sdk.rpc.DarksideStreamer/GetIncomingTransactions", request: request, callOptions: callOptions ?? self.defaultCallOptions, handler: handler) } /// Clear the incoming transaction pool. /// /// - Parameters: /// - request: Request to send to ClearIncomingTransactions. /// - callOptions: Call options; `self.defaultCallOptions` is used if `nil`. /// - Returns: A `UnaryCall` with futures for the metadata, status and response. internal func clearIncomingTransactions(_ request: Empty, callOptions: CallOptions? = nil) -> UnaryCall { return self.makeUnaryCall(path: "/cash.z.wallet.sdk.rpc.DarksideStreamer/ClearIncomingTransactions", request: request, callOptions: callOptions ?? self.defaultCallOptions) } } // Provides conformance to `GRPCPayload` for request and response messages extension DarksideMetaState: GRPCProtobufPayload {} //extension Empty: GRPCProtobufPayload {} extension DarksideBlock: GRPCProtobufPayload {} extension DarksideBlocksURL: GRPCProtobufPayload {} extension DarksideEmptyBlocks: GRPCProtobufPayload {} //extension RawTransaction: GRPCProtobufPayload {} extension DarksideTransactionsURL: GRPCProtobufPayload {} extension DarksideHeight: GRPCProtobufPayload {}