diff --git a/build.gradle.kts b/build.gradle.kts index 62ddf3ed..592867e5 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -27,24 +27,6 @@ subprojects { } repositories { - fun figureNexusUsername() = findProperty("nexusUser")?.toString() ?: System.getenv("NEXUS_USER") - fun figureNexusPassword() = findProperty("nexusPass")?.toString() ?: System.getenv("NEXUS_PASS") - - maven { - url = uri("https://nexus.figure.com/repository/mirror") - credentials { - username = figureNexusUsername() - password = figureNexusPassword() - } - } - maven { - url = uri("https://nexus.figure.com/repository/figure") - credentials { - username = figureNexusUsername() - password = figureNexusPassword() - } - } - mavenCentral() } @@ -140,7 +122,6 @@ allprojects { version = semVersion repositories { - mavenLocal() mavenCentral() } } diff --git a/buildSrc/src/main/kotlin/Dependencies.kt b/buildSrc/src/main/kotlin/Dependencies.kt index 1b3eb549..bb5b36af 100644 --- a/buildSrc/src/main/kotlin/Dependencies.kt +++ b/buildSrc/src/main/kotlin/Dependencies.kt @@ -35,7 +35,7 @@ object Versions { const val ProvenanceClient = "1.1.1" const val Unirest = "3.13.6" const val KeyAccessLib = "0.2.15" - const val LoanPackage = "0.1.10" + const val LoanPackage = "0.1.13" const val Grpc = "1.45.0" const val ProvenanceProto = "1.8.0" const val Reflections = "0.9.10" diff --git a/dc.sh b/dc.sh index 7893fb78..672aaf85 100755 --- a/dc.sh +++ b/dc.sh @@ -54,7 +54,7 @@ function publish() { if [[ -d "$FULL_PATH" ]]; then pushd $PATH_TO_CONTRACTS > /dev/null - ./gradlew p8eClean p8eCheck p8eBootstrap --info && ./gradlew publishToMavenLocal --info + ./gradlew p8eClean p8eCheck p8eBootstrap --info && ./gradlew publishToMavenLocal -xsignMavenPublication --info popd > /dev/null else echo "Invalid path. Provide a valid path to the contracts directory you wish to publish." diff --git a/models/build.gradle.kts b/models/build.gradle.kts index 5defacc5..dc6876f5 100644 --- a/models/build.gradle.kts +++ b/models/build.gradle.kts @@ -17,6 +17,7 @@ dependencies { Dependencies.P8eScope.ContractBase, Dependencies.Provenance.AssetModel, Dependencies.Kotlin.CoroutinesReactor, + Dependencies.Jackson.Databind, ).forEach { dep -> dep.implementation(this) } diff --git a/models/src/main/kotlin/io/provenance/api/models/account/AccountInfo.kt b/models/src/main/kotlin/io/provenance/api/models/account/AccountInfo.kt index f73e2b4b..78eab0f2 100644 --- a/models/src/main/kotlin/io/provenance/api/models/account/AccountInfo.kt +++ b/models/src/main/kotlin/io/provenance/api/models/account/AccountInfo.kt @@ -1,12 +1,9 @@ package io.provenance.api.models.account import io.provenance.scope.contract.proto.Specifications -import java.util.UUID data class AccountInfo( - val originatorUuid: UUID, val keyRingIndex: Int = 0, val keyIndex: Int = 0, - val isTestNet: Boolean = true, val partyType: Specifications.PartyType = Specifications.PartyType.OWNER, ) diff --git a/models/src/main/kotlin/io/provenance/api/models/account/Participant.kt b/models/src/main/kotlin/io/provenance/api/models/account/Participant.kt new file mode 100644 index 00000000..a42afefa --- /dev/null +++ b/models/src/main/kotlin/io/provenance/api/models/account/Participant.kt @@ -0,0 +1,9 @@ +package io.provenance.api.models.account + +import io.provenance.scope.contract.proto.Specifications +import java.util.UUID + +data class Participant( + val uuid: UUID, + val partyType: Specifications.PartyType, +) diff --git a/models/src/main/kotlin/io/provenance/api/models/cee/ApproveContractRequest.kt b/models/src/main/kotlin/io/provenance/api/models/cee/ApproveContractRequest.kt index 19656aff..4f8b008c 100644 --- a/models/src/main/kotlin/io/provenance/api/models/cee/ApproveContractRequest.kt +++ b/models/src/main/kotlin/io/provenance/api/models/cee/ApproveContractRequest.kt @@ -6,7 +6,7 @@ import io.provenance.api.models.p8e.ProvenanceConfig import java.time.OffsetDateTime data class ApproveContractRequest( - val account: AccountInfo, + val account: AccountInfo = AccountInfo(), val client: ObjectStoreConfig, val provenanceConfig: ProvenanceConfig, val envelope: ByteArray, diff --git a/models/src/main/kotlin/io/provenance/api/models/cee/ExecuteContractConfig.kt b/models/src/main/kotlin/io/provenance/api/models/cee/ExecuteContractConfig.kt index d39d98f0..895475ba 100644 --- a/models/src/main/kotlin/io/provenance/api/models/cee/ExecuteContractConfig.kt +++ b/models/src/main/kotlin/io/provenance/api/models/cee/ExecuteContractConfig.kt @@ -7,6 +7,6 @@ import io.provenance.api.models.p8e.ProvenanceConfig data class ExecuteContractConfig( val contract: ContractConfig, val client: ObjectStoreConfig, - val account: AccountInfo, + val account: AccountInfo = AccountInfo(), val provenanceConfig: ProvenanceConfig, ) diff --git a/models/src/main/kotlin/io/provenance/api/models/cee/ExecuteContractRequest.kt b/models/src/main/kotlin/io/provenance/api/models/cee/ExecuteContractRequest.kt index f219abe2..241ae841 100644 --- a/models/src/main/kotlin/io/provenance/api/models/cee/ExecuteContractRequest.kt +++ b/models/src/main/kotlin/io/provenance/api/models/cee/ExecuteContractRequest.kt @@ -1,9 +1,9 @@ package io.provenance.api.models.cee -import io.provenance.api.models.account.AccountInfo +import io.provenance.api.models.account.Participant data class ExecuteContractRequest( val config: ExecuteContractConfig, val records: Map, - val participants: List = emptyList() + val participants: List = emptyList() ) diff --git a/models/src/main/kotlin/io/provenance/api/models/cee/RejectContractRequest.kt b/models/src/main/kotlin/io/provenance/api/models/cee/RejectContractRequest.kt index 410a5506..5f6a690b 100644 --- a/models/src/main/kotlin/io/provenance/api/models/cee/RejectContractRequest.kt +++ b/models/src/main/kotlin/io/provenance/api/models/cee/RejectContractRequest.kt @@ -4,7 +4,7 @@ import io.provenance.api.models.account.AccountInfo import io.provenance.api.models.eos.ObjectStoreConfig data class RejectContractRequest( - val account: AccountInfo, + val account: AccountInfo = AccountInfo(), val client: ObjectStoreConfig, val rejection: ByteArray, ) diff --git a/models/src/main/kotlin/io/provenance/api/models/cee/SubmitContractExecutionResultRequest.kt b/models/src/main/kotlin/io/provenance/api/models/cee/SubmitContractExecutionResultRequest.kt index a2ab9a03..09c0cc8a 100644 --- a/models/src/main/kotlin/io/provenance/api/models/cee/SubmitContractExecutionResultRequest.kt +++ b/models/src/main/kotlin/io/provenance/api/models/cee/SubmitContractExecutionResultRequest.kt @@ -4,7 +4,7 @@ import io.provenance.api.models.account.AccountInfo import io.provenance.api.models.p8e.ProvenanceConfig data class SubmitContractExecutionResultRequest( - val account: AccountInfo, + val account: AccountInfo = AccountInfo(), val provenance: ProvenanceConfig, val envelope: ByteArray, val state: ByteArray, diff --git a/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/provenance/tx/model/CreateTxOnboardAssetRequest.kt b/models/src/main/kotlin/io/provenance/api/models/p8e/CreateTxOnboardAssetRequest.kt similarity index 66% rename from service/src/main/kotlin/io/provenance/onboarding/domain/usecase/provenance/tx/model/CreateTxOnboardAssetRequest.kt rename to models/src/main/kotlin/io/provenance/api/models/p8e/CreateTxOnboardAssetRequest.kt index 1d359576..90e444bf 100644 --- a/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/provenance/tx/model/CreateTxOnboardAssetRequest.kt +++ b/models/src/main/kotlin/io/provenance/api/models/p8e/CreateTxOnboardAssetRequest.kt @@ -1,4 +1,4 @@ -package io.provenance.onboarding.domain.usecase.provenance.tx.model +package io.provenance.api.models.p8e data class CreateTxOnboardAssetRequest( val chainId: String, diff --git a/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/provenance/tx/model/CreateTxRequest.kt b/models/src/main/kotlin/io/provenance/api/models/p8e/CreateTxRequest.kt similarity index 59% rename from service/src/main/kotlin/io/provenance/onboarding/domain/usecase/provenance/tx/model/CreateTxRequest.kt rename to models/src/main/kotlin/io/provenance/api/models/p8e/CreateTxRequest.kt index 23f520ca..5c39be3e 100644 --- a/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/provenance/tx/model/CreateTxRequest.kt +++ b/models/src/main/kotlin/io/provenance/api/models/p8e/CreateTxRequest.kt @@ -1,11 +1,10 @@ -package io.provenance.onboarding.domain.usecase.provenance.tx.model +package io.provenance.api.models.p8e import io.provenance.api.models.account.AccountInfo -import io.provenance.onboarding.domain.usecase.common.model.PermissionInfo import java.util.UUID data class CreateTxRequest( - val account: AccountInfo, + val account: AccountInfo = AccountInfo(), val permissions: PermissionInfo?, val contractSpecId: UUID, val scopeSpecId: UUID, diff --git a/models/src/main/kotlin/io/provenance/api/models/p8e/ExecuteTxRequest.kt b/models/src/main/kotlin/io/provenance/api/models/p8e/ExecuteTxRequest.kt new file mode 100644 index 00000000..785e2b51 --- /dev/null +++ b/models/src/main/kotlin/io/provenance/api/models/p8e/ExecuteTxRequest.kt @@ -0,0 +1,10 @@ +package io.provenance.api.models.p8e + +import io.provenance.api.models.account.AccountInfo + +data class ExecuteTxRequest( + val account: AccountInfo = AccountInfo(), + val chainId: String, + val nodeEndpoint: String, + val tx: TxBody, +) diff --git a/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/common/model/PermissionInfo.kt b/models/src/main/kotlin/io/provenance/api/models/p8e/PermissionInfo.kt similarity index 76% rename from service/src/main/kotlin/io/provenance/onboarding/domain/usecase/common/model/PermissionInfo.kt rename to models/src/main/kotlin/io/provenance/api/models/p8e/PermissionInfo.kt index ef63b845..c87debfc 100644 --- a/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/common/model/PermissionInfo.kt +++ b/models/src/main/kotlin/io/provenance/api/models/p8e/PermissionInfo.kt @@ -1,4 +1,4 @@ -package io.provenance.onboarding.domain.usecase.common.model +package io.provenance.api.models.p8e import java.security.PublicKey diff --git a/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/common/model/TxBody.kt b/models/src/main/kotlin/io/provenance/api/models/p8e/TxBody.kt similarity index 68% rename from service/src/main/kotlin/io/provenance/onboarding/domain/usecase/common/model/TxBody.kt rename to models/src/main/kotlin/io/provenance/api/models/p8e/TxBody.kt index c5675ce3..dee02058 100644 --- a/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/common/model/TxBody.kt +++ b/models/src/main/kotlin/io/provenance/api/models/p8e/TxBody.kt @@ -1,4 +1,4 @@ -package io.provenance.onboarding.domain.usecase.common.model +package io.provenance.api.models.p8e import com.fasterxml.jackson.databind.node.ObjectNode diff --git a/service/docker/Dockerfile b/service/docker/Dockerfile index 33f3a671..e716bb90 100644 --- a/service/docker/Dockerfile +++ b/service/docker/Dockerfile @@ -2,15 +2,12 @@ FROM gradle:7.3.3-jdk11 AS build RUN gradle --version && java -version WORKDIR /app -ARG NEXUS_USER -ARG NEXUS_PASS - # Only copy dependency-related files COPY build.gradle.kts gradle.properties settings.gradle.kts buildSrc/build.gradle.kts /app/ # Only download dependencies # Eat the expected build failure since no source code has been copied yet -RUN gradle clean build -PnexusPass=$NEXUS_PASS -PnexusUser=$NEXUS_USER --no-daemon > /dev/null 2>&1 || true +RUN gradle clean build --no-daemon > /dev/null 2>&1 || true # Copy all files COPY service /app/service/ @@ -22,7 +19,7 @@ COPY build.gradle.kts gradle.properties settings.gradle.kts /app/ COPY CHANGELOG.md CODE_OF_CONDUCT.md CONTRIBUTING.md LICENSE README.md /app/ # Do the actual build -RUN gradle clean build -PnexusPass=$NEXUS_PASS -PnexusUser=$NEXUS_USER --no-daemon +RUN gradle clean build --no-daemon FROM openjdk:11-jre diff --git a/service/docker/dependencies.yaml b/service/docker/dependencies.yaml index 3a304324..b29b7cab 100644 --- a/service/docker/dependencies.yaml +++ b/service/docker/dependencies.yaml @@ -11,7 +11,7 @@ services: networks: - p8e-network ports: - - "5432:5432" + - "5433:5432" volumes: - postgres-cee:/var/lib/postgresql/data - ./db-init:/docker-entrypoint-initdb.d/ diff --git a/service/src/main/kotlin/io/provenance/onboarding/domain/provenance/Provenance.kt b/service/src/main/kotlin/io/provenance/onboarding/domain/provenance/Provenance.kt index cf4e0e9b..de86baf8 100644 --- a/service/src/main/kotlin/io/provenance/onboarding/domain/provenance/Provenance.kt +++ b/service/src/main/kotlin/io/provenance/onboarding/domain/provenance/Provenance.kt @@ -6,7 +6,7 @@ import io.provenance.api.models.p8e.ProvenanceConfig import io.provenance.api.models.p8e.TxResponse import io.provenance.client.grpc.Signer import io.provenance.metadata.v1.ScopeResponse -import io.provenance.onboarding.domain.usecase.common.model.TxBody +import io.provenance.api.models.p8e.TxBody import io.provenance.onboarding.frameworks.provenance.ProvenanceTx import java.util.UUID diff --git a/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/cee/approve/ApproveContractExecution.kt b/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/cee/approve/ApproveContractExecution.kt index 95ec6d12..eecfc6ea 100644 --- a/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/cee/approve/ApproveContractExecution.kt +++ b/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/cee/approve/ApproveContractExecution.kt @@ -2,9 +2,9 @@ package io.provenance.onboarding.domain.usecase.cee.approve import com.google.protobuf.Any import cosmos.tx.v1beta1.TxOuterClass -import io.provenance.api.models.cee.ApproveContractRequest import io.provenance.onboarding.domain.provenance.Provenance import io.provenance.onboarding.domain.usecase.AbstractUseCase +import io.provenance.onboarding.domain.usecase.cee.approve.models.ApproveContractRequestWrapper import io.provenance.onboarding.domain.usecase.cee.common.client.CreateClient import io.provenance.onboarding.domain.usecase.cee.common.client.model.CreateClientRequest import io.provenance.onboarding.domain.usecase.provenance.account.GetSigner @@ -17,17 +17,17 @@ class ApproveContractExecution( private val createClient: CreateClient, private val provenance: Provenance, private val getSigner: GetSigner, -) : AbstractUseCase() { - override suspend fun execute(args: ApproveContractRequest) { - val client = createClient.execute(CreateClientRequest(args.account, args.client)) - val envelope = Envelopes.Envelope.newBuilder().mergeFrom(args.envelope).build() +) : AbstractUseCase() { + override suspend fun execute(args: ApproveContractRequestWrapper) { + val client = createClient.execute(CreateClientRequest(args.uuid, args.request.account, args.request.client)) + val envelope = Envelopes.Envelope.newBuilder().mergeFrom(args.request.envelope).build() when (val result = client.execute(envelope)) { is FragmentResult -> { - val approvalTxHash = client.approveScopeUpdate(result.envelopeState, args.expiration).let { - val signer = getSigner.execute(args.account) + val approvalTxHash = client.approveScopeUpdate(result.envelopeState, args.request.expiration).let { + val signer = getSigner.execute(args.uuid) val txBody = TxOuterClass.TxBody.newBuilder().addAllMessages(it.map { msg -> Any.pack(msg, "") }).build() - val broadcast = provenance.executeTransaction(args.provenanceConfig, txBody, signer) + val broadcast = provenance.executeTransaction(args.request.provenanceConfig, txBody, signer) broadcast.txhash } diff --git a/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/cee/approve/models/ApproveContractRequestWrapper.kt b/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/cee/approve/models/ApproveContractRequestWrapper.kt new file mode 100644 index 00000000..1c081592 --- /dev/null +++ b/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/cee/approve/models/ApproveContractRequestWrapper.kt @@ -0,0 +1,9 @@ +package io.provenance.onboarding.domain.usecase.cee.approve.models + +import io.provenance.api.models.cee.ApproveContractRequest +import java.util.UUID + +data class ApproveContractRequestWrapper( + val uuid: UUID, + val request: ApproveContractRequest +) diff --git a/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/cee/common/client/CreateClient.kt b/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/cee/common/client/CreateClient.kt index f16ec4fb..9c629775 100644 --- a/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/cee/common/client/CreateClient.kt +++ b/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/cee/common/client/CreateClient.kt @@ -4,6 +4,7 @@ import io.provenance.core.KeyType import io.provenance.onboarding.domain.usecase.AbstractUseCase import io.provenance.onboarding.domain.usecase.cee.common.client.model.CreateClientRequest import io.provenance.onboarding.domain.usecase.common.originator.GetOriginator +import io.provenance.onboarding.frameworks.config.ProvenanceProperties import io.provenance.scope.encryption.model.DirectKeyRef import io.provenance.scope.encryption.util.toJavaPublicKey import io.provenance.scope.sdk.Affiliate @@ -19,10 +20,11 @@ import java.util.concurrent.TimeUnit @Component class CreateClient( - private val getOriginator: GetOriginator + private val getOriginator: GetOriginator, + private val provenanceProperties: ProvenanceProperties, ) : AbstractUseCase() { override suspend fun execute(args: CreateClientRequest): Client { - val originator = getOriginator.execute(args.account.originatorUuid) + val originator = getOriginator.execute(args.uuid) val affiliate = Affiliate( signingKeyRef = DirectKeyRef(KeyPair(originator.signingPublicKey() as PublicKey, originator.signingPrivateKey() as PrivateKey)), encryptionKeyRef = DirectKeyRef(KeyPair(originator.encryptionPublicKey() as PublicKey, originator.encryptionPrivateKey() as PrivateKey)), @@ -31,11 +33,11 @@ class CreateClient( val sharedClient = SharedClient( ClientConfig( - mainNet = !args.account.isTestNet, + mainNet = provenanceProperties.mainnet, cacheJarSizeInBytes = 4L * 1024 * 1024, // ~ 4 MB, cacheRecordSizeInBytes = 0L, cacheSpecSizeInBytes = 0L, - disableContractLogs = !args.account.isTestNet, + disableContractLogs = provenanceProperties.mainnet, osConcurrencySize = 6, osGrpcUrl = URI(args.client.objectStoreUrl), osChannelCustomizeFn = { channelBuilder -> @@ -47,7 +49,7 @@ class CreateClient( ) ).also { client -> args.affiliates.forEach { - val keys = getOriginator.execute(it.originatorUuid).keys + val keys = getOriginator.execute(it.uuid).keys client.affiliateRepository.addAffiliate(keys[KeyType.SIGNING_PUBLIC_KEY].toString().toJavaPublicKey(), keys[KeyType.ENCRYPTION_PUBLIC_KEY].toString().toJavaPublicKey()) } } diff --git a/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/cee/common/client/model/CreateClientRequest.kt b/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/cee/common/client/model/CreateClientRequest.kt index e2201fad..9c885f4f 100644 --- a/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/cee/common/client/model/CreateClientRequest.kt +++ b/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/cee/common/client/model/CreateClientRequest.kt @@ -1,10 +1,13 @@ package io.provenance.onboarding.domain.usecase.cee.common.client.model import io.provenance.api.models.account.AccountInfo +import io.provenance.api.models.account.Participant import io.provenance.api.models.eos.ObjectStoreConfig +import java.util.UUID data class CreateClientRequest( - val account: AccountInfo, + val uuid: UUID, + val account: AccountInfo = AccountInfo(), val client: ObjectStoreConfig, - val affiliates: List = emptyList(), + val affiliates: List = emptyList(), ) diff --git a/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/cee/execute/ExecuteContract.kt b/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/cee/execute/ExecuteContract.kt index 0c31263c..eed61997 100644 --- a/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/cee/execute/ExecuteContract.kt +++ b/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/cee/execute/ExecuteContract.kt @@ -2,7 +2,6 @@ package io.provenance.onboarding.domain.usecase.cee.execute import com.google.protobuf.Message import io.provenance.api.models.cee.ContractExecutionResponse -import io.provenance.api.models.cee.ExecuteContractRequest import io.provenance.api.models.p8e.TxResponse import io.provenance.client.protobuf.extensions.isSet import io.provenance.metadata.v1.ScopeResponse @@ -12,6 +11,7 @@ import io.provenance.onboarding.domain.provenance.Provenance import io.provenance.onboarding.domain.usecase.AbstractUseCase import io.provenance.onboarding.domain.usecase.cee.common.client.CreateClient import io.provenance.onboarding.domain.usecase.cee.common.client.model.CreateClientRequest +import io.provenance.onboarding.domain.usecase.cee.execute.model.ExecuteContractRequestWrapper import io.provenance.onboarding.domain.usecase.common.originator.GetOriginator import io.provenance.onboarding.domain.usecase.provenance.account.GetSigner import io.provenance.onboarding.frameworks.provenance.SingleTx @@ -35,26 +35,26 @@ class ExecuteContract( private val contractParser: ContractParser, private val createClient: CreateClient, private val getOriginator: GetOriginator, -) : AbstractUseCase() { +) : AbstractUseCase() { - override suspend fun execute(args: ExecuteContractRequest): ContractExecutionResponse { - val signer = getSigner.execute(args.config.account) - val client = createClient.execute(CreateClientRequest(args.config.account, args.config.client, args.participants)) - val contract = contractService.getContract(args.config.contract.contractName) - val records = getRecords(args.records, contract) + override suspend fun execute(args: ExecuteContractRequestWrapper): ContractExecutionResponse { + val signer = getSigner.execute(args.uuid) + val client = createClient.execute(CreateClientRequest(args.uuid, args.request.config.account, args.request.config.client, args.request.participants)) + val contract = contractService.getContract(args.request.config.contract.contractName) + val records = getRecords(args.request.records, contract) - val participants = args.participants.associate { - it.partyType to getOriginator.execute(it.originatorUuid) + val participants = args.request.participants.associate { + it.partyType to getOriginator.execute(it.uuid) } - val scope = provenanceService.getScope(args.config.provenanceConfig, args.config.contract.scopeUuid) + val scope = provenanceService.getScope(args.request.config.provenanceConfig, args.request.config.contract.scopeUuid) val scopeToUse: ScopeResponse? = if (scope.scope.scope.isSet() && !scope.scope.scope.scopeId.isEmpty) scope else null - val session = contractService.setupContract(client, contract, records, args.config.contract.scopeUuid, args.config.contract.sessionUuid, participants, scopeToUse, args.config.contract.scopeSpecificationName) + val session = contractService.setupContract(client, contract, records, args.request.config.contract.scopeUuid, args.request.config.contract.sessionUuid, participants, scopeToUse, args.request.config.contract.scopeSpecificationName) return when (val result = contractService.executeContract(client, session)) { is SignedResult -> { - provenanceService.buildContractTx(args.config.provenanceConfig, SingleTx(result))?.let { - provenanceService.executeTransaction(args.config.provenanceConfig, it, signer).let { pbResponse -> + provenanceService.buildContractTx(args.request.config.provenanceConfig, SingleTx(result))?.let { + provenanceService.executeTransaction(args.request.config.provenanceConfig, it, signer).let { pbResponse -> ContractExecutionResponse(false, null, TxResponse(pbResponse.txhash, pbResponse.gasWanted.toString(), pbResponse.gasUsed.toString(), pbResponse.height.toString())) } } ?: throw IllegalStateException("Failed to build contract for execution output.") diff --git a/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/cee/execute/model/ExecuteContractRequestWrapper.kt b/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/cee/execute/model/ExecuteContractRequestWrapper.kt new file mode 100644 index 00000000..d6a829f9 --- /dev/null +++ b/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/cee/execute/model/ExecuteContractRequestWrapper.kt @@ -0,0 +1,9 @@ +package io.provenance.onboarding.domain.usecase.cee.execute.model + +import io.provenance.api.models.cee.ExecuteContractRequest +import java.util.UUID + +data class ExecuteContractRequestWrapper( + val uuid: UUID, + val request: ExecuteContractRequest, +) diff --git a/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/cee/reject/RejectContractExecution.kt b/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/cee/reject/RejectContractExecution.kt index e1245ab7..1658cb93 100644 --- a/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/cee/reject/RejectContractExecution.kt +++ b/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/cee/reject/RejectContractExecution.kt @@ -1,20 +1,20 @@ package io.provenance.onboarding.domain.usecase.cee.reject -import io.provenance.api.models.cee.RejectContractRequest import io.provenance.onboarding.domain.usecase.AbstractUseCase import io.provenance.onboarding.domain.usecase.cee.common.client.CreateClient import io.provenance.onboarding.domain.usecase.cee.common.client.model.CreateClientRequest +import io.provenance.onboarding.domain.usecase.cee.reject.models.RejectContractExecutionRequestWrapper import io.provenance.scope.contract.proto.Envelopes import org.springframework.stereotype.Component @Component class RejectContractExecution( private val createClient: CreateClient -) : AbstractUseCase() { +) : AbstractUseCase() { - override suspend fun execute(args: RejectContractRequest) { - val client = createClient.execute(CreateClientRequest(args.account, args.client)) - val error = Envelopes.EnvelopeError.newBuilder().mergeFrom(args.rejection).build() + override suspend fun execute(args: RejectContractExecutionRequestWrapper) { + val client = createClient.execute(CreateClientRequest(args.uuid, args.request.account, args.request.client)) + val error = Envelopes.EnvelopeError.newBuilder().mergeFrom(args.request.rejection).build() client.respondWithError(error) } } diff --git a/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/cee/reject/models/RejectContractExecutionRequestWrapper.kt b/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/cee/reject/models/RejectContractExecutionRequestWrapper.kt new file mode 100644 index 00000000..6021e96a --- /dev/null +++ b/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/cee/reject/models/RejectContractExecutionRequestWrapper.kt @@ -0,0 +1,9 @@ +package io.provenance.onboarding.domain.usecase.cee.reject.models + +import io.provenance.api.models.cee.RejectContractRequest +import java.util.UUID + +data class RejectContractExecutionRequestWrapper( + val uuid: UUID, + val request: RejectContractRequest +) diff --git a/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/cee/submit/SubmitContractExecutionResult.kt b/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/cee/submit/SubmitContractExecutionResult.kt index 82d303a6..dc9a6218 100644 --- a/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/cee/submit/SubmitContractExecutionResult.kt +++ b/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/cee/submit/SubmitContractExecutionResult.kt @@ -1,9 +1,9 @@ package io.provenance.onboarding.domain.usecase.cee.submit -import io.provenance.api.models.cee.SubmitContractExecutionResultRequest import io.provenance.api.models.p8e.TxResponse import io.provenance.onboarding.domain.provenance.Provenance import io.provenance.onboarding.domain.usecase.AbstractUseCase +import io.provenance.onboarding.domain.usecase.cee.submit.models.SubmitContractExecutionResultRequestWrapper import io.provenance.onboarding.domain.usecase.provenance.account.GetSigner import io.provenance.onboarding.frameworks.provenance.SingleTx import io.provenance.scope.contract.proto.Envelopes @@ -15,17 +15,17 @@ import org.springframework.stereotype.Component class SubmitContractExecutionResult( private val provenanceService: Provenance, private val getSigner: GetSigner, -) : AbstractUseCase() { - override suspend fun execute(args: SubmitContractExecutionResultRequest): TxResponse { - val signer = getSigner.execute(args.account) +) : AbstractUseCase() { + override suspend fun execute(args: SubmitContractExecutionResultRequestWrapper): TxResponse { + val signer = getSigner.execute(args.uuid) - val envelope = Envelopes.Envelope.newBuilder().mergeFrom(args.envelope).build() - val state = Envelopes.EnvelopeState.newBuilder().mergeFrom(args.state).build() + val envelope = Envelopes.Envelope.newBuilder().mergeFrom(args.request.envelope).build() + val state = Envelopes.EnvelopeState.newBuilder().mergeFrom(args.request.state).build() return when (val result = envelope.mergeInto(state)) { is SignedResult -> { - provenanceService.buildContractTx(args.provenance, SingleTx(result))?.let { - provenanceService.executeTransaction(args.provenance, it, signer).let { pbResponse -> + provenanceService.buildContractTx(args.request.provenance, SingleTx(result))?.let { + provenanceService.executeTransaction(args.request.provenance, it, signer).let { pbResponse -> TxResponse(pbResponse.txhash, pbResponse.gasWanted.toString(), pbResponse.gasUsed.toString(), pbResponse.height.toString()) } } ?: throw IllegalStateException("Failed to build the contract tx with the supplied signed result.") diff --git a/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/cee/submit/models/SubmitContractExecutionResultRequestWrapper.kt b/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/cee/submit/models/SubmitContractExecutionResultRequestWrapper.kt new file mode 100644 index 00000000..60c23481 --- /dev/null +++ b/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/cee/submit/models/SubmitContractExecutionResultRequestWrapper.kt @@ -0,0 +1,9 @@ +package io.provenance.onboarding.domain.usecase.cee.submit.models + +import io.provenance.api.models.cee.SubmitContractExecutionResultRequest +import java.util.UUID + +data class SubmitContractExecutionResultRequestWrapper( + val uuid: UUID, + val request: SubmitContractExecutionResultRequest +) diff --git a/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/objectStore/SnapshotAsset.kt b/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/objectStore/SnapshotAsset.kt index bc6a7d44..871c2be1 100644 --- a/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/objectStore/SnapshotAsset.kt +++ b/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/objectStore/SnapshotAsset.kt @@ -5,6 +5,7 @@ import io.provenance.onboarding.domain.usecase.AbstractUseCase import io.provenance.onboarding.domain.usecase.common.originator.GetOriginator import io.provenance.onboarding.domain.usecase.objectStore.model.SnapshotAssetRequest import io.provenance.onboarding.domain.usecase.objectStore.model.StoreAssetRequest +import io.provenance.onboarding.domain.usecase.objectStore.model.StoreAssetRequestWrapper import io.provenance.onboarding.domain.usecase.objectStore.model.StoreAssetResponse import io.provenance.onboarding.frameworks.config.ObjectStoreConfig import io.provenance.scope.objectstore.client.OsClient @@ -26,24 +27,27 @@ class SnapshotAsset( ) : AbstractUseCase() { override suspend fun execute(args: SnapshotAssetRequest): StoreAssetResponse { - val originator = getOriginator.execute(args.account.originatorUuid) + val originator = getOriginator.execute(args.uuid) val osClient = OsClient(URI.create(args.objectStoreAddress), objectStoreConfig.timeoutMs) val publicKey = (originator.signingPublicKey() as? PublicKey) - ?: throw IllegalStateException("Public key was not present for originator: ${args.account.originatorUuid}") + ?: throw IllegalStateException("Public key was not present for originator: ${args.uuid}") val privateKey = (originator.signingPrivateKey() as? PrivateKey) - ?: throw IllegalStateException("Private key was not present for originator: ${args.account.originatorUuid}") + ?: throw IllegalStateException("Private key was not present for originator: ${args.uuid}") val asset = objectStore.retrieveAndDecrypt(osClient, args.hash.base64Decode(), publicKey, privateKey) val snapshot = Asset.parseFrom(asset) return storeAsset.execute( - StoreAssetRequest( - args.account, - args.objectStoreAddress, - args.permissions, - UUID.fromString(snapshot.id.value), - snapshot.toByteArray().toString() + StoreAssetRequestWrapper( + args.uuid, + StoreAssetRequest( + args.account, + args.objectStoreAddress, + args.permissions, + UUID.fromString(snapshot.id.value), + snapshot.toByteArray().toString() + ) ) ) } diff --git a/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/objectStore/StoreAsset.kt b/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/objectStore/StoreAsset.kt index c25805cb..46450ea7 100644 --- a/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/objectStore/StoreAsset.kt +++ b/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/objectStore/StoreAsset.kt @@ -3,7 +3,7 @@ package io.provenance.onboarding.domain.usecase.objectStore import io.provenance.onboarding.domain.objectStore.ObjectStore import io.provenance.onboarding.domain.usecase.AbstractUseCase import io.provenance.onboarding.domain.usecase.common.originator.GetOriginator -import io.provenance.onboarding.domain.usecase.objectStore.model.StoreAssetRequest +import io.provenance.onboarding.domain.usecase.objectStore.model.StoreAssetRequestWrapper import io.provenance.onboarding.domain.usecase.objectStore.model.StoreAssetResponse import io.provenance.onboarding.frameworks.config.ObjectStoreConfig import io.provenance.onboarding.frameworks.objectStore.AudienceKeyManager @@ -24,27 +24,27 @@ class StoreAsset( private val objectStoreConfig: ObjectStoreConfig, private val audienceKeyManager: AudienceKeyManager, private val getOriginator: GetOriginator, -) : AbstractUseCase() { - override suspend fun execute(args: StoreAssetRequest): StoreAssetResponse { - val originator = getOriginator.execute(args.account.originatorUuid) - val osClient = OsClient(URI.create(args.objectStoreAddress), objectStoreConfig.timeoutMs) - val additionalAudiences = args.permissions?.audiences?.toMutableSet() ?: mutableSetOf() +) : AbstractUseCase() { + override suspend fun execute(args: StoreAssetRequestWrapper): StoreAssetResponse { + val originator = getOriginator.execute(args.uuid) + val osClient = OsClient(URI.create(args.request.objectStoreAddress), objectStoreConfig.timeoutMs) + val additionalAudiences = args.request.permissions?.audiences?.toMutableSet() ?: mutableSetOf() - if (args.permissions?.permissionDart == true) { + if (args.request.permissions?.permissionDart == true) { additionalAudiences.add(audienceKeyManager.get(DefaultAudience.DART)) } - if (args.permissions?.permissionPortfolioManager == true) { + if (args.request.permissions?.permissionPortfolioManager == true) { additionalAudiences.add(audienceKeyManager.get(DefaultAudience.PORTFOLIO_MANAGER)) } val publicKey = (originator.encryptionPublicKey() as? PublicKey) - ?: throw IllegalStateException("Public key was not present for originator: ${args.account.originatorUuid}") + ?: throw IllegalStateException("Public key was not present for originator: ${args.uuid}") val asset = AssetOuterClassBuilders.Asset { - idBuilder.value = args.assetId.toString() + idBuilder.value = args.request.assetId.toString() type = FileNFT.ASSET_TYPE - putKv(FileNFT.KEY_BYTES, args.asset.base64Decode().toProtoAny()) + putKv(FileNFT.KEY_BYTES, args.request.asset.base64Decode().toProtoAny()) } return objectStore.storeAsset(osClient, asset, publicKey, additionalAudiences) diff --git a/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/objectStore/model/SnapshotAssetRequest.kt b/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/objectStore/model/SnapshotAssetRequest.kt index d72067ed..af6b1eaf 100644 --- a/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/objectStore/model/SnapshotAssetRequest.kt +++ b/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/objectStore/model/SnapshotAssetRequest.kt @@ -1,10 +1,12 @@ package io.provenance.onboarding.domain.usecase.objectStore.model import io.provenance.api.models.account.AccountInfo -import io.provenance.onboarding.domain.usecase.common.model.PermissionInfo +import io.provenance.api.models.p8e.PermissionInfo +import java.util.UUID data class SnapshotAssetRequest( - val account: AccountInfo, + val uuid: UUID, + val account: AccountInfo = AccountInfo(), val hash: String, val objectStoreAddress: String, val permissions: PermissionInfo?, diff --git a/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/objectStore/model/SnapshotAssetRequestWrapper.kt b/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/objectStore/model/SnapshotAssetRequestWrapper.kt new file mode 100644 index 00000000..e9ddda72 --- /dev/null +++ b/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/objectStore/model/SnapshotAssetRequestWrapper.kt @@ -0,0 +1,8 @@ +package io.provenance.onboarding.domain.usecase.objectStore.model + +import java.util.UUID + +data class SnapshotAssetRequestWrapper( + val uuid: UUID, + val request: SnapshotAssetRequest +) diff --git a/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/objectStore/model/StoreAssetRequest.kt b/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/objectStore/model/StoreAssetRequest.kt index a8c491cc..5e502e20 100644 --- a/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/objectStore/model/StoreAssetRequest.kt +++ b/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/objectStore/model/StoreAssetRequest.kt @@ -1,11 +1,11 @@ package io.provenance.onboarding.domain.usecase.objectStore.model import io.provenance.api.models.account.AccountInfo -import io.provenance.onboarding.domain.usecase.common.model.PermissionInfo +import io.provenance.api.models.p8e.PermissionInfo import java.util.UUID data class StoreAssetRequest( - val account: AccountInfo, + val account: AccountInfo = AccountInfo(), val objectStoreAddress: String, val permissions: PermissionInfo?, val assetId: UUID, diff --git a/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/objectStore/model/StoreAssetRequestWrapper.kt b/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/objectStore/model/StoreAssetRequestWrapper.kt new file mode 100644 index 00000000..c0c30f3c --- /dev/null +++ b/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/objectStore/model/StoreAssetRequestWrapper.kt @@ -0,0 +1,8 @@ +package io.provenance.onboarding.domain.usecase.objectStore.model + +import java.util.UUID + +data class StoreAssetRequestWrapper( + val uuid: UUID, + val request: StoreAssetRequest, +) diff --git a/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/provenance/account/GetSigner.kt b/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/provenance/account/GetSigner.kt index 70b10535..ff40c8c6 100644 --- a/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/provenance/account/GetSigner.kt +++ b/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/provenance/account/GetSigner.kt @@ -1,26 +1,28 @@ package io.provenance.onboarding.domain.usecase.provenance.account -import io.provenance.api.models.account.AccountInfo import io.provenance.client.grpc.Signer import io.provenance.onboarding.domain.usecase.AbstractUseCase import io.provenance.onboarding.domain.usecase.common.originator.GetOriginator +import io.provenance.onboarding.frameworks.config.ProvenanceProperties import io.provenance.onboarding.frameworks.provenance.utility.ProvenanceUtils import org.springframework.stereotype.Component import java.security.PrivateKey import java.security.PublicKey +import java.util.UUID @Component class GetSigner( - private val getOriginator: GetOriginator -) : AbstractUseCase() { - override suspend fun execute(args: AccountInfo): Signer { + private val getOriginator: GetOriginator, + private val provenanceProperties: ProvenanceProperties, +) : AbstractUseCase() { + override suspend fun execute(args: UUID): Signer { val utils = ProvenanceUtils() - val originator = getOriginator.execute(args.originatorUuid) + val originator = getOriginator.execute(args) return originator.signingPublicKey().let { public -> originator.signingPrivateKey().let { private -> - utils.getSigner(public as PublicKey, private as PrivateKey, !args.isTestNet) + utils.getSigner(public as PublicKey, private as PrivateKey, provenanceProperties.mainnet) } } } diff --git a/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/provenance/tx/CreateTx.kt b/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/provenance/tx/CreateTx.kt index fb42bceb..260f3893 100644 --- a/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/provenance/tx/CreateTx.kt +++ b/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/provenance/tx/CreateTx.kt @@ -2,9 +2,10 @@ package io.provenance.onboarding.domain.usecase.provenance.tx import io.provenance.onboarding.domain.usecase.AbstractUseCase import io.provenance.onboarding.domain.usecase.common.model.ScopeConfig -import io.provenance.onboarding.domain.usecase.common.model.TxBody +import io.provenance.api.models.p8e.TxBody import io.provenance.onboarding.domain.usecase.provenance.account.GetSigner -import io.provenance.onboarding.domain.usecase.provenance.tx.model.CreateTxRequest +import io.provenance.onboarding.domain.usecase.provenance.tx.model.CreateTxRequestWrapper +import io.provenance.onboarding.frameworks.config.ProvenanceProperties import io.provenance.onboarding.frameworks.objectStore.AudienceKeyManager import io.provenance.onboarding.frameworks.objectStore.DefaultAudience import io.provenance.onboarding.frameworks.provenance.utility.ProvenanceUtils @@ -14,29 +15,30 @@ import org.springframework.stereotype.Component @Component class CreateTx( private val audienceKeyManager: AudienceKeyManager, - private val getSigner: GetSigner -) : AbstractUseCase() { - override suspend fun execute(args: CreateTxRequest): TxBody { + private val getSigner: GetSigner, + private val provenanceProperties: ProvenanceProperties, +) : AbstractUseCase() { + override suspend fun execute(args: CreateTxRequestWrapper): TxBody { val utils = ProvenanceUtils() - val account = getSigner.execute(args.account) - val additionalAudiences = args.permissions?.audiences?.map { it.getAddress(!args.account.isTestNet) }?.toMutableSet() ?: mutableSetOf() + val account = getSigner.execute(args.uuid) + val additionalAudiences = args.request.permissions?.audiences?.map { it.getAddress(provenanceProperties.mainnet) }?.toMutableSet() ?: mutableSetOf() - if (args.permissions?.permissionDart == true) { - additionalAudiences.add(audienceKeyManager.get(DefaultAudience.DART).getAddress(!args.account.isTestNet)) + if (args.request.permissions?.permissionDart == true) { + additionalAudiences.add(audienceKeyManager.get(DefaultAudience.DART).getAddress(provenanceProperties.mainnet)) } - if (args.permissions?.permissionPortfolioManager == true) { - additionalAudiences.add(audienceKeyManager.get(DefaultAudience.PORTFOLIO_MANAGER).getAddress(!args.account.isTestNet)) + if (args.request.permissions?.permissionPortfolioManager == true) { + additionalAudiences.add(audienceKeyManager.get(DefaultAudience.PORTFOLIO_MANAGER).getAddress(provenanceProperties.mainnet)) } return utils.createScopeTx( ScopeConfig( - args.scopeId, - args.contractSpecId, - args.scopeSpecId, + args.request.scopeId, + args.request.contractSpecId, + args.request.scopeSpecId, ), - args.contractInput, + args.request.contractInput, account.address(), additionalAudiences ) diff --git a/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/provenance/tx/CreateTxOnboardAsset.kt b/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/provenance/tx/CreateTxOnboardAsset.kt index fd0d5712..7a1e6002 100644 --- a/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/provenance/tx/CreateTxOnboardAsset.kt +++ b/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/provenance/tx/CreateTxOnboardAsset.kt @@ -4,7 +4,8 @@ import io.provenance.api.models.p8e.TxResponse import io.provenance.onboarding.domain.provenance.Provenance import io.provenance.onboarding.domain.usecase.AbstractUseCase import io.provenance.onboarding.domain.usecase.provenance.account.GetSigner -import io.provenance.onboarding.domain.usecase.provenance.tx.model.CreateTxOnboardAssetRequest +import io.provenance.onboarding.domain.usecase.provenance.tx.model.CreateTxOnboardAssetRequestWrapper +import io.provenance.onboarding.domain.usecase.provenance.tx.model.CreateTxRequestWrapper import org.springframework.stereotype.Component @Component @@ -12,11 +13,11 @@ class CreateTxOnboardAsset( private val provenance: Provenance, private val createOnboardTx: CreateTx, private val getSigner: GetSigner, -) : AbstractUseCase() { - override suspend fun execute(args: CreateTxOnboardAssetRequest): TxResponse { - val signer = getSigner.execute(args.txRequest.account) - val tx = createOnboardTx.execute(args.txRequest) +) : AbstractUseCase() { + override suspend fun execute(args: CreateTxOnboardAssetRequestWrapper): TxResponse { + val signer = getSigner.execute(args.uuid) + val tx = createOnboardTx.execute(CreateTxRequestWrapper(args.uuid, args.request.txRequest)) - return provenance.onboard(args.chainId, args.nodeEndpoint, signer, tx) + return provenance.onboard(args.request.chainId, args.request.nodeEndpoint, signer, tx) } } diff --git a/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/provenance/tx/ExecuteTx.kt b/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/provenance/tx/ExecuteTx.kt index 21e635a9..61f7da04 100644 --- a/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/provenance/tx/ExecuteTx.kt +++ b/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/provenance/tx/ExecuteTx.kt @@ -4,16 +4,16 @@ import io.provenance.api.models.p8e.TxResponse import io.provenance.onboarding.domain.provenance.Provenance import io.provenance.onboarding.domain.usecase.AbstractUseCase import io.provenance.onboarding.domain.usecase.provenance.account.GetSigner -import io.provenance.onboarding.domain.usecase.provenance.tx.model.ExecuteTxRequest +import io.provenance.onboarding.domain.usecase.provenance.tx.model.ExecuteTxRequestWrapper import org.springframework.stereotype.Component @Component class ExecuteTx( private val provenance: Provenance, private val getSigner: GetSigner, -) : AbstractUseCase() { - override suspend fun execute(args: ExecuteTxRequest): TxResponse { - val signer = getSigner.execute(args.account) - return provenance.onboard(args.chainId, args.nodeEndpoint, signer, args.tx) +) : AbstractUseCase() { + override suspend fun execute(args: ExecuteTxRequestWrapper): TxResponse { + val signer = getSigner.execute(args.uuid) + return provenance.onboard(args.request.chainId, args.request.nodeEndpoint, signer, args.request.tx) } } diff --git a/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/provenance/tx/model/CreateTxOnboardAssetRequestWrapper.kt b/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/provenance/tx/model/CreateTxOnboardAssetRequestWrapper.kt new file mode 100644 index 00000000..bec502e5 --- /dev/null +++ b/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/provenance/tx/model/CreateTxOnboardAssetRequestWrapper.kt @@ -0,0 +1,9 @@ +package io.provenance.onboarding.domain.usecase.provenance.tx.model + +import io.provenance.api.models.p8e.CreateTxOnboardAssetRequest +import java.util.UUID + +data class CreateTxOnboardAssetRequestWrapper( + val uuid: UUID, + val request: CreateTxOnboardAssetRequest +) diff --git a/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/provenance/tx/model/CreateTxRequestWrapper.kt b/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/provenance/tx/model/CreateTxRequestWrapper.kt new file mode 100644 index 00000000..6d3b8c59 --- /dev/null +++ b/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/provenance/tx/model/CreateTxRequestWrapper.kt @@ -0,0 +1,9 @@ +package io.provenance.onboarding.domain.usecase.provenance.tx.model + +import io.provenance.api.models.p8e.CreateTxRequest +import java.util.UUID + +data class CreateTxRequestWrapper( + val uuid: UUID, + val request: CreateTxRequest +) diff --git a/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/provenance/tx/model/ExecuteTxRequest.kt b/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/provenance/tx/model/ExecuteTxRequest.kt deleted file mode 100644 index d7493e3d..00000000 --- a/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/provenance/tx/model/ExecuteTxRequest.kt +++ /dev/null @@ -1,11 +0,0 @@ -package io.provenance.onboarding.domain.usecase.provenance.tx.model - -import io.provenance.api.models.account.AccountInfo -import io.provenance.onboarding.domain.usecase.common.model.TxBody - -data class ExecuteTxRequest( - val account: AccountInfo, - val chainId: String, - val nodeEndpoint: String, - val tx: TxBody, -) diff --git a/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/provenance/tx/model/ExecuteTxRequestWrapper.kt b/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/provenance/tx/model/ExecuteTxRequestWrapper.kt new file mode 100644 index 00000000..6f9942e9 --- /dev/null +++ b/service/src/main/kotlin/io/provenance/onboarding/domain/usecase/provenance/tx/model/ExecuteTxRequestWrapper.kt @@ -0,0 +1,9 @@ +package io.provenance.onboarding.domain.usecase.provenance.tx.model + +import io.provenance.api.models.p8e.ExecuteTxRequest +import java.util.UUID + +data class ExecuteTxRequestWrapper( + val uuid: UUID, + val request: ExecuteTxRequest +) diff --git a/service/src/main/kotlin/io/provenance/onboarding/frameworks/config/AppConfig.kt b/service/src/main/kotlin/io/provenance/onboarding/frameworks/config/AppConfig.kt index 67080dd1..ea35588f 100644 --- a/service/src/main/kotlin/io/provenance/onboarding/frameworks/config/AppConfig.kt +++ b/service/src/main/kotlin/io/provenance/onboarding/frameworks/config/AppConfig.kt @@ -14,6 +14,7 @@ import org.springframework.context.annotation.Primary ObjectStoreConfig::class, VaultProperties::class, ServiceKeysProperties::class, + ProvenanceProperties::class ] ) class AppConfig { diff --git a/service/src/main/kotlin/io/provenance/onboarding/frameworks/config/ProvenanceProperties.kt b/service/src/main/kotlin/io/provenance/onboarding/frameworks/config/ProvenanceProperties.kt new file mode 100644 index 00000000..92065669 --- /dev/null +++ b/service/src/main/kotlin/io/provenance/onboarding/frameworks/config/ProvenanceProperties.kt @@ -0,0 +1,10 @@ +package io.provenance.onboarding.frameworks.config + +import org.springframework.boot.context.properties.ConfigurationProperties +import org.springframework.validation.annotation.Validated + +@ConfigurationProperties(prefix = "p8e") +@Validated +class ProvenanceProperties { + var mainnet: Boolean = false +} diff --git a/service/src/main/kotlin/io/provenance/onboarding/frameworks/provenance/ProvenanceService.kt b/service/src/main/kotlin/io/provenance/onboarding/frameworks/provenance/ProvenanceService.kt index 5f971869..273e6340 100644 --- a/service/src/main/kotlin/io/provenance/onboarding/frameworks/provenance/ProvenanceService.kt +++ b/service/src/main/kotlin/io/provenance/onboarding/frameworks/provenance/ProvenanceService.kt @@ -14,7 +14,7 @@ import io.provenance.client.grpc.Signer import io.provenance.metadata.v1.ScopeRequest import io.provenance.metadata.v1.ScopeResponse import io.provenance.onboarding.domain.provenance.Provenance -import io.provenance.onboarding.domain.usecase.common.model.TxBody +import io.provenance.api.models.p8e.TxBody import io.provenance.onboarding.frameworks.provenance.exceptions.ContractTxException import io.provenance.onboarding.frameworks.provenance.extensions.getBaseAccount import io.provenance.onboarding.frameworks.provenance.extensions.getCurrentHeight diff --git a/service/src/main/kotlin/io/provenance/onboarding/frameworks/provenance/utility/ProvenanceUtils.kt b/service/src/main/kotlin/io/provenance/onboarding/frameworks/provenance/utility/ProvenanceUtils.kt index f5bc6da1..b130379a 100644 --- a/service/src/main/kotlin/io/provenance/onboarding/frameworks/provenance/utility/ProvenanceUtils.kt +++ b/service/src/main/kotlin/io/provenance/onboarding/frameworks/provenance/utility/ProvenanceUtils.kt @@ -28,7 +28,7 @@ import io.provenance.metadata.v1.RecordInputStatus import io.provenance.metadata.v1.RecordOutput import io.provenance.metadata.v1.ResultStatus import io.provenance.onboarding.domain.usecase.common.model.ScopeConfig -import io.provenance.onboarding.domain.usecase.common.model.TxBody +import io.provenance.api.models.p8e.TxBody import io.provenance.onboarding.frameworks.provenance.extensions.toAny import io.provenance.onboarding.frameworks.provenance.extensions.toBase64String import io.provenance.onboarding.frameworks.provenance.extensions.toJson diff --git a/service/src/main/kotlin/io/provenance/onboarding/frameworks/web/Routes.kt b/service/src/main/kotlin/io/provenance/onboarding/frameworks/web/Routes.kt index d9456601..4cf46037 100644 --- a/service/src/main/kotlin/io/provenance/onboarding/frameworks/web/Routes.kt +++ b/service/src/main/kotlin/io/provenance/onboarding/frameworks/web/Routes.kt @@ -5,6 +5,8 @@ object Routes { const val MANAGE_BASE = "$CONTEXT/manage" const val SECURE_BASE = "$CONTEXT/secure/api" const val EXTERNAL_BASE = "$CONTEXT/external/api" + const val INTERNAL_BASE = "$CONTEXT/internal/api" const val SECURE_BASE_V1 = "$SECURE_BASE/v1" const val EXTERNAL_BASE_V1 = "$EXTERNAL_BASE/v1" + const val INTERNAL_BASE_V1 = "$INTERNAL_BASE/v1" } diff --git a/service/src/main/kotlin/io/provenance/onboarding/frameworks/web/config/SecurityConfig.kt b/service/src/main/kotlin/io/provenance/onboarding/frameworks/web/config/SecurityConfig.kt index 677178ae..c3948b6e 100644 --- a/service/src/main/kotlin/io/provenance/onboarding/frameworks/web/config/SecurityConfig.kt +++ b/service/src/main/kotlin/io/provenance/onboarding/frameworks/web/config/SecurityConfig.kt @@ -18,7 +18,7 @@ class SecurityConfig { @Bean fun securityWebFilterChain(http: ServerHttpSecurity): SecurityWebFilterChain { http.authorizeExchange { - it.pathMatchers("${Routes.MANAGE_BASE}/**", "${Routes.EXTERNAL_BASE}/**").permitAll() + it.pathMatchers("${Routes.MANAGE_BASE}/**", "${Routes.EXTERNAL_BASE}/**", "${Routes.INTERNAL_BASE}/**").permitAll() } .csrf().disable() return http.build() diff --git a/service/src/main/kotlin/io/provenance/onboarding/frameworks/web/external/cee/CeeHandler.kt b/service/src/main/kotlin/io/provenance/onboarding/frameworks/web/external/cee/CeeHandler.kt index 560955d8..87421340 100644 --- a/service/src/main/kotlin/io/provenance/onboarding/frameworks/web/external/cee/CeeHandler.kt +++ b/service/src/main/kotlin/io/provenance/onboarding/frameworks/web/external/cee/CeeHandler.kt @@ -1,10 +1,15 @@ package io.provenance.onboarding.frameworks.web.external.cee import io.provenance.onboarding.domain.usecase.cee.approve.ApproveContractExecution +import io.provenance.onboarding.domain.usecase.cee.approve.models.ApproveContractRequestWrapper import io.provenance.onboarding.domain.usecase.cee.execute.ExecuteContract +import io.provenance.onboarding.domain.usecase.cee.execute.model.ExecuteContractRequestWrapper import io.provenance.onboarding.domain.usecase.cee.reject.RejectContractExecution +import io.provenance.onboarding.domain.usecase.cee.reject.models.RejectContractExecutionRequestWrapper import io.provenance.onboarding.domain.usecase.cee.submit.SubmitContractExecutionResult +import io.provenance.onboarding.domain.usecase.cee.submit.models.SubmitContractExecutionResultRequestWrapper import io.provenance.onboarding.frameworks.web.misc.foldToServerResponse +import io.provenance.onboarding.frameworks.web.misc.getUser import org.springframework.stereotype.Component import org.springframework.web.reactive.function.server.ServerRequest import org.springframework.web.reactive.function.server.ServerResponse @@ -18,18 +23,18 @@ class CeeHandler( private val submitContract: SubmitContractExecutionResult ) { suspend fun executeContract(req: ServerRequest): ServerResponse = runCatching { - executeContract.execute(req.awaitBody()) + executeContract.execute(ExecuteContractRequestWrapper(req.getUser(), req.awaitBody())) }.foldToServerResponse() suspend fun submitContractResult(req: ServerRequest): ServerResponse = runCatching { - submitContract.execute(req.awaitBody()) + submitContract.execute(SubmitContractExecutionResultRequestWrapper(req.getUser(), req.awaitBody())) }.foldToServerResponse() suspend fun approveContractExecution(req: ServerRequest): ServerResponse = runCatching { - approveContractExecution.execute(req.awaitBody()) + approveContractExecution.execute(ApproveContractRequestWrapper(req.getUser(), req.awaitBody())) }.foldToServerResponse() suspend fun rejectContractExecution(req: ServerRequest): ServerResponse = runCatching { - rejectContractExecution.execute(req.awaitBody()) + rejectContractExecution.execute(RejectContractExecutionRequestWrapper(req.getUser(), req.awaitBody())) }.foldToServerResponse() } diff --git a/service/src/main/kotlin/io/provenance/onboarding/frameworks/web/external/objectStore/ObjectStoreHandler.kt b/service/src/main/kotlin/io/provenance/onboarding/frameworks/web/external/objectStore/ObjectStoreHandler.kt index 490cc9f1..108f42ef 100644 --- a/service/src/main/kotlin/io/provenance/onboarding/frameworks/web/external/objectStore/ObjectStoreHandler.kt +++ b/service/src/main/kotlin/io/provenance/onboarding/frameworks/web/external/objectStore/ObjectStoreHandler.kt @@ -4,7 +4,9 @@ import io.provenance.onboarding.domain.usecase.objectStore.EnableReplication import io.provenance.onboarding.domain.usecase.objectStore.GetAsset import io.provenance.onboarding.domain.usecase.objectStore.SnapshotAsset import io.provenance.onboarding.domain.usecase.objectStore.StoreAsset +import io.provenance.onboarding.domain.usecase.objectStore.model.StoreAssetRequestWrapper import io.provenance.onboarding.frameworks.web.misc.foldToServerResponse +import io.provenance.onboarding.frameworks.web.misc.getUser import org.springframework.stereotype.Component import org.springframework.web.reactive.function.server.ServerRequest import org.springframework.web.reactive.function.server.ServerResponse @@ -18,7 +20,7 @@ class ObjectStoreHandler( private val enableReplication: EnableReplication, ) { suspend fun store(req: ServerRequest): ServerResponse = runCatching { - storeAsset.execute(req.awaitBody()) + storeAsset.execute(StoreAssetRequestWrapper(req.getUser(), req.awaitBody())) }.foldToServerResponse() suspend fun snapshot(req: ServerRequest): ServerResponse = runCatching { diff --git a/service/src/main/kotlin/io/provenance/onboarding/frameworks/web/external/provenance/ProvenanceHandler.kt b/service/src/main/kotlin/io/provenance/onboarding/frameworks/web/external/provenance/ProvenanceHandler.kt index fa5517dd..3f3955c5 100644 --- a/service/src/main/kotlin/io/provenance/onboarding/frameworks/web/external/provenance/ProvenanceHandler.kt +++ b/service/src/main/kotlin/io/provenance/onboarding/frameworks/web/external/provenance/ProvenanceHandler.kt @@ -3,7 +3,11 @@ package io.provenance.onboarding.frameworks.web.external.provenance import io.provenance.onboarding.domain.usecase.provenance.tx.CreateTx import io.provenance.onboarding.domain.usecase.provenance.tx.CreateTxOnboardAsset import io.provenance.onboarding.domain.usecase.provenance.tx.ExecuteTx +import io.provenance.onboarding.domain.usecase.provenance.tx.model.CreateTxOnboardAssetRequestWrapper +import io.provenance.onboarding.domain.usecase.provenance.tx.model.CreateTxRequestWrapper +import io.provenance.onboarding.domain.usecase.provenance.tx.model.ExecuteTxRequestWrapper import io.provenance.onboarding.frameworks.web.misc.foldToServerResponse +import io.provenance.onboarding.frameworks.web.misc.getUser import org.springframework.stereotype.Component import org.springframework.web.reactive.function.server.ServerRequest import org.springframework.web.reactive.function.server.ServerResponse @@ -16,14 +20,14 @@ class ProvenanceHandler( private val createTxAndOnboardAsset: CreateTxOnboardAsset ) { suspend fun createTxAndOnboard(req: ServerRequest): ServerResponse = runCatching { - createTxAndOnboardAsset.execute(req.awaitBody()) + createTxAndOnboardAsset.execute(CreateTxOnboardAssetRequestWrapper(req.getUser(), req.awaitBody())) }.foldToServerResponse() suspend fun generateTx(req: ServerRequest): ServerResponse = runCatching { - createTx.execute(req.awaitBody()) + createTx.execute(CreateTxRequestWrapper(req.getUser(), req.awaitBody())) }.foldToServerResponse() suspend fun executeTx(req: ServerRequest): ServerResponse = runCatching { - executeTx.execute(req.awaitBody()) + executeTx.execute(ExecuteTxRequestWrapper(req.getUser(), req.awaitBody())) }.foldToServerResponse() } diff --git a/service/src/main/kotlin/io/provenance/onboarding/frameworks/web/internal/cee/InternalCeeApi.kt b/service/src/main/kotlin/io/provenance/onboarding/frameworks/web/internal/cee/InternalCeeApi.kt new file mode 100644 index 00000000..ab52f588 --- /dev/null +++ b/service/src/main/kotlin/io/provenance/onboarding/frameworks/web/internal/cee/InternalCeeApi.kt @@ -0,0 +1,24 @@ +package io.provenance.onboarding.frameworks.web.internal.cee + +import io.provenance.onboarding.frameworks.web.Routes +import io.provenance.onboarding.frameworks.web.logging.logExchange +import mu.KotlinLogging +import org.springframework.context.annotation.Bean +import org.springframework.context.annotation.Configuration +import org.springframework.web.reactive.function.server.coRouter + +private val log = KotlinLogging.logger {} + +@Configuration +class InternalCeeApi { + @Bean + fun internalCeeApiV1(handler: InternalCeeHandler) = coRouter { + logExchange(log) + "${Routes.INTERNAL_BASE_V1}/cee".nest { + POST("/approve", handler::approveContractExecution) + POST("/execute", handler::executeContract) + POST("/submit", handler::submitContractResult) + POST("/reject", handler::rejectContractExecution) + } + } +} diff --git a/service/src/main/kotlin/io/provenance/onboarding/frameworks/web/internal/cee/InternalCeeHandler.kt b/service/src/main/kotlin/io/provenance/onboarding/frameworks/web/internal/cee/InternalCeeHandler.kt new file mode 100644 index 00000000..535ba5a3 --- /dev/null +++ b/service/src/main/kotlin/io/provenance/onboarding/frameworks/web/internal/cee/InternalCeeHandler.kt @@ -0,0 +1,40 @@ +package io.provenance.onboarding.frameworks.web.internal.cee + +import io.provenance.onboarding.domain.usecase.cee.approve.ApproveContractExecution +import io.provenance.onboarding.domain.usecase.cee.approve.models.ApproveContractRequestWrapper +import io.provenance.onboarding.domain.usecase.cee.execute.ExecuteContract +import io.provenance.onboarding.domain.usecase.cee.execute.model.ExecuteContractRequestWrapper +import io.provenance.onboarding.domain.usecase.cee.reject.RejectContractExecution +import io.provenance.onboarding.domain.usecase.cee.reject.models.RejectContractExecutionRequestWrapper +import io.provenance.onboarding.domain.usecase.cee.submit.SubmitContractExecutionResult +import io.provenance.onboarding.domain.usecase.cee.submit.models.SubmitContractExecutionResultRequestWrapper +import io.provenance.onboarding.frameworks.web.misc.foldToServerResponse +import io.provenance.onboarding.frameworks.web.misc.getUser +import org.springframework.stereotype.Component +import org.springframework.web.reactive.function.server.ServerRequest +import org.springframework.web.reactive.function.server.ServerResponse +import org.springframework.web.reactive.function.server.awaitBody + +@Component +class InternalCeeHandler( + private val executeContract: ExecuteContract, + private val approveContractExecution: ApproveContractExecution, + private val rejectContractExecution: RejectContractExecution, + private val submitContract: SubmitContractExecutionResult +) { + suspend fun executeContract(req: ServerRequest): ServerResponse = runCatching { + executeContract.execute(ExecuteContractRequestWrapper(req.getUser(), req.awaitBody())) + }.foldToServerResponse() + + suspend fun submitContractResult(req: ServerRequest): ServerResponse = runCatching { + submitContract.execute(SubmitContractExecutionResultRequestWrapper(req.getUser(), req.awaitBody())) + }.foldToServerResponse() + + suspend fun approveContractExecution(req: ServerRequest): ServerResponse = runCatching { + approveContractExecution.execute(ApproveContractRequestWrapper(req.getUser(), req.awaitBody())) + }.foldToServerResponse() + + suspend fun rejectContractExecution(req: ServerRequest): ServerResponse = runCatching { + rejectContractExecution.execute(RejectContractExecutionRequestWrapper(req.getUser(), req.awaitBody())) + }.foldToServerResponse() +} diff --git a/service/src/main/kotlin/io/provenance/onboarding/frameworks/web/internal/objectStore/InternalObjectStoreApi.kt b/service/src/main/kotlin/io/provenance/onboarding/frameworks/web/internal/objectStore/InternalObjectStoreApi.kt new file mode 100644 index 00000000..c4150aac --- /dev/null +++ b/service/src/main/kotlin/io/provenance/onboarding/frameworks/web/internal/objectStore/InternalObjectStoreApi.kt @@ -0,0 +1,23 @@ +package io.provenance.onboarding.frameworks.web.internal.objectStore + +import io.provenance.onboarding.frameworks.web.Routes +import io.provenance.onboarding.frameworks.web.logging.logExchange +import mu.KotlinLogging +import org.springframework.context.annotation.Bean +import org.springframework.context.annotation.Configuration +import org.springframework.web.reactive.function.server.coRouter + +private val log = KotlinLogging.logger {} + +@Configuration +class InternalObjectStoreApi { + @Bean + fun internalObjectStoreApiV1(handler: InternalObjectStoreHandler) = coRouter { + logExchange(log) + Routes.INTERNAL_BASE_V1.nest { + "/eos".nest { + POST("", handler::store) + } + } + } +} diff --git a/service/src/main/kotlin/io/provenance/onboarding/frameworks/web/internal/objectStore/InternalObjectStoreHandler.kt b/service/src/main/kotlin/io/provenance/onboarding/frameworks/web/internal/objectStore/InternalObjectStoreHandler.kt new file mode 100644 index 00000000..619035a8 --- /dev/null +++ b/service/src/main/kotlin/io/provenance/onboarding/frameworks/web/internal/objectStore/InternalObjectStoreHandler.kt @@ -0,0 +1,19 @@ +package io.provenance.onboarding.frameworks.web.internal.objectStore + +import io.provenance.onboarding.domain.usecase.objectStore.StoreAsset +import io.provenance.onboarding.domain.usecase.objectStore.model.StoreAssetRequestWrapper +import io.provenance.onboarding.frameworks.web.misc.foldToServerResponse +import io.provenance.onboarding.frameworks.web.misc.getUser +import org.springframework.stereotype.Component +import org.springframework.web.reactive.function.server.ServerRequest +import org.springframework.web.reactive.function.server.ServerResponse +import org.springframework.web.reactive.function.server.awaitBody + +@Component +class InternalObjectStoreHandler( + private val storeAsset: StoreAsset +) { + suspend fun store(req: ServerRequest): ServerResponse = runCatching { + storeAsset.execute(StoreAssetRequestWrapper(req.getUser(), req.awaitBody())) + }.foldToServerResponse() +} diff --git a/service/src/main/resources/application-container.properties b/service/src/main/resources/application-container.properties index 6535269c..f69d9072 100644 --- a/service/src/main/resources/application-container.properties +++ b/service/src/main/resources/application-container.properties @@ -11,3 +11,5 @@ vault.tokenPath=${VAULT_TOKEN_PATH:vault/secrets/token} # Service Keys service-keys.portfolioManager=${PORTFOLIO_MANAGER_PUBLIC_KEY} service-keys.dart=${DART_PUBLIC_KEY} + +p8e.mainnet=${IS_MAIN_NET:false} diff --git a/service/src/main/resources/application-development.properties b/service/src/main/resources/application-development.properties index 7f46cf30..4c059862 100644 --- a/service/src/main/resources/application-development.properties +++ b/service/src/main/resources/application-development.properties @@ -13,3 +13,5 @@ vault.tokenPath=${VAULT_TOKEN_PATH:.vault-token} # Service Keys service-keys.portfolioManager=AoXp62d+/MNs9Jokzemb4NjrQy5caucVED0iRR4oGCAl service-keys.dart=Akf4FbRggw8xHsz4NidwH0H/EdITZ9OA/SjaCsjDNd1U + +p8e.mainnet=false