mirror of
https://github.com/corda/corda.git
synced 2025-04-30 07:50:05 +00:00
Move common move command verification into a shared function
This commit is contained in:
parent
0730a4a8c1
commit
73f4803b72
@ -130,14 +130,7 @@ class Cash : Contract {
|
|||||||
(inputAmount == outputAmount + amountExitingLedger)
|
(inputAmount == outputAmount + amountExitingLedger)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Now check the digital signatures on the move command. Every input has an owning public key, and we must
|
verifyMoveCommand<Commands.Move>(inputs, tx)
|
||||||
// see a signature from each of those keys. The actual signatures have been verified against the transaction
|
|
||||||
// data by the platform before execution.
|
|
||||||
val owningPubKeys = inputs.map { it.owner }.toSet()
|
|
||||||
val keysThatSigned = tx.commands.requireSingleCommand<Commands.Move>().signers.toSet()
|
|
||||||
requireThat {
|
|
||||||
"the owning keys are the same as the signing keys" by keysThatSigned.containsAll(owningPubKeys)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -81,3 +81,20 @@ fun List<AuthenticatedObject<CommandData>>.getTimestampByName(vararg names: Stri
|
|||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Simple functionality for verifying a move command. Verifies that each input has a signature from its owning key.
|
||||||
|
*
|
||||||
|
* @param T the type of the move command
|
||||||
|
*/
|
||||||
|
@Throws(IllegalArgumentException::class)
|
||||||
|
// TODO: Can we have a common Move command for all contracts and avoid the reified type parameter here?
|
||||||
|
inline fun <reified T : CommandData> verifyMoveCommands(inputs: List<OwnableState>, tx: TransactionForVerification) {
|
||||||
|
// Now check the digital signatures on the move command. Every input has an owning public key, and we must
|
||||||
|
// see a signature from each of those keys. The actual signatures have been verified against the transaction
|
||||||
|
// data by the platform before execution.
|
||||||
|
val owningPubKeys = inputs.map { it.owner }.toSet()
|
||||||
|
val keysThatSigned = tx.commands.requireSingleCommand<T>().signers.toSet()
|
||||||
|
requireThat {
|
||||||
|
"the owning keys are the same as the signing keys" by keysThatSigned.containsAll(owningPubKeys)
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user