Skip to content

Commit 893346e

Browse files
canton-network-daDA Automation
andauthored
Update Splice from CCI (#236)
Signed-off-by: DA Automation <splice-maintainers@digitalasset.com> Co-authored-by: DA Automation <splice-maintainers@digitalasset.com>
1 parent 8ee87af commit 893346e

File tree

107 files changed

+555
-213
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

107 files changed

+555
-213
lines changed

LATEST_RELEASE

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0.3.11
1+
0.3.12

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0.3.12
1+
0.3.13

apps/app/src/main/scala/org/lfdecentralizedtrust/splice/config/ConfigTransforms.scala

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -635,6 +635,15 @@ object ConfigTransforms {
635635
.focus(_.ledgerApi)
636636
.modify(portTransform(bump, _))
637637

638+
private def portTransform(
639+
bump: Int,
640+
c: SvParticipantClientConfig,
641+
): SvParticipantClientConfig =
642+
c.focus(_.adminApi)
643+
.modify(portTransform(bump, _))
644+
.focus(_.ledgerApi)
645+
.modify(portTransform(bump, _))
646+
638647
private def portTransform(bump: Int, c: SvSequencerConfig): SvSequencerConfig =
639648
c.focus(_.adminApi)
640649
.modify(portTransform(bump, _))

apps/app/src/main/scala/org/lfdecentralizedtrust/splice/config/SpliceConfig.scala

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -495,6 +495,8 @@ object SpliceConfig {
495495
)
496496
implicit val beneficiaryConfigReader: ConfigReader[BeneficiaryConfig] =
497497
deriveReader[BeneficiaryConfig]
498+
implicit val svParticipantClientConfigReader: ConfigReader[SvParticipantClientConfig] =
499+
deriveReader[SvParticipantClientConfig]
498500
implicit val svConfigReader: ConfigReader[SvAppBackendConfig] =
499501
deriveReader[SvAppBackendConfig].emap { conf =>
500502
def checkFoundDsoConfig(check: (SvAppBackendConfig, FoundDso) => Boolean) =
@@ -847,6 +849,8 @@ object SpliceConfig {
847849
implicitly[ConfigWriter[String]].contramap(_.toString)
848850
implicit val beneficiaryConfigWriter: ConfigWriter[BeneficiaryConfig] =
849851
deriveWriter[BeneficiaryConfig]
852+
implicit val svParticipantClientConfigWriter: ConfigWriter[SvParticipantClientConfig] =
853+
deriveWriter[SvParticipantClientConfig]
850854
implicit val svConfigWriter: ConfigWriter[SvAppBackendConfig] =
851855
deriveWriter[SvAppBackendConfig]
852856

apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/plugins/UseToxiproxy.scala

Lines changed: 29 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.lfdecentralizedtrust.splice.integration.plugins.toxiproxy
22

33
import org.lfdecentralizedtrust.splice.config.{SpliceConfig, ParticipantClientConfig}
4+
import org.lfdecentralizedtrust.splice.sv.config.SvParticipantClientConfig
45
import org.lfdecentralizedtrust.splice.environment.EnvironmentImpl
56
import org.lfdecentralizedtrust.splice.integration.tests.SpliceTests.SpliceTestConsoleEnvironment
67
import org.lfdecentralizedtrust.splice.scan.admin.api.client.BftScanConnection.BftScanClientConfig
@@ -35,20 +36,35 @@ case class UseToxiproxy(
3536
proxies += (name -> proxy)
3637
}
3738

39+
def addLedgerApiProxy(
40+
instanceName: String,
41+
participantClient: SvParticipantClientConfig,
42+
extraPortBump: Int,
43+
): SvParticipantClientConfig = {
44+
val bump = portBump + extraPortBump
45+
val lapiHost = participantClient.ledgerApi.clientConfig.address
46+
val lapiPort = participantClient.ledgerApi.clientConfig.port
47+
val upstream = s"${lapiHost}:${lapiPort}"
48+
val listenPort = lapiPort + bump
49+
addProxy(s"${instanceName}-ledger-api", s"localhost:${listenPort}", upstream)
50+
participantClient.focus(_.ledgerApi.clientConfig).modify(c => c.copy(port = c.port + bump))
51+
}
52+
53+
def addLedgerApiProxy(
54+
instanceName: String,
55+
participantClient: ParticipantClientConfig,
56+
extraPortBump: Int,
57+
): ParticipantClientConfig = {
58+
val bump = portBump + extraPortBump
59+
val lapiHost = participantClient.ledgerApi.clientConfig.address
60+
val lapiPort = participantClient.ledgerApi.clientConfig.port
61+
val upstream = s"${lapiHost}:${lapiPort}"
62+
val listenPort = lapiPort + bump
63+
addProxy(s"${instanceName}-ledger-api", s"localhost:${listenPort}", upstream)
64+
participantClient.focus(_.ledgerApi.clientConfig).modify(c => c.copy(port = c.port + bump))
65+
}
66+
3867
override def beforeEnvironmentCreated(config: SpliceConfig): SpliceConfig = {
39-
def addLedgerApiProxy(
40-
instanceName: String,
41-
participantClient: ParticipantClientConfig,
42-
extraPortBump: Int,
43-
): ParticipantClientConfig = {
44-
val bump = portBump + extraPortBump
45-
val lapiHost = participantClient.ledgerApi.clientConfig.address
46-
val lapiPort = participantClient.ledgerApi.clientConfig.port
47-
val upstream = s"${lapiHost}:${lapiPort}"
48-
val listenPort = lapiPort + bump
49-
addProxy(s"${instanceName}-ledger-api", s"localhost:${listenPort}", upstream)
50-
participantClient.focus(_.ledgerApi.clientConfig).modify(c => c.copy(port = c.port + bump))
51-
}
5268

5369
def addScanAppHttpProxy(
5470
instanceName: String,

apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/ManualStartIntegrationTest.scala

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.lfdecentralizedtrust.splice.integration.tests
22

33
import com.daml.nonempty.NonEmpty
4+
import com.digitalasset.canton.DomainAlias
45
import com.digitalasset.canton.admin.api.client.data.PruningSchedule
56
import com.digitalasset.canton.config.CantonRequireTypes.InstanceName
67
import com.digitalasset.canton.config.PositiveDurationSeconds
@@ -195,6 +196,28 @@ class ManualStartIntegrationTest
195196
}
196197
}
197198

199+
clue("SV1 and SV2 have configured amplification on the participant sequencer connection") {
200+
Seq(
201+
participantAdminConnection("sv1", sv1Backend.config),
202+
participantAdminConnection("sv2", sv2Backend.config),
203+
).map { participantConnection =>
204+
val sequencerConnections =
205+
participantConnection
206+
.lookupDomainConnectionConfig(DomainAlias.tryCreate("global"))
207+
.futureValue
208+
.value
209+
.sequencerConnections
210+
sequencerConnections.connections.size shouldBe 1
211+
sequencerConnections.sequencerTrustThreshold shouldBe PositiveInt.tryCreate(1)
212+
sequencerConnections.submissionRequestAmplification shouldBe SubmissionRequestAmplification(
213+
PositiveInt.tryCreate(5),
214+
NonNegativeFiniteDuration.ofSeconds(5),
215+
)
216+
// otherwise we get log warnings
217+
participantConnection.close()
218+
}
219+
}
220+
198221
// A most basic check to see whether the network is functional
199222
onboardWalletUser(aliceWalletClient, aliceValidatorBackend)
200223
actAndCheck(

apps/common/frontend/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
"common-typeface-termina": "1.0.0",
2323
"date-fns": "2.29.3",
2424
"decimal.js-light": "2.5.1",
25-
"dompurify": "3.1.6",
25+
"dompurify": "3.2.4",
2626
"grpc-web": "1.3.1",
2727
"html-react-parser": "5.1.15",
2828
"jose": "4.10.3",

apps/common/frontend/src/contexts/LedgerApiContext.tsx

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,26 @@ import { Choice, ContractId, Template, TemplateOrInterface } from '@daml/types';
1010

1111
const ANS_LEDGER_NAME = 'ans-ledger';
1212

13+
interface JsonApiErrorResponse {
14+
status: number;
15+
statusText: string;
16+
body: string;
17+
}
18+
19+
export class JsonApiError extends Error {
20+
status: number;
21+
statusText: string;
22+
body: string;
23+
24+
constructor({ status, body, statusText }: JsonApiErrorResponse) {
25+
super(body);
26+
this.name = 'JsonApiError';
27+
this.status = status;
28+
this.statusText = statusText;
29+
this.body = body;
30+
}
31+
}
32+
1333
export abstract class PackageIdResolver {
1434
protected getQualifiedName(templateId: string): string {
1535
const parts = templateId.split(':');
@@ -81,6 +101,7 @@ export class LedgerApiClient {
81101
);
82102
return user.primaryParty!;
83103
}
104+
84105
async exercise<T extends object, C, R, K>(
85106
actAs: string[],
86107
readAs: string[],
@@ -142,11 +163,17 @@ export class LedgerApiClient {
142163
return r.json();
143164
} else {
144165
const body = await r.text();
145-
throw new Error(`HTTP ${r.status} ${r.statusText}: ${body}`);
166+
throw new JsonApiError({ status: r.status, body: body, statusText: r.statusText });
146167
}
147168
})
148169
.catch(e => {
149-
console.debug(`${describeChoice} failed: ${JSON.stringify(e)}`);
170+
if (e instanceof JsonApiError) {
171+
console.debug(
172+
`${describeChoice} failed with status ${e.status}: ${e.statusText} and body: ${e.body}`
173+
);
174+
} else {
175+
console.debug(`${describeChoice} failed: ${JSON.stringify(e)}`);
176+
}
150177
throw e;
151178
});
152179

apps/common/frontend/src/contexts/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,6 @@ export {
99
LedgerApiClientProvider,
1010
useLedgerApiClient,
1111
PackageIdResolver,
12+
JsonApiError,
1213
} from './LedgerApiContext';
1314
export { ConfigProvider, useConfig } from './ConfigContext';

apps/common/src/main/openapi/common-internal.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -273,4 +273,5 @@ components:
273273
type: integer
274274
format: int64
275275
description: |
276-
When requesting the next page of results, pass this as URL query parameter `after`.
276+
When requesting the next page of results, pass this as URL query parameter `after`.
277+
If absent or `null`, there are no more pages.

0 commit comments

Comments
 (0)