com.r3corda.protocols

## Package com.r3corda.protocols

### Types

AbstractStateReplacementProtocol | `abstract class AbstractStateReplacementProtocol<T>` Abstract protocol to be used for replacing one state with another, for example when changing the notary of a state. Notably this requires a one to one replacement of states, states cannot be split, merged or issued as part of these protocols.
BroadcastTransactionProtocol | `class BroadcastTransactionProtocol : ProtocolLogic<Unit>` Notify all involved parties about a transaction, including storing a copy. Normally this would be called via FinalityProtocol.
FetchAttachmentsProtocol | `class FetchAttachmentsProtocol : FetchDataProtocol<Attachment, ByteArray>` Given a set of hashes either loads from from local storage or requests them from the other peer. Downloaded attachments are saved to local storage automatically.
FetchDataProtocol | `abstract class FetchDataProtocol<T : NamedByHash, in W : Any> : ProtocolLogic<Result<T>>` An abstract protocol for fetching typed data from a remote peer.
FetchTransactionsProtocol | `class FetchTransactionsProtocol : FetchDataProtocol<SignedTransaction, SignedTransaction>` Given a set of tx hashes (IDs), either loads them from local disk or asks the remote peer to provide them.
FinalityProtocol | `class FinalityProtocol : ProtocolLogic<Unit>` Finalise a transaction by notarising it, then recording it locally, and then sending it to all involved parties.
NotaryChangeProtocol | `object NotaryChangeProtocol : AbstractStateReplacementProtocol<Party>` A protocol to be used for changing a states Notary. This is required since all input states to a transaction must point to the same notary.
NotaryError | `sealed class NotaryError`
NotaryProtocol | `object NotaryProtocol`
ResolveTransactionsProtocol | `class ResolveTransactionsProtocol : ProtocolLogic<List<LedgerTransaction>>` This protocol is used to verify the validity of a transaction by recursively checking the validity of all the dependencies. Once a transaction is checked its inserted into local storage so it can be relayed and wont be checked again.
ServiceRequestMessage | `interface ServiceRequestMessage` Abstract superclass for request messages sent to services which expect a reply.
StateReplacementRefused | `class StateReplacementRefused` Thrown when a participant refuses the proposed state replacement
TwoPartyDealProtocol | `object TwoPartyDealProtocol` Classes for manipulating a two party deal or agreement.
TwoPartyTradeProtocol | `object TwoPartyTradeProtocol` This asset trading protocol implements a "delivery vs payment" type swap. It has two parties (B and S for buyer and seller) and the following steps:
ValidatingNotaryProtocol | `class ValidatingNotaryProtocol : Service` A notary commit protocol that makes sure a given transaction is valid before committing it. This does mean that the calling party has to reveal the whole transaction history; however, we avoid complex conflict resolution logic where a party has its input states "blocked" by a transaction from another party, and needs to establish whether that transaction was indeed valid.

### Exceptions

NotaryException | `class NotaryException : Exception`
StateReplacementException | `class StateReplacementException : Exception`

### Functions

sendRequest | `fun <R : Any> MessagingService.sendRequest(topic: String, request: ServiceRequestMessage, target: SingleMessageRecipient): <ERROR CLASS><R>` Sends a ServiceRequestMessage to target and returns a ListenableFuture of the response.