Minor: rename BaseTransaction.signers to mustSign to make it a bit clearer what this field is.

This commit is contained in:
Mike Hearn 2016-09-06 16:25:12 +02:00
parent 1d272f89c2
commit 2af6a70b9a
8 changed files with 13 additions and 22 deletions

View File

@ -30,7 +30,7 @@ sealed class TransactionType {
if (notaryKey.size > 1) throw TransactionVerificationException.MoreThanOneNotary(tx) if (notaryKey.size > 1) throw TransactionVerificationException.MoreThanOneNotary(tx)
val requiredKeys = getRequiredSigners(tx) + notaryKey val requiredKeys = getRequiredSigners(tx) + notaryKey
val missing = requiredKeys - tx.signers val missing = requiredKeys - tx.mustSign
return missing return missing
} }

View File

@ -234,7 +234,7 @@ object WireTransactionSerializer : Serializer<WireTransaction>() {
kryo.writeClassAndObject(output, obj.outputs) kryo.writeClassAndObject(output, obj.outputs)
kryo.writeClassAndObject(output, obj.commands) kryo.writeClassAndObject(output, obj.commands)
kryo.writeClassAndObject(output, obj.notary) kryo.writeClassAndObject(output, obj.notary)
kryo.writeClassAndObject(output, obj.signers) kryo.writeClassAndObject(output, obj.mustSign)
kryo.writeClassAndObject(output, obj.type) kryo.writeClassAndObject(output, obj.type)
kryo.writeClassAndObject(output, obj.timestamp) kryo.writeClassAndObject(output, obj.timestamp)
} }

View File

@ -25,7 +25,7 @@ abstract class BaseTransaction(
* transaction until the transaction is verified by using [LedgerTransaction.verify]. It includes the * transaction until the transaction is verified by using [LedgerTransaction.verify]. It includes the
* notary key, if the notary field is set. * notary key, if the notary field is set.
*/ */
val signers: List<PublicKey>, val mustSign: List<PublicKey>,
/** /**
* Pointer to a class that defines the behaviour of this transaction: either normal, or "notary changing". * Pointer to a class that defines the behaviour of this transaction: either normal, or "notary changing".
*/ */
@ -45,9 +45,9 @@ abstract class BaseTransaction(
override fun equals(other: Any?) = override fun equals(other: Any?) =
other is BaseTransaction && other is BaseTransaction &&
notary == other.notary && notary == other.notary &&
signers == other.signers && mustSign == other.mustSign &&
type == other.type && type == other.type &&
timestamp == other.timestamp timestamp == other.timestamp
override fun hashCode() = Objects.hash(notary, signers, type, timestamp) override fun hashCode() = Objects.hash(notary, mustSign, type, timestamp)
} }

View File

