From be397881a9bbf4a737e3b482eb16848b6c06c231 Mon Sep 17 00:00:00 2001 From: sofusmortensen Date: Tue, 7 Jun 2016 06:55:37 +0200 Subject: [PATCH] cleanup --- .../contracts/generic/GenericContract.kt | 8 +++--- .../com/r3corda/contracts/generic/Kontract.kt | 14 +---------- .../com/r3corda/contracts/generic/examples.kt | 3 ++- .../com/r3corda/contracts/generic/literal.kt | 25 +++++++++---------- .../com/r3corda/contracts/generic/ZCB.kt | 2 +- 5 files changed, 20 insertions(+), 32 deletions(-) diff --git a/contracts/src/main/kotlin/com/r3corda/contracts/generic/GenericContract.kt b/contracts/src/main/kotlin/com/r3corda/contracts/generic/GenericContract.kt index 8f3f484527..17cdd0c160 100644 --- a/contracts/src/main/kotlin/com/r3corda/contracts/generic/GenericContract.kt +++ b/contracts/src/main/kotlin/com/r3corda/contracts/generic/GenericContract.kt @@ -46,11 +46,11 @@ class GenericContract : Contract { is Commands.Action -> { val inState = tx.inStates.single() as State val actions = actions(inState.details) - val actions2 = actions2(inState.details) requireThat { - "action must be defined" by ( actions2.containsKey(value.name) ) - "action must be authorized" by ( cmd.signers.any { actions[ value.name ]!!.contains(it) } ) - "output state must match action result state" by ( actions2[ value.name ]!!.kontract.equals(outState.details)) + "action must be defined" by ( actions.containsKey(value.name) ) + "action must be authorized" by ( cmd.signers.any { actions[ value.name ]!!.actors.any { party -> party.owningKey == it } } ) + "output state must match action result state" by ( actions[ value.name ]!!.kontract.equals(outState.details)) + "condition must be met" by ( true ) // todo } } is Commands.Issue -> { diff --git a/contracts/src/main/kotlin/com/r3corda/contracts/generic/Kontract.kt b/contracts/src/main/kotlin/com/r3corda/contracts/generic/Kontract.kt index 522d3b9df4..e6e8de789c 100644 --- a/contracts/src/main/kotlin/com/r3corda/contracts/generic/Kontract.kt +++ b/contracts/src/main/kotlin/com/r3corda/contracts/generic/Kontract.kt @@ -57,19 +57,7 @@ fun liableParties(contract: Kontract) : Set { return visit(contract); } -fun actions(contract: Kontract) : Map> { - - when (contract) { - is Zero -> return mapOf() - is Transfer -> return mapOf() - is Action -> return mapOf( contract.name to contract.actors.map { it.owningKey }.toSet() ) - is Or -> return contract.contracts.map { it.name to it.actors.map { it.owningKey }.toSet() }.toMap() - } - - throw IllegalArgumentException() -} - -fun actions2(contract: Kontract) : Map { +fun actions(contract: Kontract) : Map { when (contract) { is Zero -> return mapOf() diff --git a/contracts/src/main/kotlin/com/r3corda/contracts/generic/examples.kt b/contracts/src/main/kotlin/com/r3corda/contracts/generic/examples.kt index 8762f8a4c1..44dcc1e8f6 100644 --- a/contracts/src/main/kotlin/com/r3corda/contracts/generic/examples.kt +++ b/contracts/src/main/kotlin/com/r3corda/contracts/generic/examples.kt @@ -18,9 +18,10 @@ val acmeCorporationHasDefaulted = DummyObservable() // example: val euribor3monthFixing = DummyObservable() +// Test parties val roadRunner = Party("Road Runner", generateKeyPair().public) val wileECoyote = Party("Wile E. Coyote", generateKeyPair().public) -val porkPig = Party("Porky Pig", generateKeyPair().public) +val porkyPig = Party("Porky Pig", generateKeyPair().public) // // Example: diff --git a/contracts/src/main/kotlin/com/r3corda/contracts/generic/literal.kt b/contracts/src/main/kotlin/com/r3corda/contracts/generic/literal.kt index 3ce343361f..033a5d0b6d 100644 --- a/contracts/src/main/kotlin/com/r3corda/contracts/generic/literal.kt +++ b/contracts/src/main/kotlin/com/r3corda/contracts/generic/literal.kt @@ -8,7 +8,7 @@ import java.util.* * Created by sofusmortensen on 23/05/16. */ -class Builder2 { +class ContractBuilder { val contracts = mutableListOf() fun Party.gives(beneficiary: Party, amount: Amount) { @@ -27,16 +27,15 @@ interface GivenThatResolve { fun resolve(contract: Kontract) } -class Builder(val actors: Array) { +class ActionBuilder(val actors: Array) { val actions = mutableListOf() - fun String.givenThat(condition: Observable, init: Builder2.() -> Unit ) { - val b = Builder2() + fun String.givenThat(condition: Observable, init: ContractBuilder.() -> Unit ) { + val b = ContractBuilder() b.init() actions.add( Action(this, condition, actors, b.final() ) ) } - fun String.givenThat(condition: Observable ) : GivenThatResolve { val This = this return object : GivenThatResolve { @@ -46,21 +45,21 @@ class Builder(val actors: Array) { } } - fun String.anytime(init: Builder2.() -> Unit ) { - val b = Builder2() + fun String.anytime(init: ContractBuilder.() -> Unit ) { + val b = ContractBuilder() b.init() actions.add( Action(this, const(true), actors, b.final() ) ) } } -fun Party.may(init: Builder.() -> Unit) : Or { - val b = Builder(arrayOf(this)) +fun Party.may(init: ActionBuilder.() -> Unit) : Or { + val b = ActionBuilder(arrayOf(this)) b.init() return Or(b.actions.toTypedArray()) } -fun Array.may(init: Builder.() -> Unit) : Or { - val b = Builder(this) +fun Array.may(init: ActionBuilder.() -> Unit) : Or { + val b = ActionBuilder(this) b.init() return Or(b.actions.toTypedArray()) } @@ -68,8 +67,8 @@ fun Array.may(init: Builder.() -> Unit) : Or { infix fun Party.or(party: Party) = arrayOf(this, party) infix fun Array.or(party: Party) = this.plus(party) -fun kontract(init: Builder2.() -> Unit ) : Kontract { - val b = Builder2() +fun kontract(init: ContractBuilder.() -> Unit ) : Kontract { + val b = ContractBuilder() b.init() return b.final(); } diff --git a/contracts/src/test/kotlin/com/r3corda/contracts/generic/ZCB.kt b/contracts/src/test/kotlin/com/r3corda/contracts/generic/ZCB.kt index f889349a88..3a92f570bf 100644 --- a/contracts/src/test/kotlin/com/r3corda/contracts/generic/ZCB.kt +++ b/contracts/src/test/kotlin/com/r3corda/contracts/generic/ZCB.kt @@ -73,7 +73,7 @@ class ZCB { input { inState } output { outState } - arg(porkPig.owningKey) { GenericContract.Commands.Action("execute") } + arg(porkyPig.owningKey) { GenericContract.Commands.Action("execute") } this `fails requirement` "action must be authorized" } }