diff --git a/components/ledger/ledger-consensual-flow/build.gradle b/components/ledger/ledger-consensual-flow/build.gradle index 6fee5226925..08887143774 100644 --- a/components/ledger/ledger-consensual-flow/build.gradle +++ b/components/ledger/ledger-consensual-flow/build.gradle @@ -31,6 +31,7 @@ dependencies { implementation project(':libs:ledger:ledger-consensual-data') implementation project(':libs:ledger:ledger-common-data') implementation project(":libs:serialization:json-validator") + implementation project(":libs:serialization:json-validator-lib") implementation project(':libs:serialization:serialization-checkpoint-api') implementation project(':libs:serialization:serialization-internal') implementation project(':libs:utilities') diff --git a/components/ledger/ledger-consensual-flow/src/main/kotlin/net/corda/ledger/consensual/flow/impl/transaction/factory/ConsensualSignedTransactionFactoryImpl.kt b/components/ledger/ledger-consensual-flow/src/main/kotlin/net/corda/ledger/consensual/flow/impl/transaction/factory/ConsensualSignedTransactionFactoryImpl.kt index 777e7f468ca..720d278db75 100644 --- a/components/ledger/ledger-consensual-flow/src/main/kotlin/net/corda/ledger/consensual/flow/impl/transaction/factory/ConsensualSignedTransactionFactoryImpl.kt +++ b/components/ledger/ledger-consensual-flow/src/main/kotlin/net/corda/ledger/consensual/flow/impl/transaction/factory/ConsensualSignedTransactionFactoryImpl.kt @@ -1,6 +1,5 @@ package net.corda.ledger.consensual.flow.impl.transaction.factory -import net.corda.common.json.validation.JsonValidator import net.corda.ledger.common.data.transaction.TransactionMetadataImpl import net.corda.ledger.common.data.transaction.WireTransaction import net.corda.ledger.common.data.transaction.factory.WireTransactionFactory @@ -14,6 +13,7 @@ import net.corda.ledger.consensual.data.transaction.consensualComponentGroupStru import net.corda.ledger.consensual.data.transaction.verifier.verifyMetadata import net.corda.ledger.consensual.flow.impl.transaction.ConsensualSignedTransactionImpl import net.corda.ledger.consensual.flow.impl.transaction.verifier.ConsensualLedgerTransactionVerifier +import net.corda.libs.json.validator.JsonValidator import net.corda.sandbox.type.UsedByFlow import net.corda.sandboxgroupcontext.CurrentSandboxGroupContext import net.corda.v5.application.crypto.DigitalSignatureAndMetadata diff --git a/components/ledger/ledger-persistence/build.gradle b/components/ledger/ledger-persistence/build.gradle index 8cc32f4d13c..881ba8b3f44 100644 --- a/components/ledger/ledger-persistence/build.gradle +++ b/components/ledger/ledger-persistence/build.gradle @@ -39,10 +39,12 @@ dependencies { implementation project(':libs:messaging:messaging') implementation project(':libs:metrics') implementation project(':libs:serialization:json-validator') + implementation project(':libs:serialization:json-validator-lib') implementation project(':libs:utilities') implementation project(":libs:serialization:serialization-avro") implementation project(":libs:tracing") implementation project(':libs:virtual-node:sandbox-group-context') + implementation project(':libs:ledger-lib-persistence') // TODO This might not be needed if code is refactored so that WireTransactionSerializer is not used and // WireTransaction's ID is sent over wire (doesn't need to be calculated using MerkleTreeFactory) diff --git a/components/ledger/ledger-persistence/src/integrationTest/kotlin/net/corda/ledger/persistence/consensual/tests/ConsensualLedgerRepositoryTest.kt b/components/ledger/ledger-persistence/src/integrationTest/kotlin/net/corda/ledger/persistence/consensual/tests/ConsensualLedgerRepositoryTest.kt index ff7591e7a79..476240884c9 100644 --- a/components/ledger/ledger-persistence/src/integrationTest/kotlin/net/corda/ledger/persistence/consensual/tests/ConsensualLedgerRepositoryTest.kt +++ b/components/ledger/ledger-persistence/src/integrationTest/kotlin/net/corda/ledger/persistence/consensual/tests/ConsensualLedgerRepositoryTest.kt @@ -1,6 +1,5 @@ package net.corda.ledger.persistence.consensual.tests -import net.corda.common.json.validation.JsonValidator import net.corda.cpiinfo.read.CpiInfoReadService import net.corda.crypto.core.SecureHashImpl import net.corda.db.persistence.testkit.components.VirtualNodeService @@ -18,6 +17,7 @@ import net.corda.ledger.persistence.consensual.ConsensualTransactionReader import net.corda.ledger.persistence.consensual.impl.ConsensualPersistenceServiceImpl import net.corda.ledger.persistence.consensual.tests.datamodel.ConsensualEntityFactory import net.corda.ledger.persistence.consensual.tests.datamodel.field +import net.corda.libs.json.validator.JsonValidator import net.corda.orm.utils.transaction import net.corda.persistence.common.getEntityManagerFactory import net.corda.persistence.common.getSerializationService diff --git a/components/ledger/ledger-persistence/src/integrationTest/kotlin/net/corda/ledger/persistence/utxo/tests/UtxoPersistenceServiceImplTest.kt b/components/ledger/ledger-persistence/src/integrationTest/kotlin/net/corda/ledger/persistence/utxo/tests/UtxoPersistenceServiceImplTest.kt index 90953321d3d..9c26cd6904b 100644 --- a/components/ledger/ledger-persistence/src/integrationTest/kotlin/net/corda/ledger/persistence/utxo/tests/UtxoPersistenceServiceImplTest.kt +++ b/components/ledger/ledger-persistence/src/integrationTest/kotlin/net/corda/ledger/persistence/utxo/tests/UtxoPersistenceServiceImplTest.kt @@ -1,11 +1,7 @@ package net.corda.ledger.persistence.utxo.tests -import net.corda.common.json.validation.JsonValidator import net.corda.cpiinfo.read.CpiInfoReadService import net.corda.crypto.core.SecureHashImpl -import net.corda.data.crypto.wire.CryptoSignatureSpec -import net.corda.data.crypto.wire.CryptoSignatureWithKey -import net.corda.data.membership.SignedGroupParameters import net.corda.db.persistence.testkit.components.VirtualNodeService import net.corda.db.testkit.DbUtils import net.corda.ledger.common.data.transaction.PrivacySalt @@ -26,14 +22,17 @@ import net.corda.ledger.common.testkit.cpiPackageSummaryExample import net.corda.ledger.common.testkit.cpkPackageSummaryListExample import net.corda.ledger.common.testkit.getPrivacySalt import net.corda.ledger.common.testkit.getSignatureWithMetadataExample +import net.corda.ledger.libs.persistence.json.ContractStateVaultJsonFactoryRegistry +import net.corda.ledger.libs.persistence.utxo.CustomRepresentation +import net.corda.ledger.libs.persistence.utxo.SignatureSpec +import net.corda.ledger.libs.persistence.utxo.SignatureWithKey +import net.corda.ledger.libs.persistence.utxo.SignedGroupParameters +import net.corda.ledger.libs.persistence.utxo.UtxoPersistenceService +import net.corda.ledger.libs.persistence.utxo.UtxoRepository +import net.corda.ledger.libs.persistence.utxo.UtxoTransactionReader +import net.corda.ledger.libs.persistence.utxo.impl.UtxoPersistenceServiceImpl import net.corda.ledger.persistence.consensual.tests.datamodel.field -import net.corda.ledger.persistence.json.ContractStateVaultJsonFactoryRegistry import net.corda.ledger.persistence.json.impl.DefaultContractStateVaultJsonFactoryImpl -import net.corda.ledger.persistence.utxo.CustomRepresentation -import net.corda.ledger.persistence.utxo.UtxoPersistenceService -import net.corda.ledger.persistence.utxo.UtxoRepository -import net.corda.ledger.persistence.utxo.UtxoTransactionReader -import net.corda.ledger.persistence.utxo.impl.UtxoPersistenceServiceImpl import net.corda.ledger.persistence.utxo.tests.datamodel.UtxoEntityFactory import net.corda.ledger.utxo.data.state.StateAndRefImpl import net.corda.ledger.utxo.data.transaction.SignedLedgerTransactionContainer @@ -45,6 +44,7 @@ import net.corda.ledger.utxo.data.transaction.UtxoOutputInfoComponent import net.corda.ledger.utxo.data.transaction.UtxoTransactionMetadata import net.corda.ledger.utxo.data.transaction.UtxoVisibleTransactionOutputDto import net.corda.ledger.utxo.data.transaction.utxoComponentGroupStructure +import net.corda.libs.json.validator.JsonValidator import net.corda.libs.packaging.hash import net.corda.orm.utils.transaction import net.corda.persistence.common.getEntityManagerFactory @@ -93,7 +93,6 @@ import org.osgi.test.common.annotation.InjectService import org.osgi.test.junit5.context.BundleContextExtension import org.osgi.test.junit5.service.ServiceExtension import java.math.BigDecimal -import java.nio.ByteBuffer import java.nio.file.Path import java.security.KeyPairGenerator import java.security.MessageDigest @@ -590,28 +589,25 @@ class UtxoPersistenceServiceImplTest { @Test fun `persist and find signed group parameter`() { val signedGroupParameters = SignedGroupParameters( - ByteBuffer.wrap(ByteArray(1)), - CryptoSignatureWithKey( - ByteBuffer.wrap(ByteArray(1)), - ByteBuffer.wrap(ByteArray(1)) - ), - CryptoSignatureSpec("", null, null) + ByteArray(1), + SignatureWithKey(ByteArray(1), ByteArray(1)), + SignatureSpec("", null, null) ) - - val hash = signedGroupParameters.groupParameters.array().hash(DigestAlgorithmName.SHA2_256).toString() + val hash = signedGroupParameters.groupParameters.hash(DigestAlgorithmName.SHA2_256).toString() persistenceService.persistSignedGroupParametersIfDoNotExist(signedGroupParameters) val persistedSignedGroupParameters = persistenceService.findSignedGroupParameters(hash) + // Compare byte arrays using contentEquals instead of toString() assertThat( - persistedSignedGroupParameters?.mgmSignature?.publicKey.toString() - ) - .isEqualTo(signedGroupParameters.mgmSignature?.publicKey.toString()) + persistedSignedGroupParameters?.mgmSignature?.publicKey?.contentEquals(signedGroupParameters.mgmSignature.publicKey) + ).isTrue() // this will check if the byte arrays have the same content + + // Compare signature spec directly (you can use toString() if it's a standard POJO) assertThat( persistedSignedGroupParameters?.mgmSignatureSpec.toString() - ) - .isEqualTo(signedGroupParameters.mgmSignatureSpec.toString()) + ).isEqualTo(signedGroupParameters.mgmSignatureSpec.toString()) } @Test diff --git a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/consensual/impl/ConsensualComponentGroupMapper.kt b/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/consensual/impl/ConsensualComponentGroupMapper.kt index f72472bede1..502ea445246 100644 --- a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/consensual/impl/ConsensualComponentGroupMapper.kt +++ b/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/consensual/impl/ConsensualComponentGroupMapper.kt @@ -1,6 +1,6 @@ package net.corda.ledger.persistence.consensual.impl -import net.corda.ledger.persistence.common.ComponentGroupMapper +import net.corda.ledger.libs.persistence.common.ComponentGroupMapper import javax.persistence.Tuple /** diff --git a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/consensual/impl/ConsensualRepositoryImpl.kt b/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/consensual/impl/ConsensualRepositoryImpl.kt index 9a7c340cabf..964442b4e41 100644 --- a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/consensual/impl/ConsensualRepositoryImpl.kt +++ b/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/consensual/impl/ConsensualRepositoryImpl.kt @@ -4,7 +4,7 @@ import net.corda.ledger.common.data.transaction.PrivacySaltImpl import net.corda.ledger.common.data.transaction.SignedTransactionContainer import net.corda.ledger.common.data.transaction.TransactionStatus import net.corda.ledger.common.data.transaction.factory.WireTransactionFactory -import net.corda.ledger.persistence.common.mapToComponentGroups +import net.corda.ledger.libs.persistence.common.mapToComponentGroups import net.corda.ledger.persistence.consensual.ConsensualRepository import net.corda.sandbox.type.SandboxConstants.CORDA_MARKER_ONLY_SERVICE import net.corda.sandbox.type.UsedByPersistence diff --git a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/json/impl/ContractStateVaultJsonFactoryProvider.kt b/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/json/impl/ContractStateVaultJsonFactoryProvider.kt index 855850775ac..c4c8f957c55 100644 --- a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/json/impl/ContractStateVaultJsonFactoryProvider.kt +++ b/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/json/impl/ContractStateVaultJsonFactoryProvider.kt @@ -1,6 +1,6 @@ package net.corda.ledger.persistence.json.impl -import net.corda.ledger.persistence.json.ContractStateVaultJsonFactoryRegistry +import net.corda.ledger.libs.persistence.json.ContractStateVaultJsonFactoryRegistry import net.corda.sandbox.type.SandboxConstants import net.corda.sandbox.type.UsedByPersistence import net.corda.sandboxgroupcontext.CustomMetadataConsumer diff --git a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/json/impl/ContractStateVaultJsonFactoryRegistryImpl.kt b/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/json/impl/ContractStateVaultJsonFactoryRegistryImpl.kt index 0e86ce6f370..dd491d2f673 100644 --- a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/json/impl/ContractStateVaultJsonFactoryRegistryImpl.kt +++ b/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/json/impl/ContractStateVaultJsonFactoryRegistryImpl.kt @@ -1,6 +1,6 @@ package net.corda.ledger.persistence.json.impl -import net.corda.ledger.persistence.json.ContractStateVaultJsonFactoryRegistry +import net.corda.ledger.libs.persistence.json.ContractStateVaultJsonFactoryRegistry import net.corda.sandbox.type.UsedByPersistence import net.corda.v5.ledger.utxo.ContractState import net.corda.v5.ledger.utxo.query.json.ContractStateVaultJsonFactory diff --git a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/json/impl/DefaultContractStateVaultJsonFactoryImpl.kt b/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/json/impl/DefaultContractStateVaultJsonFactoryImpl.kt index 97ff37a3d51..0d41146f678 100644 --- a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/json/impl/DefaultContractStateVaultJsonFactoryImpl.kt +++ b/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/json/impl/DefaultContractStateVaultJsonFactoryImpl.kt @@ -1,6 +1,6 @@ package net.corda.ledger.persistence.json.impl -import net.corda.ledger.persistence.json.DefaultContractStateVaultJsonFactory +import net.corda.ledger.libs.persistence.json.DefaultContractStateVaultJsonFactory import net.corda.v5.application.marshalling.JsonMarshallingService import net.corda.v5.ledger.utxo.StateAndRef diff --git a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/processor/LedgerPersistenceRequestProcessor.kt b/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/processor/LedgerPersistenceRequestProcessor.kt index 78add5e0dbb..ec6bae33b23 100644 --- a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/processor/LedgerPersistenceRequestProcessor.kt +++ b/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/processor/LedgerPersistenceRequestProcessor.kt @@ -4,7 +4,7 @@ import net.corda.crypto.core.parseSecureHash import net.corda.data.flow.event.FlowEvent import net.corda.data.ledger.persistence.LedgerPersistenceRequest import net.corda.flow.utils.toMap -import net.corda.ledger.persistence.common.InconsistentLedgerStateException +import net.corda.ledger.libs.persistence.common.InconsistentLedgerStateException import net.corda.ledger.persistence.common.UnsupportedLedgerTypeException import net.corda.ledger.persistence.common.UnsupportedRequestTypeException import net.corda.messaging.api.processor.SyncRPCProcessor diff --git a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/PostgresUtxoOsgiQueryProvider.kt b/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/PostgresUtxoOsgiQueryProvider.kt new file mode 100644 index 00000000000..cc67b8445fc --- /dev/null +++ b/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/PostgresUtxoOsgiQueryProvider.kt @@ -0,0 +1,27 @@ +package net.corda.ledger.persistence.utxo.impl + +import net.corda.ledger.libs.persistence.utxo.impl.PostgresUtxoQueryProvider +import net.corda.ledger.libs.persistence.utxo.impl.UtxoQueryProvider +import net.corda.orm.DatabaseTypeProvider +import net.corda.orm.DatabaseTypeProvider.Companion.POSTGRES_TYPE_FILTER +import net.corda.utilities.debug +import org.osgi.service.component.annotations.Activate +import org.osgi.service.component.annotations.Component +import org.osgi.service.component.annotations.Reference +import org.slf4j.LoggerFactory + +@Suppress("unused") +@Component(service = [ UtxoQueryProvider::class ]) +class PostgresUtxoOsgiQueryProvider( + databaseTypeProvider: DatabaseTypeProvider, + delegate: UtxoQueryProvider +) : UtxoQueryProvider by delegate { + init { + LoggerFactory.getLogger(this::class.java).debug { "Activated for ${databaseTypeProvider.databaseType}" } + } + + @Activate constructor( + @Reference(target = POSTGRES_TYPE_FILTER) + databaseTypeProvider: DatabaseTypeProvider + ) : this(databaseTypeProvider, PostgresUtxoQueryProvider()) +} diff --git a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/UtxoRepositoryOsgiImpl.kt b/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/UtxoRepositoryOsgiImpl.kt new file mode 100644 index 00000000000..2b498db1c75 --- /dev/null +++ b/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/UtxoRepositoryOsgiImpl.kt @@ -0,0 +1,38 @@ +package net.corda.ledger.persistence.utxo.impl + +import net.corda.db.core.utils.BatchPersistenceServiceImpl +import net.corda.ledger.common.data.transaction.factory.WireTransactionFactory +import net.corda.ledger.libs.persistence.utxo.UtxoRepository +import net.corda.ledger.libs.persistence.utxo.impl.UtxoQueryProvider +import net.corda.ledger.libs.persistence.utxo.impl.UtxoRepositoryImpl +import net.corda.sandbox.type.SandboxConstants.CORDA_MARKER_ONLY_SERVICE +import net.corda.sandbox.type.UsedByPersistence +import net.corda.v5.application.serialization.SerializationService +import org.osgi.service.component.annotations.Activate +import org.osgi.service.component.annotations.Component +import org.osgi.service.component.annotations.Reference +import org.osgi.service.component.annotations.ServiceScope.PROTOTYPE + +/** + * Reads and writes ledger transaction data to and from the virtual node vault database. + * The component only exists to be created inside a PERSISTENCE sandbox. We denote it + * as "corda.marker.only" to force the sandbox to create it, despite it implementing + * only the [UsedByPersistence] marker interface. + */ +@Component( + service = [ UtxoRepository::class, UsedByPersistence::class ], + property = [ CORDA_MARKER_ONLY_SERVICE ], + scope = PROTOTYPE +) +class UtxoRepositoryOsgiImpl(delegate: UtxoRepository) : UtxoRepository by delegate, UsedByPersistence { + @Suppress("Unused") + @Activate + constructor( + @Reference(service = SerializationService::class) + serializationService: SerializationService, + @Reference(service = WireTransactionFactory::class) + wireTransactionFactory: WireTransactionFactory, + @Reference(service = UtxoQueryProvider::class) + queryProvider: UtxoQueryProvider + ) : this(UtxoRepositoryImpl(BatchPersistenceServiceImpl(), serializationService, wireTransactionFactory, queryProvider)) +} diff --git a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/UtxoRequestHandlerSelectorImpl.kt b/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/UtxoRequestHandlerSelectorImpl.kt index 50cb6ab7305..8dd8aaf97a2 100644 --- a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/UtxoRequestHandlerSelectorImpl.kt +++ b/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/UtxoRequestHandlerSelectorImpl.kt @@ -19,6 +19,7 @@ import net.corda.data.ledger.persistence.ResolveStateRefs import net.corda.data.ledger.persistence.UpdateTransactionStatus import net.corda.data.persistence.FindWithNamedQuery import net.corda.flow.external.events.responses.factory.ExternalEventResponseFactory +import net.corda.ledger.libs.persistence.utxo.impl.UtxoPersistenceServiceImpl import net.corda.ledger.persistence.common.RequestHandler import net.corda.ledger.persistence.common.UnsupportedRequestTypeException import net.corda.ledger.persistence.json.impl.DefaultContractStateVaultJsonFactoryImpl diff --git a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/UtxoTransactionReaderImpl.kt b/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/UtxoTransactionReaderImpl.kt index 13a91968b31..262080d0d49 100644 --- a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/UtxoTransactionReaderImpl.kt +++ b/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/UtxoTransactionReaderImpl.kt @@ -8,9 +8,9 @@ import net.corda.ledger.common.data.transaction.SignedTransactionContainer import net.corda.ledger.common.data.transaction.TransactionMetadataInternal import net.corda.ledger.common.data.transaction.TransactionStatus import net.corda.ledger.common.data.transaction.TransactionStatus.Companion.toTransactionStatus +import net.corda.ledger.libs.persistence.utxo.UtxoPersistenceService +import net.corda.ledger.libs.persistence.utxo.UtxoTransactionReader import net.corda.ledger.persistence.common.LedgerPersistenceUtils.findAccount -import net.corda.ledger.persistence.utxo.UtxoPersistenceService -import net.corda.ledger.persistence.utxo.UtxoTransactionReader import net.corda.ledger.utxo.data.state.cast import net.corda.ledger.utxo.data.transaction.UtxoComponentGroup import net.corda.ledger.utxo.data.transaction.UtxoVisibleTransactionOutputDto diff --git a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoFindFilteredTransactionsAndSignaturesRequestHandler.kt b/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoFindFilteredTransactionsAndSignaturesRequestHandler.kt index 17d3282a8a9..bffe424877e 100644 --- a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoFindFilteredTransactionsAndSignaturesRequestHandler.kt +++ b/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoFindFilteredTransactionsAndSignaturesRequestHandler.kt @@ -3,9 +3,9 @@ package net.corda.ledger.persistence.utxo.impl.request.handlers import net.corda.crypto.core.SecureHashImpl import net.corda.data.flow.event.external.ExternalEventContext import net.corda.data.ledger.persistence.FindFilteredTransactionsAndSignatures +import net.corda.ledger.libs.persistence.utxo.UtxoPersistenceService import net.corda.ledger.persistence.common.RequestHandler import net.corda.ledger.persistence.utxo.UtxoOutputRecordFactory -import net.corda.ledger.persistence.utxo.UtxoPersistenceService import net.corda.messaging.api.records.Record import net.corda.v5.ledger.utxo.StateRef diff --git a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoFindSignedGroupParametersRequestHandler.kt b/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoFindSignedGroupParametersRequestHandler.kt index 8cf7991040c..ae27a0c4f96 100644 --- a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoFindSignedGroupParametersRequestHandler.kt +++ b/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoFindSignedGroupParametersRequestHandler.kt @@ -1,13 +1,19 @@ package net.corda.ledger.persistence.utxo.impl.request.handlers +import net.corda.data.crypto.wire.CryptoSignatureParameterSpec +import net.corda.data.crypto.wire.CryptoSignatureSpec +import net.corda.data.crypto.wire.CryptoSignatureWithKey import net.corda.data.flow.event.FlowEvent import net.corda.data.flow.event.external.ExternalEventContext import net.corda.data.ledger.persistence.FindSignedGroupParameters import net.corda.data.ledger.persistence.FindSignedGroupParametersResponse +import net.corda.ledger.libs.persistence.utxo.SignedGroupParameters +import net.corda.ledger.libs.persistence.utxo.UtxoPersistenceService import net.corda.ledger.persistence.common.RequestHandler -import net.corda.ledger.persistence.utxo.UtxoPersistenceService import net.corda.messaging.api.records.Record import net.corda.persistence.common.ResponseFactory +import java.nio.ByteBuffer +import net.corda.data.membership.SignedGroupParameters as SignedGroupParametersAvro class UtxoFindSignedGroupParametersRequestHandler( private val findSignedGroupParameters: FindSignedGroupParameters, @@ -19,13 +25,29 @@ class UtxoFindSignedGroupParametersRequestHandler( val signedGroupParameters = persistenceService.findSignedGroupParameters( findSignedGroupParameters.hash, ) + return listOf( responseFactory.successResponse( externalEventContext, FindSignedGroupParametersResponse( - listOfNotNull(signedGroupParameters) + listOfNotNull(signedGroupParameters?.toAvro()) ) ) ) } } + +private fun SignedGroupParameters.toAvro(): SignedGroupParametersAvro { + return SignedGroupParametersAvro( + ByteBuffer.wrap(groupParameters), + CryptoSignatureWithKey(ByteBuffer.wrap(mgmSignature.publicKey), ByteBuffer.wrap(mgmSignature.bytes)), + CryptoSignatureSpec( + mgmSignatureSpec.signatureName, + mgmSignatureSpec.customDigestName, + CryptoSignatureParameterSpec( + mgmSignatureSpec.params?.javaClass?.name, + ByteBuffer.wrap(mgmSignatureSpec.params) + ) + ) + ) +} diff --git a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoFindSignedLedgerTransactionRequestHandler.kt b/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoFindSignedLedgerTransactionRequestHandler.kt index 3913960acd4..fdd43d41765 100644 --- a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoFindSignedLedgerTransactionRequestHandler.kt +++ b/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoFindSignedLedgerTransactionRequestHandler.kt @@ -3,9 +3,9 @@ package net.corda.ledger.persistence.utxo.impl.request.handlers import net.corda.data.flow.event.external.ExternalEventContext import net.corda.data.ledger.persistence.FindSignedLedgerTransaction import net.corda.ledger.common.data.transaction.TransactionStatus.Companion.toTransactionStatus +import net.corda.ledger.libs.persistence.utxo.UtxoPersistenceService import net.corda.ledger.persistence.common.RequestHandler import net.corda.ledger.persistence.utxo.UtxoOutputRecordFactory -import net.corda.ledger.persistence.utxo.UtxoPersistenceService import net.corda.messaging.api.records.Record class UtxoFindSignedLedgerTransactionRequestHandler( diff --git a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoFindSignedTransactionIdsAndStatusesRequestHandler.kt b/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoFindSignedTransactionIdsAndStatusesRequestHandler.kt index 93c92da6445..dd492df4abc 100644 --- a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoFindSignedTransactionIdsAndStatusesRequestHandler.kt +++ b/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoFindSignedTransactionIdsAndStatusesRequestHandler.kt @@ -5,8 +5,8 @@ import net.corda.data.flow.event.external.ExternalEventContext import net.corda.data.ledger.persistence.FindTransactionIdsAndStatuses import net.corda.data.persistence.EntityResponse import net.corda.flow.external.events.responses.factory.ExternalEventResponseFactory +import net.corda.ledger.libs.persistence.utxo.UtxoPersistenceService import net.corda.ledger.persistence.common.RequestHandler -import net.corda.ledger.persistence.utxo.UtxoPersistenceService import net.corda.messaging.api.records.Record import net.corda.v5.application.serialization.SerializationService import java.nio.ByteBuffer diff --git a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoFindTransactionRequestHandler.kt b/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoFindTransactionRequestHandler.kt index 76ffb3c4ae7..3cd43fdcfc7 100644 --- a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoFindTransactionRequestHandler.kt +++ b/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoFindTransactionRequestHandler.kt @@ -3,9 +3,9 @@ package net.corda.ledger.persistence.utxo.impl.request.handlers import net.corda.data.flow.event.external.ExternalEventContext import net.corda.data.ledger.persistence.FindTransaction import net.corda.ledger.common.data.transaction.TransactionStatus.Companion.toTransactionStatus +import net.corda.ledger.libs.persistence.utxo.UtxoPersistenceService import net.corda.ledger.persistence.common.RequestHandler import net.corda.ledger.persistence.utxo.UtxoOutputRecordFactory -import net.corda.ledger.persistence.utxo.UtxoPersistenceService import net.corda.messaging.api.records.Record class UtxoFindTransactionRequestHandler( diff --git a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoFindTransactionsWithStatusCreatedBetweenTimeRequestHandler.kt b/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoFindTransactionsWithStatusCreatedBetweenTimeRequestHandler.kt index b2f2c77db09..99aa2657873 100644 --- a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoFindTransactionsWithStatusCreatedBetweenTimeRequestHandler.kt +++ b/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoFindTransactionsWithStatusCreatedBetweenTimeRequestHandler.kt @@ -6,8 +6,8 @@ import net.corda.data.ledger.persistence.FindTransactionsWithStatusCreatedBetwee import net.corda.data.persistence.EntityResponse import net.corda.flow.external.events.responses.factory.ExternalEventResponseFactory import net.corda.ledger.common.data.transaction.TransactionStatus.Companion.toTransactionStatus +import net.corda.ledger.libs.persistence.utxo.UtxoPersistenceService import net.corda.ledger.persistence.common.RequestHandler -import net.corda.ledger.persistence.utxo.UtxoPersistenceService import net.corda.messaging.api.records.Record import net.corda.v5.application.serialization.SerializationService import java.nio.ByteBuffer diff --git a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoFindUnconsumedStatesByTypeRequestHandler.kt b/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoFindUnconsumedStatesByTypeRequestHandler.kt index 975d2f9bb1a..03c5fb2ef75 100644 --- a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoFindUnconsumedStatesByTypeRequestHandler.kt +++ b/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoFindUnconsumedStatesByTypeRequestHandler.kt @@ -2,9 +2,9 @@ package net.corda.ledger.persistence.utxo.impl.request.handlers import net.corda.data.flow.event.external.ExternalEventContext import net.corda.data.ledger.persistence.FindUnconsumedStatesByType +import net.corda.ledger.libs.persistence.utxo.UtxoPersistenceService import net.corda.ledger.persistence.common.RequestHandler import net.corda.ledger.persistence.utxo.UtxoOutputRecordFactory -import net.corda.ledger.persistence.utxo.UtxoPersistenceService import net.corda.messaging.api.records.Record import net.corda.sandboxgroupcontext.SandboxGroupContext import net.corda.v5.ledger.utxo.ContractState diff --git a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoIncrementTransactionRepairAttemptCountRequestHandler.kt b/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoIncrementTransactionRepairAttemptCountRequestHandler.kt index d2d2ac40994..b47bc9fa5b4 100644 --- a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoIncrementTransactionRepairAttemptCountRequestHandler.kt +++ b/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoIncrementTransactionRepairAttemptCountRequestHandler.kt @@ -5,8 +5,8 @@ import net.corda.data.flow.event.external.ExternalEventContext import net.corda.data.ledger.persistence.IncrementTransactionRepairAttemptCount import net.corda.data.persistence.EntityResponse import net.corda.flow.external.events.responses.factory.ExternalEventResponseFactory +import net.corda.ledger.libs.persistence.utxo.UtxoPersistenceService import net.corda.ledger.persistence.common.RequestHandler -import net.corda.ledger.persistence.utxo.UtxoPersistenceService import net.corda.messaging.api.records.Record class UtxoIncrementTransactionRepairAttemptCountRequestHandler( diff --git a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoPersistFilteredTransactionRequestHandler.kt b/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoPersistFilteredTransactionRequestHandler.kt index c9d6d10f13c..437837f29e5 100644 --- a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoPersistFilteredTransactionRequestHandler.kt +++ b/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoPersistFilteredTransactionRequestHandler.kt @@ -7,9 +7,9 @@ import net.corda.data.ledger.persistence.PersistFilteredTransactionsAndSignature import net.corda.data.persistence.EntityResponse import net.corda.flow.external.events.responses.factory.ExternalEventResponseFactory import net.corda.ledger.common.data.transaction.filtered.FilteredTransaction +import net.corda.ledger.libs.persistence.utxo.UtxoPersistenceService import net.corda.ledger.persistence.common.LedgerPersistenceUtils.findAccount import net.corda.ledger.persistence.common.RequestHandler -import net.corda.ledger.persistence.utxo.UtxoPersistenceService import net.corda.messaging.api.records.Record import net.corda.utilities.serialization.deserialize import net.corda.v5.application.crypto.DigitalSignatureAndMetadata diff --git a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoPersistSignedGroupParametersIfDoNotExistRequestHandler.kt b/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoPersistSignedGroupParametersIfDoNotExistRequestHandler.kt index 5042bf6e842..781b94e81e1 100644 --- a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoPersistSignedGroupParametersIfDoNotExistRequestHandler.kt +++ b/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoPersistSignedGroupParametersIfDoNotExistRequestHandler.kt @@ -5,9 +5,13 @@ import net.corda.data.flow.event.external.ExternalEventContext import net.corda.data.ledger.persistence.PersistSignedGroupParametersIfDoNotExist import net.corda.data.persistence.EntityResponse import net.corda.flow.external.events.responses.factory.ExternalEventResponseFactory +import net.corda.ledger.libs.persistence.utxo.SignatureSpec +import net.corda.ledger.libs.persistence.utxo.SignatureWithKey +import net.corda.ledger.libs.persistence.utxo.SignedGroupParameters +import net.corda.ledger.libs.persistence.utxo.UtxoPersistenceService import net.corda.ledger.persistence.common.RequestHandler -import net.corda.ledger.persistence.utxo.UtxoPersistenceService import net.corda.messaging.api.records.Record +import net.corda.data.membership.SignedGroupParameters as SignedGroupParametersAvro class UtxoPersistSignedGroupParametersIfDoNotExistRequestHandler( private val persistSignedGroupParametersIfDoNotExist: PersistSignedGroupParametersIfDoNotExist, @@ -23,7 +27,8 @@ class UtxoPersistSignedGroupParametersIfDoNotExistRequestHandler( requireNotNull(persistSignedGroupParametersIfDoNotExist.signedGroupParameters.mgmSignatureSpec) { "SignedGroupParameters needs a signature specification." } - persistenceService.persistSignedGroupParametersIfDoNotExist(persistSignedGroupParametersIfDoNotExist.signedGroupParameters) + val signedGroupParameters = persistSignedGroupParametersIfDoNotExist.signedGroupParameters + persistenceService.persistSignedGroupParametersIfDoNotExist(signedGroupParameters.toCorda()) return listOf( externalEventResponseFactory.success( @@ -33,3 +38,15 @@ class UtxoPersistSignedGroupParametersIfDoNotExistRequestHandler( ) } } + +private fun SignedGroupParametersAvro.toCorda(): SignedGroupParameters { + return SignedGroupParameters( + groupParameters.array(), + SignatureWithKey(mgmSignature.publicKey.array(), mgmSignature.bytes.array()), + SignatureSpec( + mgmSignatureSpec.signatureName, + mgmSignatureSpec.customDigestName, + mgmSignatureSpec.params?.bytes?.array() + ) + ) +} diff --git a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoPersistTransactionIfDoesNotExistRequestHandler.kt b/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoPersistTransactionIfDoesNotExistRequestHandler.kt index 8cee4eeb443..20e49637192 100644 --- a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoPersistTransactionIfDoesNotExistRequestHandler.kt +++ b/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoPersistTransactionIfDoesNotExistRequestHandler.kt @@ -1,10 +1,10 @@ package net.corda.ledger.persistence.utxo.impl.request.handlers import net.corda.data.flow.event.external.ExternalEventContext +import net.corda.ledger.libs.persistence.utxo.UtxoPersistenceService +import net.corda.ledger.libs.persistence.utxo.UtxoTransactionReader import net.corda.ledger.persistence.common.RequestHandler import net.corda.ledger.persistence.utxo.UtxoOutputRecordFactory -import net.corda.ledger.persistence.utxo.UtxoPersistenceService -import net.corda.ledger.persistence.utxo.UtxoTransactionReader import net.corda.messaging.api.records.Record class UtxoPersistTransactionIfDoesNotExistRequestHandler( diff --git a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoPersistTransactionRequestHandler.kt b/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoPersistTransactionRequestHandler.kt index f99bc387b64..34b1976741e 100644 --- a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoPersistTransactionRequestHandler.kt +++ b/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoPersistTransactionRequestHandler.kt @@ -1,11 +1,11 @@ package net.corda.ledger.persistence.utxo.impl.request.handlers import net.corda.data.flow.event.external.ExternalEventContext +import net.corda.ledger.libs.persistence.utxo.UtxoPersistenceService +import net.corda.ledger.libs.persistence.utxo.UtxoTransactionReader import net.corda.ledger.persistence.common.RequestHandler import net.corda.ledger.persistence.utxo.UtxoOutputRecordFactory -import net.corda.ledger.persistence.utxo.UtxoPersistenceService import net.corda.ledger.persistence.utxo.UtxoTokenObserverMap -import net.corda.ledger.persistence.utxo.UtxoTransactionReader import net.corda.ledger.persistence.utxo.impl.TokenStateObserverContextImpl import net.corda.messaging.api.records.Record import net.corda.v5.application.crypto.DigestService diff --git a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoPersistTransactionSignaturesRequestHandler.kt b/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoPersistTransactionSignaturesRequestHandler.kt index 5b5a3923953..4527a71628a 100644 --- a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoPersistTransactionSignaturesRequestHandler.kt +++ b/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoPersistTransactionSignaturesRequestHandler.kt @@ -5,8 +5,8 @@ import net.corda.data.flow.event.external.ExternalEventContext import net.corda.data.ledger.persistence.PersistTransactionSignatures import net.corda.data.persistence.EntityResponse import net.corda.flow.external.events.responses.factory.ExternalEventResponseFactory +import net.corda.ledger.libs.persistence.utxo.UtxoPersistenceService import net.corda.ledger.persistence.common.RequestHandler -import net.corda.ledger.persistence.utxo.UtxoPersistenceService import net.corda.messaging.api.records.Record class UtxoPersistTransactionSignaturesRequestHandler( diff --git a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoResolveStateRefsRequestHandler.kt b/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoResolveStateRefsRequestHandler.kt index 49020c8a774..a2c2303db41 100644 --- a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoResolveStateRefsRequestHandler.kt +++ b/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoResolveStateRefsRequestHandler.kt @@ -3,9 +3,9 @@ package net.corda.ledger.persistence.utxo.impl.request.handlers import net.corda.crypto.core.SecureHashImpl import net.corda.data.flow.event.external.ExternalEventContext import net.corda.data.ledger.persistence.ResolveStateRefs +import net.corda.ledger.libs.persistence.utxo.UtxoPersistenceService import net.corda.ledger.persistence.common.RequestHandler import net.corda.ledger.persistence.utxo.UtxoOutputRecordFactory -import net.corda.ledger.persistence.utxo.UtxoPersistenceService import net.corda.messaging.api.records.Record import net.corda.v5.ledger.utxo.StateRef diff --git a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoUpdateTransactionStatusRequestHandler.kt b/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoUpdateTransactionStatusRequestHandler.kt index 537996c009a..6e8b0ad0e85 100644 --- a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoUpdateTransactionStatusRequestHandler.kt +++ b/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/request/handlers/UtxoUpdateTransactionStatusRequestHandler.kt @@ -6,8 +6,8 @@ import net.corda.data.ledger.persistence.UpdateTransactionStatus import net.corda.data.persistence.EntityResponse import net.corda.flow.external.events.responses.factory.ExternalEventResponseFactory import net.corda.ledger.common.data.transaction.TransactionStatus.Companion.toTransactionStatus +import net.corda.ledger.libs.persistence.utxo.UtxoPersistenceService import net.corda.ledger.persistence.common.RequestHandler -import net.corda.ledger.persistence.utxo.UtxoPersistenceService import net.corda.messaging.api.records.Record class UtxoUpdateTransactionStatusRequestHandler( diff --git a/components/ledger/ledger-persistence/src/test/kotlin/net/corda/ledger/persistence/consensual/ConsensualComponentGroupMapperTest.kt b/components/ledger/ledger-persistence/src/test/kotlin/net/corda/ledger/persistence/consensual/ConsensualComponentGroupMapperTest.kt index 80cc00414d0..94a5c89f44f 100644 --- a/components/ledger/ledger-persistence/src/test/kotlin/net/corda/ledger/persistence/consensual/ConsensualComponentGroupMapperTest.kt +++ b/components/ledger/ledger-persistence/src/test/kotlin/net/corda/ledger/persistence/consensual/ConsensualComponentGroupMapperTest.kt @@ -1,6 +1,6 @@ package net.corda.ledger.persistence.consensual -import net.corda.ledger.persistence.common.mapToComponentGroups +import net.corda.ledger.libs.persistence.common.mapToComponentGroups import net.corda.ledger.persistence.consensual.impl.ConsensualComponentGroupMapper import org.assertj.core.api.Assertions.assertThat import org.junit.jupiter.api.Assertions.assertEquals diff --git a/components/ledger/ledger-persistence/src/test/kotlin/net/corda/ledger/persistence/utxo/UtxoComponentGroupMapperTest.kt b/components/ledger/ledger-persistence/src/test/kotlin/net/corda/ledger/persistence/utxo/UtxoComponentGroupMapperTest.kt index 82f63ca3518..7af2e7441a6 100644 --- a/components/ledger/ledger-persistence/src/test/kotlin/net/corda/ledger/persistence/utxo/UtxoComponentGroupMapperTest.kt +++ b/components/ledger/ledger-persistence/src/test/kotlin/net/corda/ledger/persistence/utxo/UtxoComponentGroupMapperTest.kt @@ -1,7 +1,7 @@ package net.corda.ledger.persistence.utxo -import net.corda.ledger.persistence.common.mapToComponentGroups -import net.corda.ledger.persistence.utxo.impl.UtxoComponentGroupMapper +import net.corda.ledger.libs.persistence.common.mapToComponentGroups +import net.corda.ledger.libs.persistence.utxo.impl.UtxoComponentGroupMapper import org.assertj.core.api.Assertions.assertThat import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test diff --git a/components/ledger/ledger-persistence/src/test/kotlin/net/corda/ledger/persistence/utxo/impl/UtxoPersistenceServiceImplTest.kt b/components/ledger/ledger-persistence/src/test/kotlin/net/corda/ledger/persistence/utxo/impl/UtxoPersistenceServiceImplTest.kt index d71ac0fcd16..d7f1413cc6f 100644 --- a/components/ledger/ledger-persistence/src/test/kotlin/net/corda/ledger/persistence/utxo/impl/UtxoPersistenceServiceImplTest.kt +++ b/components/ledger/ledger-persistence/src/test/kotlin/net/corda/ledger/persistence/utxo/impl/UtxoPersistenceServiceImplTest.kt @@ -8,12 +8,13 @@ import net.corda.crypto.testkit.SecureHashUtils.randomSecureHash import net.corda.ledger.common.data.transaction.PrivacySalt import net.corda.ledger.common.data.transaction.TransactionMetadataImpl import net.corda.ledger.common.data.transaction.TransactionStatus -import net.corda.ledger.persistence.json.DefaultContractStateVaultJsonFactory +import net.corda.ledger.libs.persistence.json.DefaultContractStateVaultJsonFactory +import net.corda.ledger.libs.persistence.utxo.CustomRepresentation +import net.corda.ledger.libs.persistence.utxo.UtxoRepository +import net.corda.ledger.libs.persistence.utxo.UtxoTransactionReader +import net.corda.ledger.libs.persistence.utxo.impl.UtxoPersistenceServiceImpl import net.corda.ledger.persistence.json.impl.ContractStateVaultJsonFactoryRegistryImpl import net.corda.ledger.persistence.json.impl.DefaultContractStateVaultJsonFactoryImpl -import net.corda.ledger.persistence.utxo.CustomRepresentation -import net.corda.ledger.persistence.utxo.UtxoRepository -import net.corda.ledger.persistence.utxo.UtxoTransactionReader import net.corda.utilities.time.UTCClock import net.corda.v5.application.crypto.DigestService import net.corda.v5.application.marshalling.JsonMarshallingService diff --git a/components/ledger/ledger-persistence/test.bndrun b/components/ledger/ledger-persistence/test.bndrun index f9f16352b9f..c41558b7cba 100644 --- a/components/ledger/ledger-persistence/test.bndrun +++ b/components/ledger/ledger-persistence/test.bndrun @@ -45,6 +45,7 @@ bnd.identity;id='org.postgresql.jdbc',\ bnd.identity;id='junit-jupiter-engine',\ bnd.identity;id='junit-platform-launcher',\ + bnd.identity;id='com.opencsv',\ bnd.identity;id='slf4j.simple' -runstartlevel: \ diff --git a/components/ledger/ledger-utxo-flow/build.gradle b/components/ledger/ledger-utxo-flow/build.gradle index 5b4ddc24504..56f0d1e542a 100644 --- a/components/ledger/ledger-utxo-flow/build.gradle +++ b/components/ledger/ledger-utxo-flow/build.gradle @@ -44,6 +44,7 @@ dependencies { implementation project(':libs:platform-info') implementation project(':libs:sandbox') implementation project(':libs:serialization:json-validator') + implementation project(':libs:serialization:json-validator-lib') implementation project(':libs:serialization:serialization-avro') implementation project(':libs:serialization:serialization-checkpoint-api') implementation project(':libs:serialization:serialization-internal') diff --git a/components/ledger/ledger-utxo-flow/src/main/kotlin/net/corda/ledger/utxo/flow/impl/transaction/factory/impl/UtxoSignedTransactionFactoryImpl.kt b/components/ledger/ledger-utxo-flow/src/main/kotlin/net/corda/ledger/utxo/flow/impl/transaction/factory/impl/UtxoSignedTransactionFactoryImpl.kt index 881988a99a5..1fe00a418bf 100644 --- a/components/ledger/ledger-utxo-flow/src/main/kotlin/net/corda/ledger/utxo/flow/impl/transaction/factory/impl/UtxoSignedTransactionFactoryImpl.kt +++ b/components/ledger/ledger-utxo-flow/src/main/kotlin/net/corda/ledger/utxo/flow/impl/transaction/factory/impl/UtxoSignedTransactionFactoryImpl.kt @@ -1,6 +1,5 @@ package net.corda.ledger.utxo.flow.impl.transaction.factory.impl -import net.corda.common.json.validation.JsonValidator import net.corda.flow.application.GroupParametersLookupInternal import net.corda.ledger.common.data.transaction.TransactionMetadataImpl import net.corda.ledger.common.data.transaction.WireTransaction @@ -23,6 +22,7 @@ import net.corda.ledger.utxo.flow.impl.transaction.factory.UtxoLedgerTransaction import net.corda.ledger.utxo.flow.impl.transaction.factory.UtxoSignedTransactionFactory import net.corda.ledger.utxo.flow.impl.transaction.verifier.NotarySignatureVerificationServiceInternal import net.corda.ledger.utxo.flow.impl.transaction.verifier.UtxoLedgerTransactionVerificationService +import net.corda.libs.json.validator.JsonValidator import net.corda.membership.lib.SignedGroupParameters import net.corda.sandbox.type.UsedByFlow import net.corda.sandboxgroupcontext.CurrentSandboxGroupContext diff --git a/components/ledger/ledger-utxo-flow/src/test/kotlin/net/corda/ledger/utxo/flow/impl/transaction/filtered/UtxoFilteredTransactionTestBase.kt b/components/ledger/ledger-utxo-flow/src/test/kotlin/net/corda/ledger/utxo/flow/impl/transaction/filtered/UtxoFilteredTransactionTestBase.kt index 093d2a5a54a..ca5f26bb42b 100644 --- a/components/ledger/ledger-utxo-flow/src/test/kotlin/net/corda/ledger/utxo/flow/impl/transaction/filtered/UtxoFilteredTransactionTestBase.kt +++ b/components/ledger/ledger-utxo-flow/src/test/kotlin/net/corda/ledger/utxo/flow/impl/transaction/filtered/UtxoFilteredTransactionTestBase.kt @@ -4,7 +4,7 @@ import net.corda.application.impl.services.json.JsonMarshallingServiceImpl import net.corda.cipher.suite.impl.CipherSchemeMetadataImpl import net.corda.cipher.suite.impl.DigestServiceImpl import net.corda.cipher.suite.impl.PlatformDigestServiceImpl -import net.corda.common.json.validation.impl.JsonValidatorImpl +import net.corda.common.json.validation.impl.JsonValidatorOsgiImpl import net.corda.crypto.cipher.suite.merkle.MerkleProofProvider import net.corda.crypto.core.parseSecureHash import net.corda.crypto.merkle.impl.MerkleTreeProviderImpl @@ -64,7 +64,7 @@ open class UtxoFilteredTransactionTestBase { val digestService = DigestServiceImpl(PlatformDigestServiceImpl(CipherSchemeMetadataImpl()), null) protected val jsonMarshallingService = JsonMarshallingServiceImpl(mock {}) - protected val jsonValidator = JsonValidatorImpl() + protected val jsonValidator = JsonValidatorOsgiImpl() protected val merkleTreeProvider = MerkleTreeProviderImpl(digestService) val serializationService = mock() diff --git a/components/ledger/ledger-verification/build.gradle b/components/ledger/ledger-verification/build.gradle index b9769f5f23c..4d2aea48a17 100644 --- a/components/ledger/ledger-verification/build.gradle +++ b/components/ledger/ledger-verification/build.gradle @@ -42,6 +42,7 @@ dependencies { implementation project(':libs:messaging:messaging') implementation project(':libs:metrics') implementation project(":libs:serialization:json-validator") + implementation project(":libs:serialization:json-validator-lib") implementation project(":libs:serialization:serialization-avro") implementation project(':libs:tracing') implementation project(':libs:utilities') diff --git a/components/ledger/ledger-verification/src/integrationTest/kotlin/net/corda/ledger/verification/tests/VerificationRequestProcessorTest.kt b/components/ledger/ledger-verification/src/integrationTest/kotlin/net/corda/ledger/verification/tests/VerificationRequestProcessorTest.kt index 323ed8deb26..afa170249f6 100644 --- a/components/ledger/ledger-verification/src/integrationTest/kotlin/net/corda/ledger/verification/tests/VerificationRequestProcessorTest.kt +++ b/components/ledger/ledger-verification/src/integrationTest/kotlin/net/corda/ledger/verification/tests/VerificationRequestProcessorTest.kt @@ -3,7 +3,6 @@ package net.corda.ledger.verification.tests import net.corda.avro.serialization.CordaAvroDeserializer import net.corda.avro.serialization.CordaAvroSerializationFactory import net.corda.avro.serialization.CordaAvroSerializer -import net.corda.common.json.validation.JsonValidator import net.corda.cpiinfo.read.CpiInfoReadService import net.corda.crypto.cipher.suite.SignatureSpecImpl import net.corda.crypto.core.DigitalSignatureWithKey @@ -28,6 +27,7 @@ import net.corda.ledger.verification.processor.VerificationErrorType import net.corda.ledger.verification.processor.impl.VerificationRequestHandlerImpl import net.corda.ledger.verification.processor.impl.VerificationRequestProcessor import net.corda.ledger.verification.tests.helpers.VirtualNodeService +import net.corda.libs.json.validator.JsonValidator import net.corda.libs.packaging.core.CpkMetadata import net.corda.membership.lib.GroupParametersFactory import net.corda.sandboxgroupcontext.CurrentSandboxGroupContext diff --git a/libs/ledger-lib-persistence/build.gradle b/libs/ledger-lib-persistence/build.gradle new file mode 100644 index 00000000000..2bef539e35a --- /dev/null +++ b/libs/ledger-lib-persistence/build.gradle @@ -0,0 +1,32 @@ +plugins { + id 'corda.common-publishing' + id 'corda.common-library' +} + +description 'Corda persistence library' + +ext.cordaEnableFormatting = true + +dependencies { + compileOnly "org.osgi:osgi.annotation" + compileOnly "co.paralleluniverse:quasar-osgi-annotations:$quasarVersion" + + implementation platform("net.corda:corda-api:$cordaApiVersion") + + implementation project(':libs:crypto:crypto-core') + implementation project(':libs:ledger:ledger-common-data') + implementation project(':libs:ledger:ledger-utxo-data') + implementation project(":libs:db:db-core") + implementation project(":libs:db:db-orm") + implementation project(":libs:utilities") + implementation project(":libs:serialization:json-validator-lib") + + runtimeOnly project(':libs:crypto:merkle-impl') + + implementation 'net.corda:corda-ledger-common' + implementation 'net.corda:corda-ledger-utxo' + implementation libs.slf4j.api + implementation "org.hibernate:hibernate-core:$hibernateVersion" + implementation 'org.jetbrains.kotlin:kotlin-stdlib' + implementation libs.jackson.core +} \ No newline at end of file diff --git a/libs/ledger-lib-persistence/src/main/java/net/corda/ledger/libs/persistence/common/package-info.java b/libs/ledger-lib-persistence/src/main/java/net/corda/ledger/libs/persistence/common/package-info.java new file mode 100644 index 00000000000..af9b0a3facd --- /dev/null +++ b/libs/ledger-lib-persistence/src/main/java/net/corda/ledger/libs/persistence/common/package-info.java @@ -0,0 +1,6 @@ +@Export +@QuasarIgnoreAllPackages +package net.corda.ledger.libs.persistence.common; + +import co.paralleluniverse.quasar.annotations.QuasarIgnoreAllPackages; +import org.osgi.annotation.bundle.Export; diff --git a/libs/ledger-lib-persistence/src/main/java/net/corda/ledger/libs/persistence/json/package-info.java b/libs/ledger-lib-persistence/src/main/java/net/corda/ledger/libs/persistence/json/package-info.java new file mode 100644 index 00000000000..31afe3fcfa8 --- /dev/null +++ b/libs/ledger-lib-persistence/src/main/java/net/corda/ledger/libs/persistence/json/package-info.java @@ -0,0 +1,6 @@ +@Export +@QuasarIgnoreAllPackages +package net.corda.ledger.libs.persistence.json; + +import co.paralleluniverse.quasar.annotations.QuasarIgnoreAllPackages; +import org.osgi.annotation.bundle.Export; diff --git a/libs/ledger-lib-persistence/src/main/java/net/corda/ledger/libs/persistence/utxo/impl/package-info.java b/libs/ledger-lib-persistence/src/main/java/net/corda/ledger/libs/persistence/utxo/impl/package-info.java new file mode 100644 index 00000000000..a1b94c27151 --- /dev/null +++ b/libs/ledger-lib-persistence/src/main/java/net/corda/ledger/libs/persistence/utxo/impl/package-info.java @@ -0,0 +1,6 @@ +@Export +@QuasarIgnoreAllPackages +package net.corda.ledger.libs.persistence.utxo.impl; + +import co.paralleluniverse.quasar.annotations.QuasarIgnoreAllPackages; +import org.osgi.annotation.bundle.Export; diff --git a/libs/ledger-lib-persistence/src/main/java/net/corda/ledger/libs/persistence/utxo/package-info.java b/libs/ledger-lib-persistence/src/main/java/net/corda/ledger/libs/persistence/utxo/package-info.java new file mode 100644 index 00000000000..0e124196d76 --- /dev/null +++ b/libs/ledger-lib-persistence/src/main/java/net/corda/ledger/libs/persistence/utxo/package-info.java @@ -0,0 +1,6 @@ +@Export +@QuasarIgnoreAllPackages +package net.corda.ledger.libs.persistence.utxo; + +import co.paralleluniverse.quasar.annotations.QuasarIgnoreAllPackages; +import org.osgi.annotation.bundle.Export; diff --git a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/common/ComponentGroupMapper.kt b/libs/ledger-lib-persistence/src/main/kotlin/net/corda/ledger/libs/persistence/common/ComponentGroupMapper.kt similarity index 86% rename from components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/common/ComponentGroupMapper.kt rename to libs/ledger-lib-persistence/src/main/kotlin/net/corda/ledger/libs/persistence/common/ComponentGroupMapper.kt index 650f7555a82..6c4ed50c9cb 100644 --- a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/common/ComponentGroupMapper.kt +++ b/libs/ledger-lib-persistence/src/main/kotlin/net/corda/ledger/libs/persistence/common/ComponentGroupMapper.kt @@ -1,4 +1,4 @@ -package net.corda.ledger.persistence.common +package net.corda.ledger.libs.persistence.common import java.sql.SQLException import javax.persistence.Tuple diff --git a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/common/InconsistentLedgerStateException.kt b/libs/ledger-lib-persistence/src/main/kotlin/net/corda/ledger/libs/persistence/common/InconsistentLedgerStateException.kt similarity index 85% rename from components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/common/InconsistentLedgerStateException.kt rename to libs/ledger-lib-persistence/src/main/kotlin/net/corda/ledger/libs/persistence/common/InconsistentLedgerStateException.kt index 5359f7c3854..55921fe3a65 100644 --- a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/common/InconsistentLedgerStateException.kt +++ b/libs/ledger-lib-persistence/src/main/kotlin/net/corda/ledger/libs/persistence/common/InconsistentLedgerStateException.kt @@ -1,4 +1,4 @@ -package net.corda.ledger.persistence.common +package net.corda.ledger.libs.persistence.common import net.corda.v5.base.exceptions.CordaRuntimeException diff --git a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/json/ContractStateVaultJsonFactoryRegistry.kt b/libs/ledger-lib-persistence/src/main/kotlin/net/corda/ledger/libs/persistence/json/ContractStateVaultJsonFactoryRegistry.kt similarity index 92% rename from components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/json/ContractStateVaultJsonFactoryRegistry.kt rename to libs/ledger-lib-persistence/src/main/kotlin/net/corda/ledger/libs/persistence/json/ContractStateVaultJsonFactoryRegistry.kt index b71e8726b0d..52df7ff00c3 100644 --- a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/json/ContractStateVaultJsonFactoryRegistry.kt +++ b/libs/ledger-lib-persistence/src/main/kotlin/net/corda/ledger/libs/persistence/json/ContractStateVaultJsonFactoryRegistry.kt @@ -1,4 +1,4 @@ -package net.corda.ledger.persistence.json +package net.corda.ledger.libs.persistence.json import net.corda.v5.ledger.utxo.ContractState import net.corda.v5.ledger.utxo.query.json.ContractStateVaultJsonFactory diff --git a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/json/DefaultContractStateVaultJsonFactory.kt b/libs/ledger-lib-persistence/src/main/kotlin/net/corda/ledger/libs/persistence/json/DefaultContractStateVaultJsonFactory.kt similarity index 84% rename from components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/json/DefaultContractStateVaultJsonFactory.kt rename to libs/ledger-lib-persistence/src/main/kotlin/net/corda/ledger/libs/persistence/json/DefaultContractStateVaultJsonFactory.kt index 33a27923f07..e248e2a08b2 100644 --- a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/json/DefaultContractStateVaultJsonFactory.kt +++ b/libs/ledger-lib-persistence/src/main/kotlin/net/corda/ledger/libs/persistence/json/DefaultContractStateVaultJsonFactory.kt @@ -1,4 +1,4 @@ -package net.corda.ledger.persistence.json +package net.corda.ledger.libs.persistence.json import net.corda.v5.application.marshalling.JsonMarshallingService import net.corda.v5.ledger.utxo.StateAndRef diff --git a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/CustomRepresentation.kt b/libs/ledger-lib-persistence/src/main/kotlin/net/corda/ledger/libs/persistence/utxo/CustomRepresentation.kt similarity index 52% rename from components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/CustomRepresentation.kt rename to libs/ledger-lib-persistence/src/main/kotlin/net/corda/ledger/libs/persistence/utxo/CustomRepresentation.kt index 68a4457b0ec..0d675b1a878 100644 --- a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/CustomRepresentation.kt +++ b/libs/ledger-lib-persistence/src/main/kotlin/net/corda/ledger/libs/persistence/utxo/CustomRepresentation.kt @@ -1,3 +1,3 @@ -package net.corda.ledger.persistence.utxo +package net.corda.ledger.libs.persistence.utxo data class CustomRepresentation(val json: String) diff --git a/libs/ledger-lib-persistence/src/main/kotlin/net/corda/ledger/libs/persistence/utxo/SignatureSpec.kt b/libs/ledger-lib-persistence/src/main/kotlin/net/corda/ledger/libs/persistence/utxo/SignatureSpec.kt new file mode 100644 index 00000000000..d4df83806e6 --- /dev/null +++ b/libs/ledger-lib-persistence/src/main/kotlin/net/corda/ledger/libs/persistence/utxo/SignatureSpec.kt @@ -0,0 +1,26 @@ +package net.corda.ledger.libs.persistence.utxo + +data class SignatureSpec(val signatureName: String, val customDigestName: String?, val params: ByteArray?) { + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as SignatureSpec + + if (signatureName != other.signatureName) return false + if (customDigestName != other.customDigestName) return false + if (params != null) { + if (other.params == null) return false + if (!params.contentEquals(other.params)) return false + } else if (other.params != null) return false + + return true + } + + override fun hashCode(): Int { + var result = signatureName.hashCode() + result = 31 * result + (customDigestName?.hashCode() ?: 0) + result = 31 * result + (params?.contentHashCode() ?: 0) + return result + } +} diff --git a/libs/ledger-lib-persistence/src/main/kotlin/net/corda/ledger/libs/persistence/utxo/SignatureWithKey.kt b/libs/ledger-lib-persistence/src/main/kotlin/net/corda/ledger/libs/persistence/utxo/SignatureWithKey.kt new file mode 100644 index 00000000000..5a60ffd1427 --- /dev/null +++ b/libs/ledger-lib-persistence/src/main/kotlin/net/corda/ledger/libs/persistence/utxo/SignatureWithKey.kt @@ -0,0 +1,21 @@ +package net.corda.ledger.libs.persistence.utxo + +data class SignatureWithKey(val publicKey: ByteArray, val bytes: ByteArray) { + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as SignatureWithKey + + if (!publicKey.contentEquals(other.publicKey)) return false + if (!bytes.contentEquals(other.bytes)) return false + + return true + } + + override fun hashCode(): Int { + var result = publicKey.contentHashCode() + result = 31 * result + bytes.contentHashCode() + return result + } +} diff --git a/libs/ledger-lib-persistence/src/main/kotlin/net/corda/ledger/libs/persistence/utxo/SignedGroupParameters.kt b/libs/ledger-lib-persistence/src/main/kotlin/net/corda/ledger/libs/persistence/utxo/SignedGroupParameters.kt new file mode 100644 index 00000000000..b3f0c91f091 --- /dev/null +++ b/libs/ledger-lib-persistence/src/main/kotlin/net/corda/ledger/libs/persistence/utxo/SignedGroupParameters.kt @@ -0,0 +1,27 @@ +package net.corda.ledger.libs.persistence.utxo + +data class SignedGroupParameters( + val groupParameters: ByteArray, + val mgmSignature: SignatureWithKey, + val mgmSignatureSpec: SignatureSpec, +) { + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as SignedGroupParameters + + if (!groupParameters.contentEquals(other.groupParameters)) return false + if (mgmSignature != other.mgmSignature) return false + if (mgmSignatureSpec != other.mgmSignatureSpec) return false + + return true + } + + override fun hashCode(): Int { + var result = groupParameters.contentHashCode() + result = 31 * result + mgmSignature.hashCode() + result = 31 * result + mgmSignatureSpec.hashCode() + return result + } +} diff --git a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/UtxoPersistenceService.kt b/libs/ledger-lib-persistence/src/main/kotlin/net/corda/ledger/libs/persistence/utxo/UtxoPersistenceService.kt similarity index 96% rename from components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/UtxoPersistenceService.kt rename to libs/ledger-lib-persistence/src/main/kotlin/net/corda/ledger/libs/persistence/utxo/UtxoPersistenceService.kt index 1e2ae9e8086..8f53863668d 100644 --- a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/UtxoPersistenceService.kt +++ b/libs/ledger-lib-persistence/src/main/kotlin/net/corda/ledger/libs/persistence/utxo/UtxoPersistenceService.kt @@ -1,10 +1,9 @@ -package net.corda.ledger.persistence.utxo +package net.corda.ledger.libs.persistence.utxo -import net.corda.data.membership.SignedGroupParameters import net.corda.ledger.common.data.transaction.SignedTransactionContainer import net.corda.ledger.common.data.transaction.TransactionStatus import net.corda.ledger.common.data.transaction.filtered.FilteredTransaction -import net.corda.ledger.persistence.common.InconsistentLedgerStateException +import net.corda.ledger.libs.persistence.common.InconsistentLedgerStateException import net.corda.ledger.utxo.data.transaction.SignedLedgerTransactionContainer import net.corda.ledger.utxo.data.transaction.UtxoVisibleTransactionOutputDto import net.corda.v5.application.crypto.DigitalSignatureAndMetadata diff --git a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/UtxoRepository.kt b/libs/ledger-lib-persistence/src/main/kotlin/net/corda/ledger/libs/persistence/utxo/UtxoRepository.kt similarity index 98% rename from components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/UtxoRepository.kt rename to libs/ledger-lib-persistence/src/main/kotlin/net/corda/ledger/libs/persistence/utxo/UtxoRepository.kt index 5fa2c6a02f7..1f7dfc93928 100644 --- a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/UtxoRepository.kt +++ b/libs/ledger-lib-persistence/src/main/kotlin/net/corda/ledger/libs/persistence/utxo/UtxoRepository.kt @@ -1,6 +1,5 @@ -package net.corda.ledger.persistence.utxo +package net.corda.ledger.libs.persistence.utxo -import net.corda.data.membership.SignedGroupParameters import net.corda.ledger.common.data.transaction.SignedTransactionContainer import net.corda.ledger.common.data.transaction.TransactionStatus import net.corda.ledger.utxo.data.transaction.MerkleProofDto diff --git a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/UtxoTransactionReader.kt b/libs/ledger-lib-persistence/src/main/kotlin/net/corda/ledger/libs/persistence/utxo/UtxoTransactionReader.kt similarity index 96% rename from components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/UtxoTransactionReader.kt rename to libs/ledger-lib-persistence/src/main/kotlin/net/corda/ledger/libs/persistence/utxo/UtxoTransactionReader.kt index d8d7386878c..b0773cde8b4 100644 --- a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/UtxoTransactionReader.kt +++ b/libs/ledger-lib-persistence/src/main/kotlin/net/corda/ledger/libs/persistence/utxo/UtxoTransactionReader.kt @@ -1,4 +1,4 @@ -package net.corda.ledger.persistence.utxo +package net.corda.ledger.libs.persistence.utxo import net.corda.ledger.common.data.transaction.PrivacySalt import net.corda.ledger.common.data.transaction.TransactionMetadataInternal diff --git a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/AbstractUtxoQueryProvider.kt b/libs/ledger-lib-persistence/src/main/kotlin/net/corda/ledger/libs/persistence/utxo/impl/AbstractUtxoQueryProvider.kt similarity index 99% rename from components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/AbstractUtxoQueryProvider.kt rename to libs/ledger-lib-persistence/src/main/kotlin/net/corda/ledger/libs/persistence/utxo/impl/AbstractUtxoQueryProvider.kt index 7f3d0cd7c3a..bb1d65153f1 100644 --- a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/AbstractUtxoQueryProvider.kt +++ b/libs/ledger-lib-persistence/src/main/kotlin/net/corda/ledger/libs/persistence/utxo/impl/AbstractUtxoQueryProvider.kt @@ -1,4 +1,4 @@ -package net.corda.ledger.persistence.utxo.impl +package net.corda.ledger.libs.persistence.utxo.impl import net.corda.ledger.common.data.transaction.TransactionStatus import net.corda.ledger.utxo.data.transaction.UtxoComponentGroup diff --git a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/PostgresUtxoQueryProvider.kt b/libs/ledger-lib-persistence/src/main/kotlin/net/corda/ledger/libs/persistence/utxo/impl/PostgresUtxoQueryProvider.kt similarity index 87% rename from components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/PostgresUtxoQueryProvider.kt rename to libs/ledger-lib-persistence/src/main/kotlin/net/corda/ledger/libs/persistence/utxo/impl/PostgresUtxoQueryProvider.kt index 13eb23ffd08..64352c51c0d 100644 --- a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/PostgresUtxoQueryProvider.kt +++ b/libs/ledger-lib-persistence/src/main/kotlin/net/corda/ledger/libs/persistence/utxo/impl/PostgresUtxoQueryProvider.kt @@ -1,24 +1,8 @@ -package net.corda.ledger.persistence.utxo.impl +package net.corda.ledger.libs.persistence.utxo.impl import net.corda.ledger.utxo.data.transaction.UtxoComponentGroup -import net.corda.orm.DatabaseTypeProvider -import net.corda.orm.DatabaseTypeProvider.Companion.POSTGRES_TYPE_FILTER -import net.corda.utilities.debug -import org.osgi.service.component.annotations.Activate -import org.osgi.service.component.annotations.Component -import org.osgi.service.component.annotations.Reference -import org.slf4j.LoggerFactory - -@Suppress("unused") -@Component(service = [ UtxoQueryProvider::class ]) -class PostgresUtxoQueryProvider @Activate constructor( - @Reference(target = POSTGRES_TYPE_FILTER) - databaseTypeProvider: DatabaseTypeProvider -) : AbstractUtxoQueryProvider() { - init { - LoggerFactory.getLogger(this::class.java).debug { "Activated for ${databaseTypeProvider.databaseType}" } - } +class PostgresUtxoQueryProvider : AbstractUtxoQueryProvider() { override val persistTransaction: String get() = """ INSERT INTO {h-schema}utxo_transaction(id, privacy_salt, account_id, created, status, updated, metadata_hash, is_filtered, repair_attempt_count) diff --git a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/UtxoComponentGroupMapper.kt b/libs/ledger-lib-persistence/src/main/kotlin/net/corda/ledger/libs/persistence/utxo/impl/UtxoComponentGroupMapper.kt similarity index 90% rename from components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/UtxoComponentGroupMapper.kt rename to libs/ledger-lib-persistence/src/main/kotlin/net/corda/ledger/libs/persistence/utxo/impl/UtxoComponentGroupMapper.kt index 6d98cdf6f03..8d40326d983 100644 --- a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/UtxoComponentGroupMapper.kt +++ b/libs/ledger-lib-persistence/src/main/kotlin/net/corda/ledger/libs/persistence/utxo/impl/UtxoComponentGroupMapper.kt @@ -1,6 +1,6 @@ -package net.corda.ledger.persistence.utxo.impl +package net.corda.ledger.libs.persistence.utxo.impl -import net.corda.ledger.persistence.common.ComponentGroupMapper +import net.corda.ledger.libs.persistence.common.ComponentGroupMapper import javax.persistence.Tuple /** diff --git a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/UtxoPersistenceServiceImpl.kt b/libs/ledger-lib-persistence/src/main/kotlin/net/corda/ledger/libs/persistence/utxo/impl/UtxoPersistenceServiceImpl.kt similarity index 96% rename from components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/UtxoPersistenceServiceImpl.kt rename to libs/ledger-lib-persistence/src/main/kotlin/net/corda/ledger/libs/persistence/utxo/impl/UtxoPersistenceServiceImpl.kt index 975c38b2b5c..567835159b1 100644 --- a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/UtxoPersistenceServiceImpl.kt +++ b/libs/ledger-lib-persistence/src/main/kotlin/net/corda/ledger/libs/persistence/utxo/impl/UtxoPersistenceServiceImpl.kt @@ -1,13 +1,12 @@ -package net.corda.ledger.persistence.utxo.impl +package net.corda.ledger.libs.persistence.utxo.impl import com.fasterxml.jackson.core.JsonProcessingException -import net.corda.common.json.validation.JsonValidator import net.corda.crypto.cipher.suite.merkle.MerkleProofFactory import net.corda.crypto.cipher.suite.merkle.MerkleProofInternal import net.corda.crypto.cipher.suite.merkle.MerkleTreeProvider +import net.corda.crypto.core.SecureHashImpl import net.corda.crypto.core.bytes import net.corda.crypto.core.parseSecureHash -import net.corda.data.membership.SignedGroupParameters import net.corda.ledger.common.data.transaction.SignedTransactionContainer import net.corda.ledger.common.data.transaction.TransactionMetadataInternal import net.corda.ledger.common.data.transaction.TransactionMetadataUtils.parseMetadata @@ -18,13 +17,13 @@ import net.corda.ledger.common.data.transaction.filtered.FilteredTransaction import net.corda.ledger.common.data.transaction.filtered.factory.FilteredTransactionFactory import net.corda.ledger.common.data.transaction.getComponentGroupMerkleTreeDigestProvider import net.corda.ledger.common.data.transaction.getRootMerkleTreeDigestProvider -import net.corda.ledger.persistence.common.InconsistentLedgerStateException -import net.corda.ledger.persistence.json.ContractStateVaultJsonFactoryRegistry -import net.corda.ledger.persistence.json.DefaultContractStateVaultJsonFactory -import net.corda.ledger.persistence.utxo.CustomRepresentation -import net.corda.ledger.persistence.utxo.UtxoPersistenceService -import net.corda.ledger.persistence.utxo.UtxoRepository -import net.corda.ledger.persistence.utxo.UtxoTransactionReader +import net.corda.ledger.libs.persistence.common.InconsistentLedgerStateException +import net.corda.ledger.libs.persistence.json.DefaultContractStateVaultJsonFactory +import net.corda.ledger.libs.persistence.utxo.CustomRepresentation +import net.corda.ledger.libs.persistence.utxo.SignedGroupParameters +import net.corda.ledger.libs.persistence.utxo.UtxoPersistenceService +import net.corda.ledger.libs.persistence.utxo.UtxoRepository +import net.corda.ledger.libs.persistence.utxo.UtxoTransactionReader import net.corda.ledger.utxo.data.transaction.SignedLedgerTransactionContainer import net.corda.ledger.utxo.data.transaction.UtxoComponentGroup import net.corda.ledger.utxo.data.transaction.UtxoComponentGroup.METADATA @@ -33,7 +32,7 @@ import net.corda.ledger.utxo.data.transaction.UtxoOutputInfoComponent import net.corda.ledger.utxo.data.transaction.UtxoVisibleTransactionOutputDto import net.corda.ledger.utxo.data.transaction.WrappedUtxoWireTransaction import net.corda.ledger.utxo.data.transaction.toMerkleProof -import net.corda.libs.packaging.hash +import net.corda.libs.json.validator.JsonValidator import net.corda.orm.utils.transaction import net.corda.utilities.serialization.deserialize import net.corda.utilities.time.Clock @@ -54,6 +53,7 @@ import net.corda.v5.ledger.utxo.observer.UtxoToken import net.corda.v5.ledger.utxo.query.json.ContractStateVaultJsonFactory import org.slf4j.Logger import org.slf4j.LoggerFactory +import java.security.MessageDigest import java.time.Instant import javax.persistence.EntityManager import javax.persistence.EntityManagerFactory @@ -64,7 +64,7 @@ class UtxoPersistenceServiceImpl( private val repository: UtxoRepository, private val serializationService: SerializationService, private val sandboxDigestService: DigestService, - private val factoryStorage: ContractStateVaultJsonFactoryRegistry, + private val factoryStorage: net.corda.ledger.libs.persistence.json.ContractStateVaultJsonFactoryRegistry, private val defaultContractStateVaultJsonFactory: DefaultContractStateVaultJsonFactory, private val jsonMarshallingService: JsonMarshallingService, private val jsonValidator: JsonValidator, @@ -467,7 +467,7 @@ class UtxoPersistenceServiceImpl( } override fun persistSignedGroupParametersIfDoNotExist(signedGroupParameters: SignedGroupParameters) { - val hash = signedGroupParameters.groupParameters.array().hash(DigestAlgorithmName.SHA2_256).toString() + val hash = signedGroupParameters.groupParameters.hash(DigestAlgorithmName.SHA2_256).toString() if (findSignedGroupParameters(hash) == null) { entityManagerFactory.transaction { em -> repository.persistSignedGroupParameters( @@ -652,7 +652,7 @@ class UtxoPersistenceServiceImpl( } @VisibleForTesting - internal fun findFilteredTransactions( + fun findFilteredTransactions( transactionIds: List ): Map>> { return entityManagerFactory.transaction { em -> findFilteredTransactions(transactionIds, em) } @@ -837,4 +837,13 @@ class UtxoPersistenceServiceImpl( val leaves: List, val components: List ) + + /** + * Compute the [SecureHash] of a [ByteArray] using the specified [DigestAlgorithmName] + */ + private fun ByteArray.hash(algo: DigestAlgorithmName = DigestAlgorithmName.SHA2_256): SecureHash { + val md = MessageDigest.getInstance(algo.name) + md.update(this) + return SecureHashImpl(algo.name, md.digest()) + } } diff --git a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/UtxoQueryProvider.kt b/libs/ledger-lib-persistence/src/main/kotlin/net/corda/ledger/libs/persistence/utxo/impl/UtxoQueryProvider.kt similarity index 99% rename from components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/UtxoQueryProvider.kt rename to libs/ledger-lib-persistence/src/main/kotlin/net/corda/ledger/libs/persistence/utxo/impl/UtxoQueryProvider.kt index 5cc0390fd55..957c7f5590b 100644 --- a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/UtxoQueryProvider.kt +++ b/libs/ledger-lib-persistence/src/main/kotlin/net/corda/ledger/libs/persistence/utxo/impl/UtxoQueryProvider.kt @@ -1,4 +1,4 @@ -package net.corda.ledger.persistence.utxo.impl +package net.corda.ledger.libs.persistence.utxo.impl /** * Provider for the SQL queries executed by [UtxoRepositoryImpl]. diff --git a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/UtxoRepositoryImpl.kt b/libs/ledger-lib-persistence/src/main/kotlin/net/corda/ledger/libs/persistence/utxo/impl/UtxoRepositoryImpl.kt similarity index 92% rename from components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/UtxoRepositoryImpl.kt rename to libs/ledger-lib-persistence/src/main/kotlin/net/corda/ledger/libs/persistence/utxo/impl/UtxoRepositoryImpl.kt index 392443b309f..cf926bad19d 100644 --- a/components/ledger/ledger-persistence/src/main/kotlin/net/corda/ledger/persistence/utxo/impl/UtxoRepositoryImpl.kt +++ b/libs/ledger-lib-persistence/src/main/kotlin/net/corda/ledger/libs/persistence/utxo/impl/UtxoRepositoryImpl.kt @@ -1,23 +1,20 @@ -package net.corda.ledger.persistence.utxo.impl +package net.corda.ledger.libs.persistence.utxo.impl import net.corda.crypto.core.parseSecureHash -import net.corda.data.crypto.wire.CryptoSignatureSpec -import net.corda.data.crypto.wire.CryptoSignatureWithKey -import net.corda.data.membership.SignedGroupParameters import net.corda.db.core.utils.BatchPersistenceService -import net.corda.db.core.utils.BatchPersistenceServiceImpl import net.corda.ledger.common.data.transaction.PrivacySaltImpl import net.corda.ledger.common.data.transaction.SignedTransactionContainer import net.corda.ledger.common.data.transaction.TransactionStatus import net.corda.ledger.common.data.transaction.factory.WireTransactionFactory -import net.corda.ledger.persistence.common.mapToComponentGroups -import net.corda.ledger.persistence.utxo.UtxoRepository +import net.corda.ledger.libs.persistence.common.mapToComponentGroups +import net.corda.ledger.libs.persistence.utxo.SignatureSpec +import net.corda.ledger.libs.persistence.utxo.SignatureWithKey +import net.corda.ledger.libs.persistence.utxo.SignedGroupParameters +import net.corda.ledger.libs.persistence.utxo.UtxoRepository import net.corda.ledger.utxo.data.transaction.MerkleProofDto import net.corda.ledger.utxo.data.transaction.UtxoComponentGroup import net.corda.ledger.utxo.data.transaction.UtxoFilteredTransactionDto import net.corda.ledger.utxo.data.transaction.UtxoVisibleTransactionOutputDto -import net.corda.sandbox.type.SandboxConstants.CORDA_MARKER_ONLY_SERVICE -import net.corda.sandbox.type.UsedByPersistence import net.corda.utilities.debug import net.corda.utilities.serialization.deserialize import net.corda.v5.application.crypto.DigitalSignatureAndMetadata @@ -25,12 +22,7 @@ import net.corda.v5.application.serialization.SerializationService import net.corda.v5.crypto.SecureHash import net.corda.v5.ledger.utxo.StateRef import org.hibernate.Session -import org.osgi.service.component.annotations.Activate -import org.osgi.service.component.annotations.Component -import org.osgi.service.component.annotations.Reference -import org.osgi.service.component.annotations.ServiceScope.PROTOTYPE import org.slf4j.LoggerFactory -import java.nio.ByteBuffer import java.sql.Connection import java.sql.Timestamp import java.sql.Types @@ -41,24 +33,13 @@ import javax.persistence.EntityManager import javax.persistence.Query import javax.persistence.Tuple -/** - * Reads and writes ledger transaction data to and from the virtual node vault database. - * The component only exists to be created inside a PERSISTENCE sandbox. We denote it - * as "corda.marker.only" to force the sandbox to create it, despite it implementing - * only the [UsedByPersistence] marker interface. - */ @Suppress("TooManyFunctions") -@Component( - service = [ UtxoRepository::class, UsedByPersistence::class ], - property = [ CORDA_MARKER_ONLY_SERVICE ], - scope = PROTOTYPE -) class UtxoRepositoryImpl( private val batchPersistenceService: BatchPersistenceService, private val serializationService: SerializationService, private val wireTransactionFactory: WireTransactionFactory, private val queryProvider: UtxoQueryProvider -) : UtxoRepository, UsedByPersistence { +) : UtxoRepository { private companion object { private val logger = LoggerFactory.getLogger(this::class.java.enclosingClass) @@ -66,17 +47,6 @@ class UtxoRepositoryImpl( private val utcCalendar = Calendar.getInstance(TimeZone.getTimeZone("UTC")) } - @Suppress("Unused") - @Activate - constructor( - @Reference(service = SerializationService::class) - serializationService: SerializationService, - @Reference(service = WireTransactionFactory::class) - wireTransactionFactory: WireTransactionFactory, - @Reference(service = UtxoQueryProvider::class) - queryProvider: UtxoQueryProvider - ) : this(BatchPersistenceServiceImpl(), serializationService, wireTransactionFactory, queryProvider) - override fun findTransaction( entityManager: EntityManager, id: String @@ -436,12 +406,12 @@ class UtxoRepositoryImpl( .resultListAsTuples() .map { r -> SignedGroupParameters( - ByteBuffer.wrap(r.get(0) as ByteArray), - CryptoSignatureWithKey( - ByteBuffer.wrap(r.get(1) as ByteArray), - ByteBuffer.wrap(r.get(2) as ByteArray) + r.get(0) as ByteArray, + SignatureWithKey( + r.get(1) as ByteArray, + r.get(2) as ByteArray ), - CryptoSignatureSpec((r.get(3) as String), null, null) + SignatureSpec((r.get(3) as String), null, null) ) } .singleOrNull() @@ -455,9 +425,9 @@ class UtxoRepositoryImpl( ) { entityManager.createNativeQuery(queryProvider.persistSignedGroupParameters) .setParameter("hash", hash) - .setParameter("parameters", signedGroupParameters.groupParameters.array()) - .setParameter("signature_public_key", signedGroupParameters.mgmSignature.publicKey.array()) - .setParameter("signature_content", signedGroupParameters.mgmSignature.bytes.array()) + .setParameter("parameters", signedGroupParameters.groupParameters) + .setParameter("signature_public_key", signedGroupParameters.mgmSignature.publicKey) + .setParameter("signature_content", signedGroupParameters.mgmSignature.bytes) .setParameter("signature_spec", signedGroupParameters.mgmSignatureSpec.signatureName) .setParameter("createdAt", timestamp) .executeUpdate() diff --git a/libs/ledger/ledger-common-data/build.gradle b/libs/ledger/ledger-common-data/build.gradle index 4b212a76f3f..47b012f7859 100644 --- a/libs/ledger/ledger-common-data/build.gradle +++ b/libs/ledger/ledger-common-data/build.gradle @@ -23,7 +23,7 @@ dependencies { implementation project(':libs:crypto:crypto-core') implementation project(':libs:flows:flow-api') implementation project(':libs:sandbox-types') - implementation project(':libs:serialization:json-validator') + implementation project(':libs:serialization:json-validator-lib') implementation project(':libs:serialization:serialization-amqp-api') implementation project(':libs:serialization:serialization-internal') implementation project(':libs:serialization:serialization-checkpoint-api') diff --git a/libs/ledger/ledger-common-data/src/integrationTest/kotlin/net/corda/ledger/common/data/transaction/filtered/impl/FilteredTransactionImplIntegrationTest.kt b/libs/ledger/ledger-common-data/src/integrationTest/kotlin/net/corda/ledger/common/data/transaction/filtered/impl/FilteredTransactionImplIntegrationTest.kt index dd4d4da17f3..0f342af9f13 100644 --- a/libs/ledger/ledger-common-data/src/integrationTest/kotlin/net/corda/ledger/common/data/transaction/filtered/impl/FilteredTransactionImplIntegrationTest.kt +++ b/libs/ledger/ledger-common-data/src/integrationTest/kotlin/net/corda/ledger/common/data/transaction/filtered/impl/FilteredTransactionImplIntegrationTest.kt @@ -4,7 +4,7 @@ import net.corda.application.impl.services.json.JsonMarshallingServiceImpl import net.corda.cipher.suite.impl.CipherSchemeMetadataImpl import net.corda.cipher.suite.impl.DigestServiceImpl import net.corda.cipher.suite.impl.PlatformDigestServiceImpl -import net.corda.common.json.validation.impl.JsonValidatorImpl +import net.corda.common.json.validation.impl.JsonValidatorOsgiImpl import net.corda.crypto.merkle.impl.MerkleTreeProviderImpl import net.corda.ledger.common.data.transaction.TransactionMetadataImpl import net.corda.ledger.common.data.transaction.WireTransaction @@ -46,7 +46,7 @@ class FilteredTransactionImplIntegrationTest { private val digestService = DigestServiceImpl(PlatformDigestServiceImpl(CipherSchemeMetadataImpl()), null) private val jsonMarshallingService = JsonMarshallingServiceImpl(mock {}) - private val jsonValidator = JsonValidatorImpl() + private val jsonValidator = JsonValidatorOsgiImpl() private val merkleTreeProvider = MerkleTreeProviderImpl(digestService) private val serializationService = mock() diff --git a/libs/ledger/ledger-common-data/src/main/kotlin/net/corda/ledger/common/data/transaction/Extensions.TransactionMetadata.kt b/libs/ledger/ledger-common-data/src/main/kotlin/net/corda/ledger/common/data/transaction/Extensions.TransactionMetadata.kt index df525177a6d..73bdeccbb45 100644 --- a/libs/ledger/ledger-common-data/src/main/kotlin/net/corda/ledger/common/data/transaction/Extensions.TransactionMetadata.kt +++ b/libs/ledger/ledger-common-data/src/main/kotlin/net/corda/ledger/common/data/transaction/Extensions.TransactionMetadata.kt @@ -2,12 +2,12 @@ package net.corda.ledger.common.data.transaction -import net.corda.common.json.validation.JsonValidator -import net.corda.common.json.validation.WrappedJsonSchema import net.corda.crypto.cipher.suite.merkle.MerkleTreeProvider import net.corda.crypto.core.bytes import net.corda.crypto.core.concatByteArrays import net.corda.crypto.core.toByteArray +import net.corda.libs.json.validator.JsonValidator +import net.corda.libs.json.validator.WrappedJsonSchema import net.corda.v5.application.crypto.DigestService import net.corda.v5.application.marshalling.JsonMarshallingService import net.corda.v5.crypto.DigestAlgorithmName diff --git a/libs/ledger/ledger-common-data/src/main/kotlin/net/corda/ledger/common/data/transaction/factory/WireTransactionFactoryImpl.kt b/libs/ledger/ledger-common-data/src/main/kotlin/net/corda/ledger/common/data/transaction/factory/WireTransactionFactoryImpl.kt index bd1c472fd1a..7f1c1c5be8e 100644 --- a/libs/ledger/ledger-common-data/src/main/kotlin/net/corda/ledger/common/data/transaction/factory/WireTransactionFactoryImpl.kt +++ b/libs/ledger/ledger-common-data/src/main/kotlin/net/corda/ledger/common/data/transaction/factory/WireTransactionFactoryImpl.kt @@ -1,12 +1,12 @@ package net.corda.ledger.common.data.transaction.factory -import net.corda.common.json.validation.JsonValidator import net.corda.crypto.cipher.suite.merkle.MerkleTreeProvider import net.corda.ledger.common.data.transaction.PrivacySalt import net.corda.ledger.common.data.transaction.TransactionMetadataImpl import net.corda.ledger.common.data.transaction.TransactionMetadataInternal import net.corda.ledger.common.data.transaction.TransactionMetadataUtils.parseMetadata import net.corda.ledger.common.data.transaction.WireTransaction +import net.corda.libs.json.validator.JsonValidator import net.corda.sandbox.type.UsedByFlow import net.corda.sandbox.type.UsedByPersistence import net.corda.sandbox.type.UsedByVerification diff --git a/libs/ledger/ledger-common-data/src/main/kotlin/net/corda/ledger/common/data/transaction/filtered/factory/impl/FilteredTransactionFactoryImpl.kt b/libs/ledger/ledger-common-data/src/main/kotlin/net/corda/ledger/common/data/transaction/filtered/factory/impl/FilteredTransactionFactoryImpl.kt index 11a03169b70..4845a4d197f 100644 --- a/libs/ledger/ledger-common-data/src/main/kotlin/net/corda/ledger/common/data/transaction/filtered/factory/impl/FilteredTransactionFactoryImpl.kt +++ b/libs/ledger/ledger-common-data/src/main/kotlin/net/corda/ledger/common/data/transaction/filtered/factory/impl/FilteredTransactionFactoryImpl.kt @@ -1,6 +1,5 @@ package net.corda.ledger.common.data.transaction.filtered.factory.impl -import net.corda.common.json.validation.JsonValidator import net.corda.crypto.cipher.suite.merkle.MerkleTreeProvider import net.corda.ledger.common.data.transaction.PrivacySaltImpl import net.corda.ledger.common.data.transaction.WireTransaction @@ -11,6 +10,7 @@ import net.corda.ledger.common.data.transaction.filtered.FilteredTransaction import net.corda.ledger.common.data.transaction.filtered.factory.FilteredTransactionFactory import net.corda.ledger.common.data.transaction.filtered.impl.FilteredTransactionImpl import net.corda.ledger.common.data.transaction.getComponentGroupMerkleTreeDigestProvider +import net.corda.libs.json.validator.JsonValidator import net.corda.sandbox.type.SandboxConstants.CORDA_MARKER_ONLY_SERVICE import net.corda.sandbox.type.UsedByFlow import net.corda.sandbox.type.UsedByPersistence diff --git a/libs/ledger/ledger-common-data/src/main/kotlin/net/corda/ledger/common/data/transaction/filtered/impl/FilteredTransactionImpl.kt b/libs/ledger/ledger-common-data/src/main/kotlin/net/corda/ledger/common/data/transaction/filtered/impl/FilteredTransactionImpl.kt index b6dc31d576d..4084f76d045 100644 --- a/libs/ledger/ledger-common-data/src/main/kotlin/net/corda/ledger/common/data/transaction/filtered/impl/FilteredTransactionImpl.kt +++ b/libs/ledger/ledger-common-data/src/main/kotlin/net/corda/ledger/common/data/transaction/filtered/impl/FilteredTransactionImpl.kt @@ -1,6 +1,5 @@ package net.corda.ledger.common.data.transaction.filtered.impl -import net.corda.common.json.validation.JsonValidator import net.corda.crypto.cipher.suite.merkle.MerkleTreeProvider import net.corda.crypto.core.SecureHashImpl import net.corda.ledger.common.data.transaction.COMPONENT_MERKLE_TREE_DIGEST_ALGORITHM_NAME_KEY @@ -13,6 +12,7 @@ import net.corda.ledger.common.data.transaction.TransactionMetadataUtils.parseMe import net.corda.ledger.common.data.transaction.filtered.FilteredComponentGroup import net.corda.ledger.common.data.transaction.filtered.FilteredTransaction import net.corda.ledger.common.data.transaction.filtered.FilteredTransactionVerificationException +import net.corda.libs.json.validator.JsonValidator import net.corda.v5.application.marshalling.JsonMarshallingService import net.corda.v5.crypto.DigestAlgorithmName import net.corda.v5.crypto.SecureHash diff --git a/libs/ledger/ledger-common-data/src/main/kotlin/net/corda/ledger/common/data/transaction/filtered/serializer/amqp/FilteredTransactionSerializer.kt b/libs/ledger/ledger-common-data/src/main/kotlin/net/corda/ledger/common/data/transaction/filtered/serializer/amqp/FilteredTransactionSerializer.kt index b9c1e28e1bb..aba17a6f824 100644 --- a/libs/ledger/ledger-common-data/src/main/kotlin/net/corda/ledger/common/data/transaction/filtered/serializer/amqp/FilteredTransactionSerializer.kt +++ b/libs/ledger/ledger-common-data/src/main/kotlin/net/corda/ledger/common/data/transaction/filtered/serializer/amqp/FilteredTransactionSerializer.kt @@ -1,11 +1,11 @@ package net.corda.ledger.common.data.transaction.filtered.serializer.amqp -import net.corda.common.json.validation.JsonValidator import net.corda.crypto.cipher.suite.merkle.MerkleTreeProvider import net.corda.ledger.common.data.transaction.PrivacySalt import net.corda.ledger.common.data.transaction.filtered.FilteredComponentGroup import net.corda.ledger.common.data.transaction.filtered.FilteredTransaction import net.corda.ledger.common.data.transaction.filtered.impl.FilteredTransactionImpl +import net.corda.libs.json.validator.JsonValidator import net.corda.sandbox.type.SandboxConstants.CORDA_UNINJECTABLE_SERVICE import net.corda.sandbox.type.UsedByFlow import net.corda.sandbox.type.UsedByPersistence diff --git a/libs/ledger/ledger-common-data/src/test/kotlin/net/corda/ledger/common/data/transaction/filtered/factory/impl/FilteredTransactionFactoryImplTest.kt b/libs/ledger/ledger-common-data/src/test/kotlin/net/corda/ledger/common/data/transaction/filtered/factory/impl/FilteredTransactionFactoryImplTest.kt index 87a8af26466..b00e29e0804 100644 --- a/libs/ledger/ledger-common-data/src/test/kotlin/net/corda/ledger/common/data/transaction/filtered/factory/impl/FilteredTransactionFactoryImplTest.kt +++ b/libs/ledger/ledger-common-data/src/test/kotlin/net/corda/ledger/common/data/transaction/filtered/factory/impl/FilteredTransactionFactoryImplTest.kt @@ -4,7 +4,7 @@ import net.corda.application.impl.services.json.JsonMarshallingServiceImpl import net.corda.cipher.suite.impl.CipherSchemeMetadataImpl import net.corda.cipher.suite.impl.DigestServiceImpl import net.corda.cipher.suite.impl.PlatformDigestServiceImpl -import net.corda.common.json.validation.impl.JsonValidatorImpl +import net.corda.common.json.validation.impl.JsonValidatorOsgiImpl import net.corda.crypto.merkle.impl.MerkleTreeProviderImpl import net.corda.ledger.common.data.transaction.TransactionMetadataImpl import net.corda.ledger.common.data.transaction.WireTransaction @@ -40,7 +40,7 @@ class FilteredTransactionFactoryImplTest { private val digestService = DigestServiceImpl(PlatformDigestServiceImpl(CipherSchemeMetadataImpl()), null) private val jsonMarshallingService = JsonMarshallingServiceImpl(mock {}) - private val jsonValidator = JsonValidatorImpl() + private val jsonValidator = JsonValidatorOsgiImpl() private val merkleTreeProvider = MerkleTreeProviderImpl(digestService) private val serializationService = mock() diff --git a/libs/ledger/ledger-common-data/src/test/kotlin/net/corda/ledger/common/data/transaction/filtered/impl/FilteredTransactionImplTest.kt b/libs/ledger/ledger-common-data/src/test/kotlin/net/corda/ledger/common/data/transaction/filtered/impl/FilteredTransactionImplTest.kt index 15694c33f06..401ed4b9496 100644 --- a/libs/ledger/ledger-common-data/src/test/kotlin/net/corda/ledger/common/data/transaction/filtered/impl/FilteredTransactionImplTest.kt +++ b/libs/ledger/ledger-common-data/src/test/kotlin/net/corda/ledger/common/data/transaction/filtered/impl/FilteredTransactionImplTest.kt @@ -3,7 +3,6 @@ package net.corda.ledger.common.data.transaction.filtered.impl import net.corda.cipher.suite.impl.CipherSchemeMetadataImpl import net.corda.cipher.suite.impl.DigestServiceImpl import net.corda.cipher.suite.impl.PlatformDigestServiceImpl -import net.corda.common.json.validation.JsonValidator import net.corda.crypto.core.SecureHashImpl import net.corda.crypto.merkle.impl.IndexedMerkleLeafImpl import net.corda.crypto.merkle.impl.MerkleTreeProviderImpl @@ -13,6 +12,7 @@ import net.corda.ledger.common.data.transaction.WireTransactionDigestSettings import net.corda.ledger.common.data.transaction.filtered.FilteredComponentGroup import net.corda.ledger.common.data.transaction.filtered.FilteredTransaction import net.corda.ledger.common.data.transaction.filtered.FilteredTransactionVerificationException +import net.corda.libs.json.validator.JsonValidator import net.corda.v5.application.marshalling.JsonMarshallingService import net.corda.v5.crypto.DigestAlgorithmName import net.corda.v5.crypto.SecureHash diff --git a/libs/serialization/json-validator-lib-impl/build.gradle b/libs/serialization/json-validator-lib-impl/build.gradle new file mode 100644 index 00000000000..46c1ed82f1c --- /dev/null +++ b/libs/serialization/json-validator-lib-impl/build.gradle @@ -0,0 +1,53 @@ +plugins { + id 'biz.aQute.bnd.builder' + id 'corda.common-library' + id 'corda.common-publishing' +} + +description 'JSON Validator Lib Impl' + +configurations { + bundle { + canBeResolved = false + } + bundle.extendsFrom runtimeClasspath +} + +dependencies { + compileOnly 'org.osgi:osgi.annotation' + compileOnly 'org.osgi:org.osgi.service.component.annotations' + + implementation platform("net.corda:corda-api:$cordaApiVersion") + + implementation project(":libs:serialization:json-validator-lib") + implementation "com.networknt:json-schema-validator:$networkntJsonSchemaVersion" + implementation 'org.jetbrains.kotlin:kotlin-stdlib' + implementation "io.github.erdtman:java-json-canonicalization:$jsonCanonicalizerVersion" + + constraints { + implementation("com.ethlo.time:itu:$comEthloTimeItuVersion") { + because "Version bundled with current version of 'com.networknt:json-schema-validator' does not have OSGi manifest." + } + } +} + +def jar = tasks.named('jar', Jar) { + archiveBaseName = 'corda-json-validator-lib-impl' + + bundle { + bnd """\ +Bundle-Name: Corda JSON Validator Lib Impl +Bundle-SymbolicName: \${project.group}.json-validator-lib-impl +Import-Package:\ + !org.apache.hadoop.io.compress,\ + sun.misc;resolution:=optional,\ + * +-includeresource: @java-json-canonicalization-${jsonCanonicalizerVersion}.jar +""" + } +} + +artifacts { + bundle jar +} + diff --git a/libs/serialization/json-validator-lib-impl/src/main/java/net/corda/libs/json/validator/impl/package-info.java b/libs/serialization/json-validator-lib-impl/src/main/java/net/corda/libs/json/validator/impl/package-info.java new file mode 100644 index 00000000000..825d4df16a2 --- /dev/null +++ b/libs/serialization/json-validator-lib-impl/src/main/java/net/corda/libs/json/validator/impl/package-info.java @@ -0,0 +1,4 @@ +@Export +package net.corda.libs.json.validator.impl; + +import org.osgi.annotation.bundle.Export; \ No newline at end of file diff --git a/libs/serialization/json-validator/src/main/kotlin/net/corda/common/json/validation/impl/JsonValidatorImpl.kt b/libs/serialization/json-validator-lib-impl/src/main/kotlin/net/corda/libs/json/validator/impl/JsonValidatorImpl.kt similarity index 59% rename from libs/serialization/json-validator/src/main/kotlin/net/corda/common/json/validation/impl/JsonValidatorImpl.kt rename to libs/serialization/json-validator-lib-impl/src/main/kotlin/net/corda/libs/json/validator/impl/JsonValidatorImpl.kt index 84ffc9afbad..cca75e9569b 100644 --- a/libs/serialization/json-validator/src/main/kotlin/net/corda/common/json/validation/impl/JsonValidatorImpl.kt +++ b/libs/serialization/json-validator-lib-impl/src/main/kotlin/net/corda/libs/json/validator/impl/JsonValidatorImpl.kt @@ -1,27 +1,15 @@ -package net.corda.common.json.validation.impl +package net.corda.libs.json.validator.impl import com.fasterxml.jackson.databind.ObjectMapper import com.networknt.schema.JsonSchemaFactory import com.networknt.schema.SpecVersion import com.networknt.schema.ValidationMessage -import net.corda.common.json.validation.JsonValidator -import net.corda.common.json.validation.WrappedJsonSchema -import net.corda.sandbox.type.UsedByFlow -import net.corda.sandbox.type.UsedByPersistence -import net.corda.sandbox.type.UsedByVerification -import net.corda.v5.serialization.SingletonSerializeAsToken +import net.corda.libs.json.validator.WrappedJsonSchema +import net.corda.libs.json.validator.JsonValidator import org.erdtman.jcs.JsonCanonicalizer -import org.osgi.service.component.annotations.Component -import org.osgi.service.component.annotations.ServiceScope import java.io.InputStream -@Component( - service = [ JsonValidator::class, UsedByFlow::class, UsedByPersistence::class, UsedByVerification::class ], - scope = ServiceScope.PROTOTYPE -) -class JsonValidatorImpl: JsonValidator, - UsedByFlow, UsedByPersistence, UsedByVerification, SingletonSerializeAsToken { - +class JsonValidatorImpl : JsonValidator { override fun validate(json: String, wrappedSchema: WrappedJsonSchema) { val errors = validateSchema(json, wrappedSchema) @@ -32,7 +20,8 @@ class JsonValidatorImpl: JsonValidator, override fun canonicalize(json: String): String = JsonCanonicalizer(json).encodedString override fun parseSchema(schema: InputStream): WrappedJsonSchema = - WrappedJsonSchema(JsonSchemaFactory + WrappedJsonSchema( + JsonSchemaFactory .getInstance(SpecVersion.VersionFlag.V201909) .getSchema(schema)) @@ -43,4 +32,4 @@ class JsonValidatorImpl: JsonValidator, .validate(data) } private fun isCanonical(json: String): Boolean = canonicalize(json) == json -} +} \ No newline at end of file diff --git a/libs/serialization/json-validator/src/test/kotlin/net/corda/common/json/validation/impl/JsonValidatorImplTest.kt b/libs/serialization/json-validator-lib-impl/src/test/kotlin/net/corda/libs/json/validator/impl/JsonValidatorImplTest.kt similarity index 96% rename from libs/serialization/json-validator/src/test/kotlin/net/corda/common/json/validation/impl/JsonValidatorImplTest.kt rename to libs/serialization/json-validator-lib-impl/src/test/kotlin/net/corda/libs/json/validator/impl/JsonValidatorImplTest.kt index 4d599128398..e8cf05066c5 100644 --- a/libs/serialization/json-validator/src/test/kotlin/net/corda/common/json/validation/impl/JsonValidatorImplTest.kt +++ b/libs/serialization/json-validator-lib-impl/src/test/kotlin/net/corda/libs/json/validator/impl/JsonValidatorImplTest.kt @@ -1,4 +1,4 @@ -package net.corda.common.json.validation.impl +package net.corda.libs.json.validator.impl import org.junit.jupiter.api.Test import org.junit.jupiter.api.assertDoesNotThrow diff --git a/libs/serialization/json-validator/src/test/resources/schema/simple.json b/libs/serialization/json-validator-lib-impl/src/test/resources/schema/simple.json similarity index 100% rename from libs/serialization/json-validator/src/test/resources/schema/simple.json rename to libs/serialization/json-validator-lib-impl/src/test/resources/schema/simple.json diff --git a/libs/serialization/json-validator-lib/build.gradle b/libs/serialization/json-validator-lib/build.gradle new file mode 100644 index 00000000000..267e5d17e62 --- /dev/null +++ b/libs/serialization/json-validator-lib/build.gradle @@ -0,0 +1,16 @@ +plugins { + id 'corda.common-library' + id 'corda.common-publishing' +} + +description 'JSON Validator Lib' + +dependencies { + compileOnly 'org.osgi:osgi.annotation' + compileOnly 'org.osgi:org.osgi.service.component.annotations' + + implementation platform("net.corda:corda-api:$cordaApiVersion") + implementation "com.networknt:json-schema-validator:$networkntJsonSchemaVersion" + implementation 'org.jetbrains.kotlin:kotlin-stdlib' + implementation "io.github.erdtman:java-json-canonicalization:$jsonCanonicalizerVersion" +} diff --git a/libs/serialization/json-validator-lib/src/main/java/net/corda/libs/json/validator/package-info.java b/libs/serialization/json-validator-lib/src/main/java/net/corda/libs/json/validator/package-info.java new file mode 100644 index 00000000000..c9744368234 --- /dev/null +++ b/libs/serialization/json-validator-lib/src/main/java/net/corda/libs/json/validator/package-info.java @@ -0,0 +1,4 @@ +@Export +package net.corda.libs.json.validator; + +import org.osgi.annotation.bundle.Export; \ No newline at end of file diff --git a/libs/serialization/json-validator/src/main/kotlin/net/corda/common/json/validation/JsonValidator.kt b/libs/serialization/json-validator-lib/src/main/kotlin/net/corda/libs/json/validator/JsonValidator.kt similarity index 84% rename from libs/serialization/json-validator/src/main/kotlin/net/corda/common/json/validation/JsonValidator.kt rename to libs/serialization/json-validator-lib/src/main/kotlin/net/corda/libs/json/validator/JsonValidator.kt index cf829b84d2f..cc76f7a0457 100644 --- a/libs/serialization/json-validator/src/main/kotlin/net/corda/common/json/validation/JsonValidator.kt +++ b/libs/serialization/json-validator-lib/src/main/kotlin/net/corda/libs/json/validator/JsonValidator.kt @@ -1,4 +1,4 @@ -package net.corda.common.json.validation +package net.corda.libs.json.validator import java.io.InputStream diff --git a/libs/serialization/json-validator/src/main/kotlin/net/corda/common/json/validation/WrappedJsonSchema.kt b/libs/serialization/json-validator-lib/src/main/kotlin/net/corda/libs/json/validator/WrappedJsonSchema.kt similarity index 69% rename from libs/serialization/json-validator/src/main/kotlin/net/corda/common/json/validation/WrappedJsonSchema.kt rename to libs/serialization/json-validator-lib/src/main/kotlin/net/corda/libs/json/validator/WrappedJsonSchema.kt index d8f853c134d..b96d1b042fd 100644 --- a/libs/serialization/json-validator/src/main/kotlin/net/corda/common/json/validation/WrappedJsonSchema.kt +++ b/libs/serialization/json-validator-lib/src/main/kotlin/net/corda/libs/json/validator/WrappedJsonSchema.kt @@ -1,4 +1,4 @@ -package net.corda.common.json.validation +package net.corda.libs.json.validator import com.networknt.schema.JsonSchema diff --git a/libs/serialization/json-validator/build.gradle b/libs/serialization/json-validator/build.gradle index 9c756d3b442..a96f503fdff 100644 --- a/libs/serialization/json-validator/build.gradle +++ b/libs/serialization/json-validator/build.gradle @@ -1,17 +1,9 @@ plugins { - id 'biz.aQute.bnd.builder' id 'corda.common-library' id 'corda.common-publishing' } -description 'JSON schema validation and canonicalisation' - -configurations { - bundle { - canBeResolved = false - } - bundle.extendsFrom runtimeClasspath -} +description 'JSON Validator OSGi Impl' dependencies { compileOnly 'org.osgi:osgi.annotation' @@ -19,36 +11,9 @@ dependencies { implementation platform("net.corda:corda-api:$cordaApiVersion") implementation project(':libs:sandbox-types') + implementation project(':libs:serialization:json-validator-lib') + implementation project(':libs:serialization:json-validator-lib-impl') implementation 'net.corda:corda-base' implementation 'net.corda:corda-serialization' implementation 'org.jetbrains.kotlin:kotlin-osgi-bundle' - implementation "io.github.erdtman:java-json-canonicalization:$jsonCanonicalizerVersion" - implementation "com.networknt:json-schema-validator:$networkntJsonSchemaVersion" - constraints { - implementation("com.ethlo.time:itu:$comEthloTimeItuVersion") { - because "Version bundled with current version of 'com.networknt:json-schema-validator' does not have OSGi manifest." - } - } - implementation libs.jackson.databind -} - -def jar = tasks.named('jar', Jar) { - archiveBaseName = 'corda-json-validator' - - bundle { - bnd """\ -Bundle-Name: Corda JSON validator -Bundle-SymbolicName: \${project.group}.json-validator -Import-Package:\ - !org.apache.hadoop.io.compress,\ - sun.misc;resolution:=optional,\ - * --includeresource: @java-json-canonicalization-${jsonCanonicalizerVersion}.jar -""" - } -} - -artifacts { - bundle jar } - diff --git a/libs/serialization/json-validator/src/main/java/net/corda/common/json/validation/package-info.java b/libs/serialization/json-validator/src/main/java/net/corda/common/json/validation/package-info.java deleted file mode 100644 index 99fef028060..00000000000 --- a/libs/serialization/json-validator/src/main/java/net/corda/common/json/validation/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -@Export -package net.corda.common.json.validation; - -import org.osgi.annotation.bundle.Export; diff --git a/libs/serialization/json-validator/src/main/kotlin/net/corda/common/json/validation/impl/JsonValidatorOsgiImpl.kt b/libs/serialization/json-validator/src/main/kotlin/net/corda/common/json/validation/impl/JsonValidatorOsgiImpl.kt new file mode 100644 index 00000000000..fa33b35cfe5 --- /dev/null +++ b/libs/serialization/json-validator/src/main/kotlin/net/corda/common/json/validation/impl/JsonValidatorOsgiImpl.kt @@ -0,0 +1,27 @@ +package net.corda.common.json.validation.impl + +import net.corda.libs.json.validator.JsonValidator +import net.corda.libs.json.validator.impl.JsonValidatorImpl +import net.corda.sandbox.type.UsedByFlow +import net.corda.sandbox.type.UsedByPersistence +import net.corda.sandbox.type.UsedByVerification +import net.corda.v5.serialization.SingletonSerializeAsToken +import org.osgi.service.component.annotations.Activate +import org.osgi.service.component.annotations.Component +import org.osgi.service.component.annotations.ServiceScope + +@Component( + service = [JsonValidator::class, UsedByFlow::class, UsedByPersistence::class, UsedByVerification::class], + scope = ServiceScope.PROTOTYPE +) +class JsonValidatorOsgiImpl( + delegate: JsonValidator +) : JsonValidator by delegate, + UsedByFlow, + UsedByPersistence, + UsedByVerification, + SingletonSerializeAsToken { + + @Activate + constructor() : this(JsonValidatorImpl()) +} diff --git a/settings.gradle b/settings.gradle index 4ac907e7679..d5b323bbbea 100644 --- a/settings.gradle +++ b/settings.gradle @@ -328,6 +328,7 @@ include 'libs:permissions:permission-datamodel' include 'libs:permissions:permission-validation' include 'libs:permissions:permission-validation-impl' include 'libs:permissions:permission-password' +include 'libs:ledger-lib-persistence' include 'libs:sandbox' include 'libs:sandbox-hooks' include 'libs:sandbox-internal' @@ -346,6 +347,8 @@ include 'libs:schema-registry:schema-registry-impl' include 'libs:serialization:serialization-checkpoint-api' include 'libs:serialization:json-serializers' include 'libs:serialization:json-validator' +include 'libs:serialization:json-validator-lib' +include 'libs:serialization:json-validator-lib-impl' include 'libs:serialization:kryo-serializers' include 'libs:serialization:serialization-amqp' include 'libs:serialization:serialization-amqp-api' diff --git a/testing/ledger/ledger-common-base-integration-test/build.gradle b/testing/ledger/ledger-common-base-integration-test/build.gradle index aab2083cc43..3d4e161a712 100644 --- a/testing/ledger/ledger-common-base-integration-test/build.gradle +++ b/testing/ledger/ledger-common-base-integration-test/build.gradle @@ -20,5 +20,6 @@ dependencies { implementation project(':components:flow:flow-service') implementation project(':libs:serialization:serialization-checkpoint-api') implementation project(':libs:serialization:serialization-internal') + implementation project(':libs:serialization:json-validator-lib') implementation "org.osgi:org.osgi.test.junit5:$osgiTestJunit5Version" } \ No newline at end of file diff --git a/testing/ledger/ledger-common-base-integration-test/src/main/kotlin/net/corda/ledger/common/integration/test/CommonLedgerIntegrationTest.kt b/testing/ledger/ledger-common-base-integration-test/src/main/kotlin/net/corda/ledger/common/integration/test/CommonLedgerIntegrationTest.kt index 05963c34a68..287bbcff691 100644 --- a/testing/ledger/ledger-common-base-integration-test/src/main/kotlin/net/corda/ledger/common/integration/test/CommonLedgerIntegrationTest.kt +++ b/testing/ledger/ledger-common-base-integration-test/src/main/kotlin/net/corda/ledger/common/integration/test/CommonLedgerIntegrationTest.kt @@ -1,6 +1,6 @@ package net.corda.ledger.common.integration.test -import net.corda.common.json.validation.JsonValidator +import net.corda.libs.json.validator.JsonValidator import net.corda.flow.pipeline.sandbox.FlowSandboxService import net.corda.flow.pipeline.sandbox.impl.FlowSandboxGroupContextImpl import net.corda.internal.serialization.AMQP_STORAGE_CONTEXT diff --git a/testing/ledger/ledger-common-base-test/src/main/kotlin/net/corda/ledger/common/test/CommonLedgerTest.kt b/testing/ledger/ledger-common-base-test/src/main/kotlin/net/corda/ledger/common/test/CommonLedgerTest.kt index 4c96b6bd27b..b025f73c2d1 100644 --- a/testing/ledger/ledger-common-base-test/src/main/kotlin/net/corda/ledger/common/test/CommonLedgerTest.kt +++ b/testing/ledger/ledger-common-base-test/src/main/kotlin/net/corda/ledger/common/test/CommonLedgerTest.kt @@ -4,7 +4,7 @@ import net.corda.application.impl.services.json.JsonMarshallingServiceImpl import net.corda.cipher.suite.impl.CipherSchemeMetadataImpl import net.corda.cipher.suite.impl.DigestServiceImpl import net.corda.cipher.suite.impl.PlatformDigestServiceImpl -import net.corda.common.json.validation.impl.JsonValidatorImpl +import net.corda.common.json.validation.impl.JsonValidatorOsgiImpl import net.corda.crypto.cipher.suite.merkle.MerkleProofProvider import net.corda.crypto.merkle.impl.MerkleTreeProviderImpl import net.corda.flow.application.crypto.SignatureSpecServiceImpl @@ -42,7 +42,7 @@ abstract class CommonLedgerTest { val jsonMarshallingService = JsonMarshallingServiceImpl(mock{}) - val jsonValidator = JsonValidatorImpl() + val jsonValidator = JsonValidatorOsgiImpl() val wireTransactionFactory = WireTransactionFactoryImpl( merkleTreeProvider, digestService, jsonMarshallingService, jsonValidator diff --git a/testing/ledger/ledger-common-testkit/build.gradle b/testing/ledger/ledger-common-testkit/build.gradle index 17d47afc46e..1bbc77986f9 100644 --- a/testing/ledger/ledger-common-testkit/build.gradle +++ b/testing/ledger/ledger-common-testkit/build.gradle @@ -17,5 +17,6 @@ dependencies { api project(':libs:application:application-impl') api project(':libs:platform-info') api project(":libs:serialization:json-validator") + api project(":libs:serialization:json-validator-lib") runtimeOnly project(':testing:ledger:ledger-hsqldb') } diff --git a/testing/ledger/ledger-common-testkit/src/main/kotlin/net/corda/ledger/common/testkit/WireTransactionExample.kt b/testing/ledger/ledger-common-testkit/src/main/kotlin/net/corda/ledger/common/testkit/WireTransactionExample.kt index 0254c64c182..45909ab2b7f 100644 --- a/testing/ledger/ledger-common-testkit/src/main/kotlin/net/corda/ledger/common/testkit/WireTransactionExample.kt +++ b/testing/ledger/ledger-common-testkit/src/main/kotlin/net/corda/ledger/common/testkit/WireTransactionExample.kt @@ -1,6 +1,6 @@ package net.corda.ledger.common.testkit -import net.corda.common.json.validation.JsonValidator +import net.corda.libs.json.validator.JsonValidator import net.corda.crypto.cipher.suite.merkle.MerkleTreeProvider import net.corda.ledger.common.data.transaction.TransactionMetadataInternal import net.corda.ledger.common.data.transaction.WireTransaction diff --git a/testing/ledger/ledger-consensual-base-test/build.gradle b/testing/ledger/ledger-consensual-base-test/build.gradle index 6b08b99f72b..e16f51dddbd 100644 --- a/testing/ledger/ledger-consensual-base-test/build.gradle +++ b/testing/ledger/ledger-consensual-base-test/build.gradle @@ -12,5 +12,6 @@ dependencies { implementation project(':components:ledger:ledger-consensual-flow') implementation project(":libs:serialization:json-validator") + implementation project(":libs:serialization:json-validator-lib") implementation libs.mockito.kotlin } \ No newline at end of file diff --git a/testing/ledger/ledger-consensual-testkit/build.gradle b/testing/ledger/ledger-consensual-testkit/build.gradle index 4a687c8ff77..3f05fd4011d 100644 --- a/testing/ledger/ledger-consensual-testkit/build.gradle +++ b/testing/ledger/ledger-consensual-testkit/build.gradle @@ -12,6 +12,7 @@ dependencies { implementation project(':libs:crypto:cipher-suite') implementation project(":libs:serialization:json-validator") + implementation project(":libs:serialization:json-validator-lib") implementation project(':libs:ledger:ledger-common-data') implementation project(':libs:ledger:ledger-consensual-data') implementation project(':testing:ledger:ledger-common-testkit') diff --git a/testing/ledger/ledger-consensual-testkit/src/main/kotlin/net/corda/ledger/consensual/testkit/ConsensualSignedTransactionExample.kt b/testing/ledger/ledger-consensual-testkit/src/main/kotlin/net/corda/ledger/consensual/testkit/ConsensualSignedTransactionExample.kt index e24d7044608..a5e88f8b321 100644 --- a/testing/ledger/ledger-consensual-testkit/src/main/kotlin/net/corda/ledger/consensual/testkit/ConsensualSignedTransactionExample.kt +++ b/testing/ledger/ledger-consensual-testkit/src/main/kotlin/net/corda/ledger/consensual/testkit/ConsensualSignedTransactionExample.kt @@ -1,6 +1,6 @@ package net.corda.ledger.consensual.testkit -import net.corda.common.json.validation.JsonValidator +import net.corda.libs.json.validator.JsonValidator import net.corda.crypto.cipher.suite.merkle.MerkleTreeProvider import net.corda.ledger.common.data.transaction.factory.WireTransactionFactory import net.corda.ledger.common.flow.transaction.TransactionSignatureServiceInternal diff --git a/testing/ledger/ledger-hsqldb/build.gradle b/testing/ledger/ledger-hsqldb/build.gradle index ac3c873e60f..b6b157c3cbe 100644 --- a/testing/ledger/ledger-hsqldb/build.gradle +++ b/testing/ledger/ledger-hsqldb/build.gradle @@ -15,6 +15,7 @@ dependencies { implementation project(':libs:db:db-orm') implementation project(':libs:ledger:ledger-utxo-data') implementation project(':libs:utilities') + implementation project(':libs:ledger-lib-persistence') implementation project(':testing:db-hsqldb-json') implementation libs.slf4j.api runtimeOnly "org.hsqldb:hsqldb:$hsqldbVersion" diff --git a/testing/ledger/ledger-hsqldb/src/main/kotlin/net/corda/testing/ledger/utxo/HsqldbUtxoQueryProvider.kt b/testing/ledger/ledger-hsqldb/src/main/kotlin/net/corda/testing/ledger/utxo/HsqldbUtxoQueryProvider.kt index 23471b040c4..0644423dd5d 100644 --- a/testing/ledger/ledger-hsqldb/src/main/kotlin/net/corda/testing/ledger/utxo/HsqldbUtxoQueryProvider.kt +++ b/testing/ledger/ledger-hsqldb/src/main/kotlin/net/corda/testing/ledger/utxo/HsqldbUtxoQueryProvider.kt @@ -1,7 +1,7 @@ package net.corda.testing.ledger.utxo -import net.corda.ledger.persistence.utxo.impl.AbstractUtxoQueryProvider -import net.corda.ledger.persistence.utxo.impl.UtxoQueryProvider +import net.corda.ledger.libs.persistence.utxo.impl.AbstractUtxoQueryProvider +import net.corda.ledger.libs.persistence.utxo.impl.UtxoQueryProvider import net.corda.ledger.utxo.data.transaction.UtxoComponentGroup import net.corda.orm.DatabaseTypeProvider import net.corda.orm.DatabaseTypeProvider.Companion.HSQLDB_TYPE_FILTER diff --git a/testing/ledger/ledger-utxo-testkit/build.gradle b/testing/ledger/ledger-utxo-testkit/build.gradle index b7387f1b29e..87be3897c3c 100644 --- a/testing/ledger/ledger-utxo-testkit/build.gradle +++ b/testing/ledger/ledger-utxo-testkit/build.gradle @@ -15,6 +15,7 @@ dependencies { implementation project(':libs:ledger:ledger-common-data') implementation project(':libs:ledger:ledger-utxo-data') implementation project(':libs:serialization:json-validator') + implementation project(':libs:serialization:json-validator-lib') implementation project(':testing:ledger:ledger-common-testkit') api project(':testing:ledger:ledger-common-base-integration-test') } diff --git a/testing/ledger/ledger-utxo-testkit/src/main/kotlin/net/corda/ledger/utxo/testkit/UtxoSignedTransactionExample.kt b/testing/ledger/ledger-utxo-testkit/src/main/kotlin/net/corda/ledger/utxo/testkit/UtxoSignedTransactionExample.kt index 1b15b07cfaa..a8e4a94dec4 100644 --- a/testing/ledger/ledger-utxo-testkit/src/main/kotlin/net/corda/ledger/utxo/testkit/UtxoSignedTransactionExample.kt +++ b/testing/ledger/ledger-utxo-testkit/src/main/kotlin/net/corda/ledger/utxo/testkit/UtxoSignedTransactionExample.kt @@ -1,6 +1,6 @@ package net.corda.ledger.utxo.testkit -import net.corda.common.json.validation.JsonValidator +import net.corda.libs.json.validator.JsonValidator import net.corda.crypto.cipher.suite.merkle.MerkleTreeProvider import net.corda.ledger.common.data.transaction.factory.WireTransactionFactory import net.corda.ledger.common.flow.transaction.TransactionSignatureServiceInternal