@ -89,9 +89,8 @@ data class SignedTransaction(val txBits: SerializedBytes<WireTransaction>,
* Returns the set of missing signatures - a signature must be present for each signer public key. * Returns the set of missing signatures - a signature must be present for each signer public key.
*/ */
private fun getMissingSignatures(): Set<PublicKey> { private fun getMissingSignatures(): Set<PublicKey> {
val requiredKeys = tx.signers.toSet() val requiredKeys = tx.mustSign.toSet()
val sigKeys = sigs.map { it.by }.toSet() val sigKeys = sigs.map { it.by }.toSet()
if (sigKeys.containsAll(requiredKeys)) return emptySet() if (sigKeys.containsAll(requiredKeys)) return emptySet()
return requiredKeys - sigKeys return requiredKeys - sigKeys
} }

View File

@ -77,7 +77,7 @@ class WireTransaction(
services.storageService.attachments.openAttachment(it) ?: throw FileNotFoundException(it.toString()) services.storageService.attachments.openAttachment(it) ?: throw FileNotFoundException(it.toString())
} }
val resolvedInputs = inputs.map { StateAndRef(services.loadState(it), it) } val resolvedInputs = inputs.map { StateAndRef(services.loadState(it), it) }
return LedgerTransaction(resolvedInputs, outputs, authenticatedArgs, attachments, id, notary, signers, timestamp, type) return LedgerTransaction(resolvedInputs, outputs, authenticatedArgs, attachments, id, notary, mustSign, timestamp, type)
} }
override fun toString(): String { override fun toString(): String {

View File

@ -202,7 +202,7 @@ abstract class AbstractStateReplacementProtocol<T> {
private fun checkMySignatureRequired(tx: WireTransaction) { private fun checkMySignatureRequired(tx: WireTransaction) {
// TODO: use keys from the keyManagementService instead // TODO: use keys from the keyManagementService instead
val myKey = serviceHub.storageService.myLegalIdentity.owningKey val myKey = serviceHub.storageService.myLegalIdentity.owningKey
require(tx.signers.contains(myKey)) { "Party is not a participant for any of the input states of transaction ${tx.id}" } require(myKey in tx.mustSign) { "Party is not a participant for any of the input states of transaction ${tx.id}" }
} }
@Suspendable @Suspendable

View File

@ -1,18 +1,11 @@
package com.r3corda.protocols package com.r3corda.protocols
import co.paralleluniverse.fibers.Suspendable import co.paralleluniverse.fibers.Suspendable
import com.google.common.util.concurrent.ListenableFuture
import com.r3corda.core.contracts.ClientToServiceCommand import com.r3corda.core.contracts.ClientToServiceCommand
import com.r3corda.core.transactions.SignedTransaction
import com.r3corda.core.transactions.TransactionBuilder
import com.r3corda.core.transactions.WireTransaction
import com.r3corda.core.crypto.Party import com.r3corda.core.crypto.Party
import com.r3corda.core.node.ServiceHub
import com.r3corda.core.protocols.ProtocolLogic import com.r3corda.core.protocols.ProtocolLogic
import com.r3corda.core.random63BitValue import com.r3corda.core.transactions.SignedTransaction
import com.r3corda.core.serialization.serialize
import com.r3corda.core.utilities.ProgressTracker import com.r3corda.core.utilities.ProgressTracker
import java.util.*
/** /**
@ -57,7 +50,6 @@ class FinalityProtocol(val transaction: SignedTransaction,
subProtocol(BroadcastTransactionProtocol(notarisedTransaction, events, participants)) subProtocol(BroadcastTransactionProtocol(notarisedTransaction, events, participants))
} }
private fun needsNotarySignature(transaction: SignedTransaction) = expectsNotarySignature(transaction.tx) && hasNoNotarySignature(transaction) private fun needsNotarySignature(stx: SignedTransaction) = stx.tx.notary != null && hasNoNotarySignature(stx)
private fun expectsNotarySignature(transaction: WireTransaction) = transaction.notary != null && transaction.notary.owningKey in transaction.signers private fun hasNoNotarySignature(stx: SignedTransaction) = stx.tx.notary?.owningKey !in stx.sigs.map { it.by }
private fun hasNoNotarySignature(transaction: SignedTransaction) = transaction.tx.notary?.owningKey !in transaction.sigs.map { it.by }
} }

View File

@ -314,7 +314,7 @@ data class TestLedgerDSLInterpreter private constructor (
* @return List of [SignedTransaction]s. * @return List of [SignedTransaction]s.
*/ */
fun signAll(transactionsToSign: List<WireTransaction>, extraKeys: List<KeyPair>) = transactionsToSign.map { wtx -> fun signAll(transactionsToSign: List<WireTransaction>, extraKeys: List<KeyPair>) = transactionsToSign.map { wtx ->
check(wtx.signers.isNotEmpty()) check(wtx.mustSign.isNotEmpty())
val bits = wtx.serialize() val bits = wtx.serialize()
require(bits == wtx.serialized) require(bits == wtx.serialized)
val signatures = ArrayList<DigitalSignature.WithKey>() val signatures = ArrayList<DigitalSignature.WithKey>()
@ -323,7 +323,7 @@ fun signAll(transactionsToSign: List<WireTransaction>, extraKeys: List<KeyPair>)
(ALL_TEST_KEYS + extraKeys).forEach { (ALL_TEST_KEYS + extraKeys).forEach {
keyLookup[it.public] = it keyLookup[it.public] = it
} }
wtx.signers.forEach { wtx.mustSign.forEach {
val key = keyLookup[it] ?: throw IllegalArgumentException("Missing required key for ${it.toStringShort()}") val key = keyLookup[it] ?: throw IllegalArgumentException("Missing required key for ${it.toStringShort()}")
signatures += key.signWithECDSA(bits) signatures += key.signWithECDSA(bits)
} }