From 846d9caa098ede540a1a50492a0d5db757d5dd9d Mon Sep 17 00:00:00 2001 From: Andrius Dagys Date: Fri, 31 Mar 2017 11:08:57 +0100 Subject: [PATCH] Add non-validating Raft notary --- .../net/corda/node/internal/AbstractNode.kt | 1 + .../kotlin/net/corda/node/internal/Node.kt | 3 ++- .../RaftNonValidatingNotaryService.kt | 19 +++++++++++++++++++ 3 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 node/src/main/kotlin/net/corda/node/services/transactions/RaftNonValidatingNotaryService.kt diff --git a/node/src/main/kotlin/net/corda/node/internal/AbstractNode.kt b/node/src/main/kotlin/net/corda/node/internal/AbstractNode.kt index a2efbf5e37..5827d4d74b 100644 --- a/node/src/main/kotlin/net/corda/node/internal/AbstractNode.kt +++ b/node/src/main/kotlin/net/corda/node/internal/AbstractNode.kt @@ -448,6 +448,7 @@ abstract class AbstractNode(open val configuration: NodeConfiguration, return when (type) { SimpleNotaryService.type -> SimpleNotaryService(services, timestampChecker, uniquenessProvider) ValidatingNotaryService.type -> ValidatingNotaryService(services, timestampChecker, uniquenessProvider) + RaftNonValidatingNotaryService.type -> RaftNonValidatingNotaryService(services, timestampChecker, uniquenessProvider as RaftUniquenessProvider) RaftValidatingNotaryService.type -> RaftValidatingNotaryService(services, timestampChecker, uniquenessProvider as RaftUniquenessProvider) BFTNonValidatingNotaryService.type -> with(configuration as FullNodeConfiguration) { val nodeId = notaryNodeId ?: throw IllegalArgumentException("notaryNodeId value must be specified in the configuration") diff --git a/node/src/main/kotlin/net/corda/node/internal/Node.kt b/node/src/main/kotlin/net/corda/node/internal/Node.kt index b69063ff4d..6e0d5433cc 100644 --- a/node/src/main/kotlin/net/corda/node/internal/Node.kt +++ b/node/src/main/kotlin/net/corda/node/internal/Node.kt @@ -25,6 +25,7 @@ import net.corda.node.services.messaging.NodeMessagingClient import net.corda.node.services.transactions.PersistentUniquenessProvider import net.corda.node.services.transactions.RaftUniquenessProvider import net.corda.node.services.transactions.RaftValidatingNotaryService +import net.corda.node.services.transactions.RaftNonValidatingNotaryService import net.corda.node.utilities.AddressUtils import net.corda.node.utilities.AffinityExecutor import net.corda.nodeapi.ArtemisMessagingComponent.NetworkMapAddress @@ -194,7 +195,7 @@ class Node(override val configuration: FullNodeConfiguration, override fun makeUniquenessProvider(type: ServiceType): UniquenessProvider { return when (type) { - RaftValidatingNotaryService.type -> with(configuration) { + RaftValidatingNotaryService.type, RaftNonValidatingNotaryService.type -> with(configuration) { RaftUniquenessProvider(baseDirectory, notaryNodeAddress!!, notaryClusterAddresses, database, configuration) } else -> PersistentUniquenessProvider() diff --git a/node/src/main/kotlin/net/corda/node/services/transactions/RaftNonValidatingNotaryService.kt b/node/src/main/kotlin/net/corda/node/services/transactions/RaftNonValidatingNotaryService.kt new file mode 100644 index 0000000000..0fc78c605a --- /dev/null +++ b/node/src/main/kotlin/net/corda/node/services/transactions/RaftNonValidatingNotaryService.kt @@ -0,0 +1,19 @@ +package net.corda.node.services.transactions + +import net.corda.core.crypto.Party +import net.corda.core.node.services.TimestampChecker +import net.corda.flows.NonValidatingNotaryFlow +import net.corda.node.services.api.ServiceHubInternal + +/** A non-validating notary service operated by a group of mutually trusting parties, uses the Raft algorithm to achieve consensus. */ +class RaftNonValidatingNotaryService(services: ServiceHubInternal, + val timestampChecker: TimestampChecker, + val uniquenessProvider: RaftUniquenessProvider) : NotaryService(services) { + companion object { + val type = SimpleNotaryService.type.getSubType("raft") + } + + override fun createFlow(otherParty: Party): NonValidatingNotaryFlow { + return NonValidatingNotaryFlow(otherParty, timestampChecker, uniquenessProvider) + } +}