Class NodeProxy

All Implemented Interfaces:
CloseableNativeProxy, Node, AutoCloseable

public final class NodeProxy
extends AbstractCloseableNativeProxy
implements Node
An Exonum node context. Allows to add transactions to Exonum network and get a snapshot of the database state.
  • Constructor Details

    • NodeProxy

      public NodeProxy​(long nativeHandle)
      Creates a proxy of a node. Native code owns the node, and, therefore, shall destroy the object.
      Parameters:
      nativeHandle - an implementation-specific reference to a native node
  • Method Details

    • submitTransaction

      public HashCode submitTransaction​(RawTransaction rawTransaction)
      Creates a transaction from the given parameters, signs it with the node service key, and then submits it into Exonum network. This node does not execute the transaction immediately, but broadcasts it to all the nodes in the network. Then each node verifies the transaction and, if it is correct, adds it to the pool of unconfirmed transactions. The transaction is executed later asynchronously.

      Incorrect transactions (e.g., the payload of which cannot be deserialized by the target service, or which have unknown message id) are rejected by the network.

      Be aware that each node has its own service key pair, therefore invocations of this method on different nodes will produce different transactions.

      Specified by:
      submitTransaction in interface Node
      Parameters:
      rawTransaction - transaction parameters to include in transaction message
      Returns:
      hash of the transaction message created by the framework
      Throws:
      IllegalStateException - if the node proxy is closed
      See Also:
      Blockchain.getTxMessages()
    • withSnapshot

      public <ResultT> ResultT withSnapshot​(Function<Snapshot,​ResultT> snapshotFunction)
      Performs the given function with a snapshot of the current database state.
      Specified by:
      withSnapshot in interface Node
      Type Parameters:
      ResultT - a type the function returns
      Parameters:
      snapshotFunction - a function to execute
      Returns:
      the result of applying the given function to the database state
      Throws:
      IllegalStateException - if the node proxy is closed
    • getPublicKey

      public PublicKey getPublicKey()
      Returns the service public key of this node. The corresponding private key is used for signing transactions in Node.submitTransaction(RawTransaction).

      This key is stored under "service_public_key" key in the node configuration file.

      Specified by:
      getPublicKey in interface Node
      Throws:
      IllegalStateException - if the node proxy is closed
    • disposeInternal

      protected void disposeInternal()
      Description copied from class: AbstractCloseableNativeProxy
      Releases any resources owned by this proxy (e.g., the corresponding native object).

      This method is only called once from AbstractCloseableNativeProxy.close() for a valid proxy and shall not be called directly.

      Specified by:
      disposeInternal in class AbstractCloseableNativeProxy