All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.fisco.bcos.web3j.protocol.rx.Web3jRx Maven / Gradle / Ivy

package org.fisco.bcos.web3j.protocol.rx;

import io.reactivex.Flowable;
import java.util.List;
import org.fisco.bcos.web3j.protocol.core.DefaultBlockParameter;
import org.fisco.bcos.web3j.protocol.core.methods.request.BcosFilter;
import org.fisco.bcos.web3j.protocol.core.methods.response.BcosBlock;
import org.fisco.bcos.web3j.protocol.core.methods.response.Log;
import org.fisco.bcos.web3j.protocol.core.methods.response.Transaction;
import org.fisco.bcos.web3j.protocol.websocket.events.LogNotification;
import org.fisco.bcos.web3j.protocol.websocket.events.NewHeadsNotification;

/** The Observables JSON-RPC client event API. */
public interface Web3jRx {

  /**
   * Create an flowable to filter for specific log events on the blockchain.
   *
   * @param filter filter criteria
   * @return a {@link Flowable} instance that emits all Log events matching the filter
   */
  Flowable logFlowable(BcosFilter filter);

  /**
   * Create an Flowable to emit block hashes.
   *
   * @return a {@link Flowable} instance that emits all new block hashes as new blocks are created
   *     on the blockchain
   */
  Flowable blockHashFlowable();

  /**
   * Create an Flowable to emit pending transactions, i.e. those transactions that have been
   * submitted by a node, but don't yet form part of a block (haven't been mined yet).
   *
   * @return a {@link Flowable} instance to emit pending transaction hashes.
   */
  Flowable pendingTransactionHashFlowable();

  /**
   * Create an {@link Flowable} instance to emit all new transactions as they are confirmed on the
   * blockchain. i.e. they have been mined and are incorporated into a block.
   *
   * @return a {@link Flowable} instance to emit new transactions on the blockchain
   */
  Flowable transactionFlowable();

  /**
   * Create an {@link Flowable} instance to emit all pending transactions that have yet to be placed
   * into a block on the blockchain.
   *
   * @return a {@link Flowable} instance to emit pending transactions
   */
  Flowable pendingTransactionFlowable();

  /**
   * Create an {@link Flowable} instance that emits newly created blocks on the blockchain.
   *
   * @param fullTransactionObjects if true, provides transactions embedded in blocks, otherwise
   *     transaction hashes
   * @return a {@link Flowable} instance that emits all new blocks as they are added to the
   *     blockchain
   */
  Flowable blockFlowable(boolean fullTransactionObjects);

  /**
   * Create an {@link Flowable} instance that emits all blocks from the blockchain contained within
   * the requested range.
   *
   * @param startBlock block number to commence with
   * @param endBlock block number to finish with
   * @param fullTransactionObjects if true, provides transactions embedded in blocks, otherwise
   *     transaction hashes
   * @return a {@link Flowable} instance to emit these blocks
   */
  Flowable replayPastBlocksFlowable(
      DefaultBlockParameter startBlock,
      DefaultBlockParameter endBlock,
      boolean fullTransactionObjects);

  /**
   * Create an {@link Flowable} instance that emits all blocks from the blockchain contained within
   * the requested range.
   *
   * @param startBlock block number to commence with
   * @param endBlock block number to finish with
   * @param fullTransactionObjects if true, provides transactions embedded in blocks, otherwise
   *     transaction hashes
   * @param ascending if true, emits blocks in ascending order between range, otherwise in
   *     descending order
   * @return a {@link Flowable} instance to emit these blocks
   */
  Flowable replayPastBlocksFlowable(
      DefaultBlockParameter startBlock,
      DefaultBlockParameter endBlock,
      boolean fullTransactionObjects,
      boolean ascending);

  /**
   * Create a {@link Flowable} instance that emits all transactions from the blockchain starting
   * with a provided block number. Once it has replayed up to the most current block, the provided
   * Flowable is invoked.
   *
   * 

To automatically subscribe to new blocks, use {@link * #replayPastAndFutureBlocksFlowable(DefaultBlockParameter, boolean)}. * * @param startBlock the block number we wish to request from * @param fullTransactionObjects if we require full {@link Transaction} objects to be provided in * the {@link BcosBlock} responses * @param onCompleteFlowable a subsequent Flowable that we wish to run once we are caught up with * the latest block * @return a {@link Flowable} instance to emit all requested blocks */ Flowable replayPastBlocksFlowable( DefaultBlockParameter startBlock, boolean fullTransactionObjects, Flowable onCompleteFlowable); /** * Creates a {@link Flowable} instance that emits all blocks from the requested block number to * the most current. Once it has emitted the most current block, onComplete is called. * * @param startBlock the block number we wish to request from * @param fullTransactionObjects if we require full {@link Transaction} objects to be provided in * the {@link BcosBlock} responses * @return a {@link Flowable} instance to emit all requested blocks */ Flowable replayPastBlocksFlowable( DefaultBlockParameter startBlock, boolean fullTransactionObjects); /** * Create a {@link Flowable} instance that emits all transactions from the blockchain contained * within the requested range. * * @param startBlock block number to commence with * @param endBlock block number to finish with * @return a {@link Flowable} instance to emit these transactions in the order they appear in the * blocks */ Flowable replayPastTransactionsFlowable( DefaultBlockParameter startBlock, DefaultBlockParameter endBlock); /** * Creates a {@link Flowable} instance that emits all transactions from the requested block number * to the most current. Once it has emitted the most current block's transactions, onComplete is * called. * * @param startBlock the block number we wish to request from * @return a {@link Flowable} instance to emit all requested transactions */ Flowable replayPastTransactionsFlowable(DefaultBlockParameter startBlock); /** * Creates a {@link Flowable} instance that emits all blocks from the requested block number to * the most current. Once it has emitted the most current block, it starts emitting new blocks as * they are created. * * @param startBlock the block number we wish to request from * @param fullTransactionObjects if we require full {@link Transaction} objects to be provided in * the {@link BcosBlock} responses * @return a {@link Flowable} instance to emit all requested blocks and future */ Flowable replayPastAndFutureBlocksFlowable( DefaultBlockParameter startBlock, boolean fullTransactionObjects); /** * As per {@link #replayPastAndFutureBlocksFlowable(DefaultBlockParameter, boolean)}, except that * all transactions contained within the blocks are emitted. * * @param startBlock the block number we wish to request from * @return a {@link Flowable} instance to emit all requested transactions and future */ Flowable replayPastAndFutureTransactionsFlowable(DefaultBlockParameter startBlock); /** * Creates a {@link Flowable} instance that emits a notification when a new header is appended to * a chain, including chain reorganizations. * * @return a {@link Flowable} instance that emits a notification for every new header */ Flowable newHeadsNotifications(); /** * Creates aa {@link Flowable} instance that emits notifications for logs included in new imported * blocks. * * @param addresses only return logs from this list of address. Return logs from all addresses if * the list is empty * @param topics only return logs that match specified topics. Returns logs for all topics if the * list is empty * @return a {@link Flowable} instance that emits logs included in new blocks */ Flowable logsNotifications(List addresses, List topics); }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy