diff --git a/constants.properties b/constants.properties index c8bd8d9ded..31a1dfef78 100644 --- a/constants.properties +++ b/constants.properties @@ -29,7 +29,7 @@ snakeYamlVersion=1.19 caffeineVersion=2.7.0 metricsVersion=4.1.0 metricsNewRelicVersion=1.1.1 -djvmVersion=5.0-SNAPSHOT +djvmVersion=1.0-SNAPSHOT openSourceBranch=https://github.com/corda/corda/blob/master openSourceSamplesBranch=https://github.com/corda/samples/blob/master jolokiaAgentVersion=1.6.1 diff --git a/node/build.gradle b/node/build.gradle index d619cdb6c9..6b9a0cc1ba 100644 --- a/node/build.gradle +++ b/node/build.gradle @@ -180,15 +180,15 @@ dependencies { compile "com.typesafe:config:$typesafe_config_version" // Sandbox for deterministic contract verification - compile "net.corda:corda-djvm:$djvm_version" - compile "net.corda:corda-djvm-serialization:$djvm_version" + compile "net.corda.djvm:corda-djvm:$djvm_version" + compile "net.corda.djvm:corda-djvm-serialization:$djvm_version" compile(project(':node:djvm')) { transitive = false } jdkRt "net.corda:deterministic-rt:latest.integration" deterministic project(path: ':core-deterministic', configuration: 'deterministicArtifacts') deterministic project(path: ':serialization-deterministic', configuration: 'deterministicArtifacts') - deterministic("net.corda:corda-djvm-deserializers:$djvm_version") { + deterministic("net.corda.djvm:corda-djvm-deserializers:$djvm_version") { transitive = false } deterministic(project(':node:djvm')) { diff --git a/node/src/main/kotlin/net/corda/node/internal/djvm/DeterministicVerifier.kt b/node/src/main/kotlin/net/corda/node/internal/djvm/DeterministicVerifier.kt index 99d3d1d0d3..c5a85c016c 100644 --- a/node/src/main/kotlin/net/corda/node/internal/djvm/DeterministicVerifier.kt +++ b/node/src/main/kotlin/net/corda/node/internal/djvm/DeterministicVerifier.kt @@ -9,7 +9,6 @@ import net.corda.core.internal.* import net.corda.core.serialization.serialize import net.corda.core.transactions.LedgerTransaction import net.corda.djvm.SandboxConfiguration -import net.corda.djvm.analysis.AnalysisConfiguration import net.corda.djvm.execution.* import net.corda.djvm.messages.Message import net.corda.djvm.source.ClassSource @@ -18,17 +17,11 @@ import net.corda.node.djvm.LtxFactory class DeterministicVerifier( ltx: LedgerTransaction, transactionClassLoader: ClassLoader, - private val analysisConfiguration: AnalysisConfiguration + private val sandboxConfiguration: SandboxConfiguration ) : Verifier(ltx, transactionClassLoader) { override fun verifyContracts() { - val configuration = SandboxConfiguration.createFor( - analysisConfiguration = analysisConfiguration, - profile = ExecutionProfile.DEFAULT, - enableTracing = false - ) - - val result = IsolatedTask(ltx.id.toString(), configuration).run { + val result = IsolatedTask(ltx.id.toString(), sandboxConfiguration).run { val taskFactory = classLoader.createRawTaskFactory() val sandboxBasicInput = classLoader.createBasicInput() @@ -98,7 +91,6 @@ class DeterministicVerifier( @Throws(Exception::class) override fun close() { - // analysisConfiguration.closeAll() } } diff --git a/node/src/main/kotlin/net/corda/node/services/transactions/DeterministicVerifierFactoryService.kt b/node/src/main/kotlin/net/corda/node/services/transactions/DeterministicVerifierFactoryService.kt index eb1471160f..05ff213a23 100644 --- a/node/src/main/kotlin/net/corda/node/services/transactions/DeterministicVerifierFactoryService.kt +++ b/node/src/main/kotlin/net/corda/node/services/transactions/DeterministicVerifierFactoryService.kt @@ -7,8 +7,10 @@ import net.corda.core.serialization.CordaSerializable import net.corda.core.serialization.DeprecatedConstructorForDeserialization import net.corda.core.serialization.SingletonSerializeAsToken import net.corda.core.transactions.LedgerTransaction +import net.corda.djvm.SandboxConfiguration import net.corda.djvm.analysis.AnalysisConfiguration import net.corda.djvm.analysis.Whitelist +import net.corda.djvm.execution.ExecutionProfile import net.corda.djvm.source.ApiSource import net.corda.djvm.source.UserPathSource import net.corda.djvm.source.UserSource @@ -20,15 +22,10 @@ class DeterministicVerifierFactoryService( private val bootstrapSource: ApiSource, private val cordaSource: UserSource? ) : SingletonSerializeAsToken(), AutoCloseable { + private val baseSandboxConfiguration: SandboxConfiguration - fun specialise(ltx: LedgerTransaction, classLoader: ClassLoader): Verifier { - return (classLoader as? URLClassLoader)?.run { - DeterministicVerifier(ltx, classLoader, createSandbox(classLoader.urLs)) - } ?: BasicVerifier(ltx, classLoader) - } - - private fun createSandbox(userSource: Array): AnalysisConfiguration { - return AnalysisConfiguration.createRoot( + init { + val baseAnalysisConfiguration = AnalysisConfiguration.createRoot( userSource = cordaSource!!, whitelist = Whitelist.MINIMAL, visibleAnnotations = setOf( @@ -37,11 +34,23 @@ class DeterministicVerifierFactoryService( DeprecatedConstructorForDeserialization::class.java ), bootstrapSource = bootstrapSource - ).createChild( - userSource = UserPathSource(userSource), - newMinimumSeverityLevel = null, - visibleAnnotations = emptySet() ) + + baseSandboxConfiguration = SandboxConfiguration.createFor( + analysisConfiguration = baseAnalysisConfiguration, + profile = ExecutionProfile.DEFAULT, + enableTracing = false + ) + } + + fun specialise(ltx: LedgerTransaction, classLoader: ClassLoader): Verifier { + return (classLoader as? URLClassLoader)?.run { + DeterministicVerifier(ltx, classLoader, createSandbox(classLoader.urLs)) + } ?: BasicVerifier(ltx, classLoader) + } + + private fun createSandbox(userSource: Array): SandboxConfiguration { + return baseSandboxConfiguration.createChild(UserPathSource(userSource)) } override fun close() {