com.r3corda.contracts / InterestRateSwap

# InterestRateSwap

`class InterestRateSwap : ClauseVerifier`

The Interest Rate Swap class. For a quick overview of what an IRS is, see here - http://www.pimco.co.uk/EN/Education/Pages/InterestRateSwapsBasics1-08.aspx (no endorsement). This contract has 4 significant data classes within it, the "Common", "Calculation", "FixedLeg" and "FloatingLeg". It also has 4 commands, "Agree", "Fix", "Pay" and "Mature". Currently, we are not interested (excuse pun) in valuing the swap, calculating the PVs, DFs and all that good stuff (soon though). This is just a representation of a vanilla Fixed vs Floating (same currency) IRS in the R3 prototype model.

### Types

Calculation | `data class Calculation` The Calculation data class is "mutable" through out the life of the swap, as in, its the only thing that contains data that will changed from state to state (Recall that the design insists that everything is immutable, so we actually copy / update for each transition).
Clause | `interface Clause`
Commands | `interface Commands : CommandData`
Common | `data class Common` This Common area contains all the information that is not leg specific.
CommonLeg | `abstract class CommonLeg`
FixedLeg | `class FixedLeg : CommonLeg`
FloatingLeg | `class FloatingLeg : CommonLeg`
State | `data class State : FixableDealState, SchedulableState` The state class contains the 4 major data classes.

### Constructors

<init> | `InterestRateSwap()` The Interest Rate Swap class. For a quick overview of what an IRS is, see here - http://www.pimco.co.uk/EN/Education/Pages/InterestRateSwapsBasics1-08.aspx (no endorsement). This contract has 4 significant data classes within it, the "Common", "Calculation", "FixedLeg" and "FloatingLeg". It also has 4 commands, "Agree", "Fix", "Pay" and "Mature". Currently, we are not interested (excuse pun) in valuing the swap, calculating the PVs, DFs and all that good stuff (soon though). This is just a representation of a vanilla Fixed vs Floating (same currency) IRS in the R3 prototype model.

### Properties

clauses | `val clauses: List<SingleClause>`
legalContractReference | `val legalContractReference: SecureHash` Unparsed reference to the natural language contract that this code is supposed to express (usually a hash of the contracts contents).

### Functions

extractCommands | `fun extractCommands(tx: TransactionForContract): Collection<AuthenticatedObject<CommandData>>`
generateAgreement | `fun generateAgreement(floatingLeg: FloatingLeg, fixedLeg: FixedLeg, calculation: Calculation, common: Common, notary: Party): TransactionBuilder` This generates the agreement state and also the schedules from the initial data. Note: The day count, interest rate calculation etc are not finished yet, but they are demonstrable.
generateFix | `fun generateFix(tx: TransactionBuilder, irs: StateAndRef<State>, fixing: Fix): Unit`

### Inherited Functions

verify | `open fun verify(tx: TransactionForContract): Unit` Takes an object that represents a state transition, and ensures the inputs/outputs/commands make sense. Must throw an exception if theres a problem that should prevent state transition. Takes a single object rather than an argument so that additional data can be added without breaking binary compatibility with existing contract code.