Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

LW-11609 Web socket ChainHistoryProvider #1489

Open
wants to merge 3 commits into
base: master
Choose a base branch
from

Conversation

iccicci
Copy link
Contributor

@iccicci iccicci commented Sep 24, 2024

Context

Lace performs a huge amount of HTTP calls.

Proposed Solution

Implemented event based ChainHistoryProvider.transactionsByAddresses and UtxoProvider.

The load tests demonstrate this back end implementation is able to sustain even an unexpected workload: 100 users simultaneously performing wallet restoration.

Follow some load test results.

1 user performing wallet restoration:

_operational...............: avg=251ms    min=251ms    med=251ms    max=251ms    p(90)=251ms    p(95)=251ms
_sync......................: avg=7.94s    min=7.94s    med=7.94s    max=7.94s    p(90)=7.94s    p(95)=7.94s
_transactions_per_wallet...: avg=203      min=203      med=203      max=203      p(90)=203      p(95)=203

2 users simultaneously performing wallet restoration:

_operational...............: avg=169.5ms  min=86ms     med=169.5ms  max=253ms    p(90)=236.3ms  p(95)=244.65ms
_sync......................: avg=10.63s   min=9.86s    med=10.63s   max=11.4s    p(90)=11.24s   p(95)=11.32s
_transactions_per_wallet...: avg=239      min=203      med=239      max=275      p(90)=267.8    p(95)=271.4

3 users simultaneously performing wallet restoration:

_operational...............: avg=101.66ms min=35ms     med=42ms    max=228ms    p(90)=190.8ms  p(95)=209.39ms
_sync......................: avg=13.63s   min=12.66s   med=13.63s  max=14.61s   p(90)=14.41s   p(95)=14.51s
_transactions_per_wallet...: avg=200      min=122      med=203     max=275      p(90)=260.6    p(95)=267.8

4 users simultaneously performing wallet restoration:

_operational...............: avg=62.5ms  min=16ms     med=38ms   max=158ms    p(90)=122.3ms  p(95)=140.14ms
_sync......................: avg=10.14s  min=9.11s    med=10.09s max=11.27s   p(90)=10.99s   p(95)=11.13s
_transactions_per_wallet...: avg=209.75  min=84       med=162.5  max=430      p(90)=361.9    p(95)=395.95

5 users simultaneously performing wallet restoration:

_operational...............: avg=294.6ms  min=255ms    med=287ms   max=360ms    p(90)=330.8ms  p(95)=345.4ms
_sync......................: avg=15.78s   min=14.79s   med=15.86s  max=16.9s    p(90)=16.71s   p(95)=16.81s
_transactions_per_wallet...: avg=215.2    min=84       med=203     max=430      p(90)=352.8    p(95)=391.4

10 users simultaneously performing wallet restoration:

_operational...............: avg=45.8ms  min=14ms     med=32.5ms  max=180ms    p(90)=60.29ms p(95)=120.14ms
_sync......................: avg=23.65s  min=22.24s   med=23.56s  max=25.01s   p(90)=24.76s  p(95)=24.89s
_transactions_per_wallet...: avg=221.5   min=76       med=192     max=430      p(90)=394     p(95)=412

20 users simultaneously performing wallet restoration:

_operational...............: avg=303.85ms min=293ms    med=300.5ms  max=325ms    p(90)=315.1ms  p(95)=316.45ms
_sync......................: avg=56.01s   min=54.68s   med=56.01s   max=57.27s   p(90)=57.01s   p(95)=57.03s
_transactions_per_wallet...: avg=264.45   min=75       med=191.5    max=1141     p(90)=400.3    p(95)=465.55

50 users simultaneously performing wallet restoration:

_operational...............: avg=31.94ms min=11ms     med=35ms    max=81ms    p(90)=44ms    p(95)=46.55ms
_sync......................: avg=2m5s    min=2m4s     med=2m5s    max=2m6s    p(90)=2m6s    p(95)=2m6s
_transactions_per_wallet...: avg=251.86  min=22       med=201     max=1141    p(90)=424.6   p(95)=505.85

Here is not relevant the time, but moreover that even under an insane workload the server is able to complete its job without timeout errors for the customers.

100 users simultaneously performing wallet restoration:

_operational...............: avg=283.58ms min=248ms    med=279ms    max=529ms    p(90)=293ms    p(95)=393.54ms
_sync......................: avg=4m25s    min=4m23s    med=4m25s    max=4m26s    p(90)=4m26s    p(95)=4m26s 
_transactions_per_wallet...: avg=278.65   min=22       med=222      max=1141     p(90)=516.2    p(95)=602.2

100 users with lots of transactions simultaneously performing wallet restoration:

_operational...............: avg=35.63ms min=11ms   med=33ms    max=232ms    p(90)=40.5ms  p(95)=85.29ms
_sync......................: avg=7m22s   min=7m20s  med=7m22s   max=7m24s    p(90)=7m23s   p(95)=7m23s
_transactions_per_wallet...: avg=642.17  min=160    med=599     max=1746     p(90)=1039.7  p(95)=1308

Important Changes Introduced

The DbSyncChainHistoryProvider and the DbSyncUtxoProvider perform almost the same actions about utxos but with some slight difference.

They were aligned to produce exactly the same data with two purposes:

  1. simply for coherence
  2. CardanoWsClient uses the same source for both the pseudo-providers implementations; this simplified a lot the comparison tests.

Copy link

github-actions bot commented Sep 24, 2024

dev-preview@us-east-1 would change:

dev-preview, dev-preview-cardanojs-asset-projector, Deployment (apps) would change:

  # Source: cardanojs/templates/asset-projector-deployment.yaml
  apiVersion: apps/v1
  kind: Deployment
  metadata:
    labels:
      app: asset-projector
      network: preview
      release: dev-preview-cardanojs
    name: dev-preview-cardanojs-asset-projector
  spec:
    selector:
      matchLabels:
        app: asset-projector
        network: preview
        release: dev-preview-cardanojs
    template:
      metadata:
        labels:
          app: asset-projector
          network: preview
          release: dev-preview-cardanojs
      spec:
        containers:
        - args:
          - start-projector
          env:
          - name: LOGGER_MIN_SEVERITY
            value: info
          - name: NETWORK
            value: preview
          - name: OGMIOS_SRV_SERVICE_NAME
            value: dev-preview-cardano-core.dev-preview.svc.cluster.local
          - name: POSTGRES_DB
            value: asset
          - name: POSTGRES_HOST
            value: dev-preview-postgresql
          - name: POSTGRES_PASSWORD
            valueFrom:
              secretKeyRef:
                key: password
                name: asset-owner-user.dev-preview-postgresql.credentials.postgresql.acid.zalan.do
          - name: POSTGRES_POOL_MAX
            value: "2"
          - name: POSTGRES_PORT
            value: "5432"
          - name: POSTGRES_SSL
            value: "true"
          - name: POSTGRES_SSL_CA_FILE
            value: /tls/ca.crt
          - name: POSTGRES_USER
            valueFrom:
              secretKeyRef:
                key: username
                name: asset-owner-user.dev-preview-postgresql.credentials.postgresql.acid.zalan.do
          - name: PROJECTION_NAMES
            value: asset
-         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:k6qiffajlfppp0cl4f1z0dd53g0v23w8
+         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:cizaa5rbpjcb13mmn3axq0vsz2d7hswi
          livenessProbe:
            httpGet:
              path: /v1.0.0/health
              port: 3000
            timeoutSeconds: 5
          name: asset-projector
          ports:
          - containerPort: 3000
            name: http
          resources:
            limits:
              cpu: 700m
              memory: 300Mi
            requests:
              cpu: 700m
              memory: 150Mi
          securityContext:
            runAsGroup: 0
            runAsUser: 0
          volumeMounts:
          - mountPath: /tls
            name: tls
        imagePullSecrets:
        - name: dockerconfigjson
        volumes:
        - name: tls
          secret:
            secretName: postgresql-server-cert

dev-preview, dev-preview-cardanojs-backend, Deployment (apps) would change:

  # Source: cardanojs/templates/backend-deployment.yaml
  apiVersion: apps/v1
  kind: Deployment
  metadata:
    labels:
      app: backend
      network: preview
      release: dev-preview-cardanojs
    name: dev-preview-cardanojs-backend
  spec:
    selector:
      matchLabels:
        app: backend
        network: preview
        release: dev-preview-cardanojs
    template:
      metadata:
        labels:
          app: backend
          network: preview
          release: dev-preview-cardanojs
      spec:
        containers:
        - args:
          - start-provider-server
          env:
          - name: ALLOWED_ORIGINS
            value: chrome-extension://gafhhkghbfjjkeiendhlofajokpaflmk,chrome-extension://efeiemlfnahiidnjglmehaihacglceia,chrome-extension://bjlhpephaokolembmpdcbobbpkjnoheb,chrome-extension://djcdfchkaijggdjokfomholkalbffgil,http://localhost/,http://localhost
          - name: BUILD_INFO
-           value: '{"lastModifiedDate":"20240927095406","rev":"0d39420ca376d6626c6e0714efe10b066a6472f6","shortRev":"0d39420"}'
+           value: '{"lastModifiedDate":"20241001080037","rev":"9bda2b74a6b12e2b28ba00c283fd78f1a97e6657","shortRev":"9bda2b7"}'
          - name: DISABLE_STAKE_POOL_METRIC_APY
            value: "true"
          - name: ENABLE_METRICS
            value: "true"
          - name: HANDLE_POLICY_IDS
            value: f0ff48bbb7bbe9d59a40f1ce90e9e9d0ff5002ec48f232b49ca0fb9a
          - name: HANDLE_PROVIDER_SERVER_URL
            value: https://preview.api.handle.me
          - name: LOGGER_MIN_SEVERITY
            value: info
          - name: NETWORK
            value: preview
          - name: NODE_ENV
            value: null
          - name: OGMIOS_SRV_SERVICE_NAME
            value: dev-preview-cardano-core.dev-preview.svc.cluster.local
          - name: PAGINATION_PAGE_SIZE_LIMIT
            value: "5500"
          - name: POSTGRES_DB_DB_SYNC
            value: cardano
          - name: POSTGRES_DB_HANDLE
            value: handle
          - name: POSTGRES_HOST_DB_SYNC
            value: dev-preview-postgresql
          - name: POSTGRES_HOST_HANDLE
            value: dev-preview-postgresql
          - name: POSTGRES_PASSWORD_DB_SYNC
            valueFrom:
              secretKeyRef:
                key: password
                name: cardano-owner-user.dev-preview-postgresql.credentials.postgresql.acid.zalan.do
          - name: POSTGRES_PASSWORD_HANDLE
            valueFrom:
              secretKeyRef:
                key: password
                name: handle-owner-user.dev-preview-postgresql.credentials.postgresql.acid.zalan.do
          - name: POSTGRES_POOL_MAX_DB_SYNC
            value: "50"
          - name: POSTGRES_POOL_MAX_HANDLE
            value: "10"
          - name: POSTGRES_PORT_DB_SYNC
            value: "5432"
          - name: POSTGRES_PORT_HANDLE
            value: "5432"
          - name: POSTGRES_SSL_CA_FILE_DB_SYNC
            value: /tls/ca.crt
          - name: POSTGRES_SSL_CA_FILE_HANDLE
            value: /tls/ca.crt
          - name: POSTGRES_SSL_DB_SYNC
            value: "true"
          - name: POSTGRES_SSL_HANDLE
            value: "true"
          - name: POSTGRES_USER_DB_SYNC
            valueFrom:
              secretKeyRef:
                key: username
                name: cardano-owner-user.dev-preview-postgresql.credentials.postgresql.acid.zalan.do
          - name: POSTGRES_USER_HANDLE
            valueFrom:
              secretKeyRef:
                key: username
                name: handle-owner-user.dev-preview-postgresql.credentials.postgresql.acid.zalan.do
          - name: SERVICE_NAMES
            value: asset,network-info,rewards,stake-pool,tx-submit,utxo
          - name: TOKEN_METADATA_SERVER_URL
            value: http://dev-preview-cardano-stack-metadata.dev-preview.svc.cluster.local
          - name: USE_BLOCKFROST
            value: "true"
          - name: USE_KORA_LABS
            value: "true"
-         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:k6qiffajlfppp0cl4f1z0dd53g0v23w8
+         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:cizaa5rbpjcb13mmn3axq0vsz2d7hswi
          livenessProbe:
            httpGet:
              path: /v1.0.0/health
              port: 3000
            periodSeconds: 60
            timeoutSeconds: 30
          name: backend
          ports:
          - containerPort: 3000
            name: http
          resources:
            requests:
              cpu: 1000m
              memory: 350Mi
          securityContext:
            runAsGroup: 0
            runAsUser: 0
          volumeMounts:
          - mountPath: /tls
            name: tls
        imagePullSecrets:
        - name: dockerconfigjson
        volumes:
        - name: tls
          secret:
            secretName: postgresql-server-cert

dev-preview, dev-preview-cardanojs-blockfrost-worker, Deployment (apps) would change:

  # Source: cardanojs/templates/blockfrost-worker-deployment.yaml
  apiVersion: apps/v1
  kind: Deployment
  metadata:
    labels:
      app: blockfrost-worker
      network: preview
      release: dev-preview-cardanojs
    name: dev-preview-cardanojs-blockfrost-worker
  spec:
    selector:
      matchLabels:
        app: blockfrost-worker
        network: preview
        release: dev-preview-cardanojs
    template:
      metadata:
        labels:
          app: blockfrost-worker
          network: preview
          release: dev-preview-cardanojs
      spec:
        containers:
        - args:
          - start-blockfrost-worker
          env:
          - name: BLOCKFROST_API_KEY
            valueFrom:
              secretKeyRef:
                key: api-key
                name: blockfrost
          - name: LOGGER_MIN_SEVERITY
            value: info
          - name: NETWORK
            value: preview
          - name: NODE_ENV
            value: null
          - name: POSTGRES_DB_DB_SYNC
            value: cardano
          - name: POSTGRES_HOST_DB_SYNC
            value: dev-preview-postgresql
          - name: POSTGRES_PASSWORD_DB_SYNC
            valueFrom:
              secretKeyRef:
                key: password
                name: cardano-owner-user.dev-preview-postgresql.credentials.postgresql.acid.zalan.do
          - name: POSTGRES_PORT_DB_SYNC
            value: "5432"
          - name: POSTGRES_SSL_CA_FILE_DB_SYNC
            value: /tls/ca.crt
          - name: POSTGRES_SSL_DB_SYNC
            value: "true"
          - name: POSTGRES_USER_DB_SYNC
            valueFrom:
              secretKeyRef:
                key: username
                name: cardano-owner-user.dev-preview-postgresql.credentials.postgresql.acid.zalan.do
-         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:k6qiffajlfppp0cl4f1z0dd53g0v23w8
+         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:cizaa5rbpjcb13mmn3axq0vsz2d7hswi
          livenessProbe:
            httpGet:
              path: /v1.0.0/health
              port: 3000
            timeoutSeconds: 5
          name: blockfrost-worker
          ports:
          - containerPort: 3000
            name: http
          resources:
            limits:
              cpu: 500m
              memory: 300Mi
            requests:
              cpu: 100m
              memory: 150Mi
          securityContext:
            runAsGroup: 0
            runAsUser: 0
          volumeMounts:
          - mountPath: /tls
            name: tls
        imagePullSecrets:
        - name: dockerconfigjson
        volumes:
        - name: tls
          secret:
            secretName: postgresql-server-cert

dev-preview, dev-preview-cardanojs-chain-history-provider, Deployment (apps) would change:

  # Source: cardanojs/templates/chain-history-provider-deployment.yaml
  apiVersion: apps/v1
  kind: Deployment
  metadata:
    labels:
      app: chain-history-provider
      network: preview
      release: dev-preview-cardanojs
    name: dev-preview-cardanojs-chain-history-provider
  spec:
    selector:
      matchLabels:
        app: chain-history-provider
        network: preview
        release: dev-preview-cardanojs
    template:
      metadata:
        labels:
          app: chain-history-provider
          network: preview
          release: dev-preview-cardanojs
      spec:
        containers:
        - args:
          - start-provider-server
          env:
          - name: ALLOWED_ORIGINS
            value: chrome-extension://gafhhkghbfjjkeiendhlofajokpaflmk,chrome-extension://efeiemlfnahiidnjglmehaihacglceia,chrome-extension://bjlhpephaokolembmpdcbobbpkjnoheb,chrome-extension://djcdfchkaijggdjokfomholkalbffgil,http://localhost/,http://localhost
          - name: DISABLE_STAKE_POOL_METRIC_APY
            value: "true"
          - name: ENABLE_METRICS
            value: "true"
          - name: HANDLE_POLICY_IDS
            value: f0ff48bbb7bbe9d59a40f1ce90e9e9d0ff5002ec48f232b49ca0fb9a
          - name: LOGGER_MIN_SEVERITY
            value: info
          - name: NETWORK
            value: preview
          - name: NODE_ENV
            value: null
          - name: OGMIOS_SRV_SERVICE_NAME
            value: dev-preview-cardano-core.dev-preview.svc.cluster.local
          - name: PAGINATION_PAGE_SIZE_LIMIT
            value: "5500"
          - name: POSTGRES_DB_DB_SYNC
            value: cardano
          - name: POSTGRES_HOST_DB_SYNC
            value: dev-preview-postgresql
          - name: POSTGRES_PASSWORD_DB_SYNC
            valueFrom:
              secretKeyRef:
                key: password
                name: cardano-owner-user.dev-preview-postgresql.credentials.postgresql.acid.zalan.do
          - name: POSTGRES_POOL_MAX_DB_SYNC
            value: "50"
          - name: POSTGRES_PORT_DB_SYNC
            value: "5432"
          - name: POSTGRES_SSL_CA_FILE_DB_SYNC
            value: /tls/ca.crt
          - name: POSTGRES_SSL_DB_SYNC
            value: "true"
          - name: POSTGRES_USER_DB_SYNC
            valueFrom:
              secretKeyRef:
                key: username
                name: cardano-owner-user.dev-preview-postgresql.credentials.postgresql.acid.zalan.do
          - name: SERVICE_NAMES
            value: chain-history
          - name: TOKEN_METADATA_SERVER_URL
            value: http://dev-preview-cardano-stack-metadata.dev-preview.svc.cluster.local
          - name: USE_BLOCKFROST
            value: "true"
          - name: USE_KORA_LABS
            value: "true"
-         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:k6qiffajlfppp0cl4f1z0dd53g0v23w8
+         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:cizaa5rbpjcb13mmn3axq0vsz2d7hswi
          livenessProbe:
            httpGet:
              path: /v1.0.0/health
              port: 3000
            timeoutSeconds: 5
          name: chain-history-provider
          ports:
          - containerPort: 3000
            name: http
          resources:
            requests:
              cpu: 1000m
              memory: 512Mi
          securityContext:
            runAsGroup: 0
            runAsUser: 0
          volumeMounts:
          - mountPath: /tls
            name: tls
        imagePullSecrets:
        - name: dockerconfigjson
        volumes:
        - name: tls
          secret:
            secretName: postgresql-server-cert

dev-preview, dev-preview-cardanojs-handle-projector, Deployment (apps) would change:

  # Source: cardanojs/templates/handle-projector-deployment.yaml
  apiVersion: apps/v1
  kind: Deployment
  metadata:
    labels:
      app: handle-projector
      network: preview
      release: dev-preview-cardanojs
    name: dev-preview-cardanojs-handle-projector
  spec:
    selector:
      matchLabels:
        app: handle-projector
        network: preview
        release: dev-preview-cardanojs
    template:
      metadata:
        labels:
          app: handle-projector
          network: preview
          release: dev-preview-cardanojs
      spec:
        containers:
        - args:
          - start-projector
          env:
          - name: HANDLE_POLICY_IDS
            value: f0ff48bbb7bbe9d59a40f1ce90e9e9d0ff5002ec48f232b49ca0fb9a
          - name: LOGGER_MIN_SEVERITY
            value: info
          - name: NETWORK
            value: preview
          - name: NODE_ENV
            value: null
          - name: OGMIOS_SRV_SERVICE_NAME
            value: dev-preview-cardano-core.dev-preview.svc.cluster.local
          - name: POSTGRES_DB
            value: handle
          - name: POSTGRES_HOST
            value: dev-preview-postgresql
          - name: POSTGRES_PASSWORD
            valueFrom:
              secretKeyRef:
                key: password
                name: handle-owner-user.dev-preview-postgresql.credentials.postgresql.acid.zalan.do
          - name: POSTGRES_POOL_MAX
            value: "2"
          - name: POSTGRES_PORT
            value: "5432"
          - name: POSTGRES_SSL
            value: "true"
          - name: POSTGRES_SSL_CA_FILE
            value: /tls/ca.crt
          - name: POSTGRES_USER
            valueFrom:
              secretKeyRef:
                key: username
                name: handle-owner-user.dev-preview-postgresql.credentials.postgresql.acid.zalan.do
          - name: PROJECTION_NAMES
            value: handle
-         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:k6qiffajlfppp0cl4f1z0dd53g0v23w8
+         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:cizaa5rbpjcb13mmn3axq0vsz2d7hswi
          livenessProbe:
            httpGet:
              path: /v1.0.0/health
              port: 3000
            timeoutSeconds: 5
          name: handle-projector
          ports:
          - containerPort: 3000
            name: http
          resources:
            limits:
              cpu: 1000m
              memory: 300Mi
            requests:
              cpu: 100m
              memory: 150Mi
          securityContext:
            runAsGroup: 0
            runAsUser: 0
          volumeMounts:
          - mountPath: /tls
            name: tls
        imagePullSecrets:
        - name: dockerconfigjson
        volumes:
        - name: tls
          secret:
            secretName: postgresql-server-cert

dev-preview, dev-preview-cardanojs-handle-provider, Deployment (apps) would change:

  # Source: cardanojs/templates/handle-provider-deployment.yaml
  apiVersion: apps/v1
  kind: Deployment
  metadata:
    labels:
      app: handle-provider
      network: preview
      release: dev-preview-cardanojs
    name: dev-preview-cardanojs-handle-provider
  spec:
    selector:
      matchLabels:
        app: handle-provider
        network: preview
        release: dev-preview-cardanojs
    template:
      metadata:
        labels:
          app: handle-provider
          network: preview
          release: dev-preview-cardanojs
      spec:
        containers:
        - args:
          - start-provider-server
          env:
          - name: ALLOWED_ORIGINS
            value: chrome-extension://gafhhkghbfjjkeiendhlofajokpaflmk,chrome-extension://efeiemlfnahiidnjglmehaihacglceia,chrome-extension://bjlhpephaokolembmpdcbobbpkjnoheb,chrome-extension://djcdfchkaijggdjokfomholkalbffgil,http://localhost/,http://localhost
          - name: ENABLE_METRICS
            value: "true"
          - name: HANDLE_POLICY_IDS
            value: f0ff48bbb7bbe9d59a40f1ce90e9e9d0ff5002ec48f232b49ca0fb9a
          - name: LOGGER_MIN_SEVERITY
            value: info
          - name: NETWORK
            value: preview
          - name: NODE_ENV
            value: null
          - name: OGMIOS_SRV_SERVICE_NAME
            value: dev-preview-cardano-core.dev-preview.svc.cluster.local
          - name: POSTGRES_DB_HANDLE
            value: handle
          - name: POSTGRES_HOST_HANDLE
            value: dev-preview-postgresql
          - name: POSTGRES_PASSWORD_HANDLE
            valueFrom:
              secretKeyRef:
                key: password
                name: handle-owner-user.dev-preview-postgresql.credentials.postgresql.acid.zalan.do
          - name: POSTGRES_POOL_MAX_HANDLE
            value: "10"
          - name: POSTGRES_PORT_HANDLE
            value: "5432"
          - name: POSTGRES_SSL_CA_FILE_HANDLE
            value: /tls/ca.crt
          - name: POSTGRES_SSL_HANDLE
            value: "true"
          - name: POSTGRES_USER_HANDLE
            valueFrom:
              secretKeyRef:
                key: username
                name: handle-owner-user.dev-preview-postgresql.credentials.postgresql.acid.zalan.do
          - name: SERVICE_NAMES
            value: handle
-         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:k6qiffajlfppp0cl4f1z0dd53g0v23w8
+         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:cizaa5rbpjcb13mmn3axq0vsz2d7hswi
          livenessProbe:
            httpGet:
              path: /v1.0.0/health
              port: 3000
            timeoutSeconds: 5
          name: handle-provider
          ports:
          - containerPort: 3000
            name: http
          resources:
            requests:
              cpu: 700m
              memory: 150Mi
          securityContext:
            runAsGroup: 0
            runAsUser: 0
          volumeMounts:
          - mountPath: /tls
            name: tls
        imagePullSecrets:
        - name: dockerconfigjson
        volumes:
        - name: tls
          secret:
            secretName: postgresql-server-cert

dev-preview, dev-preview-cardanojs-pg-boss-worker, Deployment (apps) would change:

  # Source: cardanojs/templates/pgboss-deployment.yaml
  apiVersion: apps/v1
  kind: Deployment
  metadata:
    labels:
      app: pg-boss-worker
      network: preview
      release: dev-preview-cardanojs
    name: dev-preview-cardanojs-pg-boss-worker
  spec:
    selector:
      matchLabels:
        app: pg-boss-worker
        network: preview
        release: dev-preview-cardanojs
    template:
      metadata:
        labels:
          app: pg-boss-worker
          network: preview
          release: dev-preview-cardanojs
      spec:
        containers:
        - args:
          - start-pg-boss-worker
          env:
          - name: LOGGER_MIN_SEVERITY
            value: info
          - name: METADATA_FETCH_MODE
            value: smash
          - name: NETWORK
            value: preview
          - name: NETWORK_INFO_PROVIDER_URL
            value: http://dev-preview-cardanojs-backend.dev-preview.svc.cluster.local
          - name: NODE_ENV
            value: null
          - name: POSTGRES_DB_DB_SYNC
            value: cardano
          - name: POSTGRES_DB_STAKE_POOL
            value: stakepoolv2
          - name: POSTGRES_HOST_DB_SYNC
            value: dev-preview-postgresql
          - name: POSTGRES_HOST_STAKE_POOL
            value: dev-preview-postgresql
          - name: POSTGRES_PASSWORD_DB_SYNC
            valueFrom:
              secretKeyRef:
                key: password
                name: cardano-owner-user.dev-preview-postgresql.credentials.postgresql.acid.zalan.do
          - name: POSTGRES_PASSWORD_STAKE_POOL
            valueFrom:
              secretKeyRef:
                key: password
                name: stakepoolv2-owner-user.dev-preview-postgresql.credentials.postgresql.acid.zalan.do
          - name: POSTGRES_POOL_MAX_DB_SYNC
            value: "5"
          - name: POSTGRES_POOL_MAX_STAKE_POOL
            value: "5"
          - name: POSTGRES_PORT_DB_SYNC
            value: "5432"
          - name: POSTGRES_PORT_STAKE_POOL
            value: "5432"
          - name: POSTGRES_SSL_CA_FILE_DB_SYNC
            value: /tls/ca.crt
          - name: POSTGRES_SSL_CA_FILE_STAKE_POOL
            value: /tls/ca.crt
          - name: POSTGRES_SSL_DB_SYNC
            value: "true"
          - name: POSTGRES_SSL_STAKE_POOL
            value: "true"
          - name: POSTGRES_USER_DB_SYNC
            valueFrom:
              secretKeyRef:
                key: username
                name: cardano-owner-user.dev-preview-postgresql.credentials.postgresql.acid.zalan.do
          - name: POSTGRES_USER_STAKE_POOL
            valueFrom:
              secretKeyRef:
                key: username
                name: stakepoolv2-owner-user.dev-preview-postgresql.credentials.postgresql.acid.zalan.do
          - name: QUEUES
            value: pool-delist-schedule,pool-metadata,pool-metrics,pool-rewards
          - name: SMASH_URL
            value: https://preview-smash.world.dev.cardano.org/api/v1
          - name: STAKE_POOL_PROVIDER_URL
            value: http://dev-preview-cardanojs-backend.dev-preview.svc.cluster.local
-         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:k6qiffajlfppp0cl4f1z0dd53g0v23w8
+         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:cizaa5rbpjcb13mmn3axq0vsz2d7hswi
          livenessProbe:
            httpGet:
              path: /v1.0.0/health
              port: 3000
          name: pg-boss-worker
          ports:
          - containerPort: 3000
            name: http
          resources:
            limits:
              cpu: 300m
              memory: 300Mi
            requests:
              cpu: 200m
              memory: 150Mi
          securityContext:
            runAsGroup: 0
            runAsUser: 0
          startupProbe:
            httpGet:
              path: /v1.0.0/ready
              port: 3000
            initialDelaySeconds: 80
            periodSeconds: 5
          volumeMounts:
          - mountPath: /tls
            name: tls
        imagePullSecrets:
        - name: dockerconfigjson
        volumes:
        - name: tls
          secret:
            secretName: postgresql-server-cert

dev-preview, dev-preview-cardanojs-stake-pool-projector, Deployment (apps) would change:

  # Source: cardanojs/templates/stake-pool-projector-deployment.yaml
  apiVersion: apps/v1
  kind: Deployment
  metadata:
    labels:
      app: stake-pool-projector
      network: preview
      release: dev-preview-cardanojs
    name: dev-preview-cardanojs-stake-pool-projector
  spec:
    selector:
      matchLabels:
        app: stake-pool-projector
        network: preview
        release: dev-preview-cardanojs
    template:
      metadata:
        labels:
          app: stake-pool-projector
          network: preview
          release: dev-preview-cardanojs
      spec:
        containers:
        - args:
          - start-projector
          env:
          - name: LOGGER_MIN_SEVERITY
            value: info
          - name: NETWORK
            value: preview
          - name: NODE_ENV
            value: null
          - name: OGMIOS_SRV_SERVICE_NAME
            value: dev-preview-cardano-core.dev-preview.svc.cluster.local
          - name: POSTGRES_DB
            value: stakepoolv2
          - name: POSTGRES_HOST
            value: dev-preview-postgresql
          - name: POSTGRES_PASSWORD
            valueFrom:
              secretKeyRef:
                key: password
                name: stakepoolv2-owner-user.dev-preview-postgresql.credentials.postgresql.acid.zalan.do
          - name: POSTGRES_POOL_MAX
            value: "2"
          - name: POSTGRES_PORT
            value: "5432"
          - name: POSTGRES_SSL
            value: "true"
          - name: POSTGRES_SSL_CA_FILE
            value: /tls/ca.crt
          - name: POSTGRES_USER
            valueFrom:
              secretKeyRef:
                key: username
                name: stakepoolv2-owner-user.dev-preview-postgresql.credentials.postgresql.acid.zalan.do
          - name: PROJECTION_NAMES
            value: stake-pool,stake-pool-metadata-job,stake-pool-metrics-job,stake-pool-rewards-job
-         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:k6qiffajlfppp0cl4f1z0dd53g0v23w8
+         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:cizaa5rbpjcb13mmn3axq0vsz2d7hswi
          livenessProbe:
            httpGet:
              path: /v1.0.0/health
              port: 3000
            timeoutSeconds: 5
          name: stake-pool-projector
          ports:
          - containerPort: 3000
            name: http
          resources:
            limits:
              cpu: 700m
              memory: 300Mi
            requests:
              cpu: 700m
              memory: 150Mi
          securityContext:
            runAsGroup: 0
            runAsUser: 0
          volumeMounts:
          - mountPath: /tls
            name: tls
        imagePullSecrets:
        - name: dockerconfigjson
        volumes:
        - name: tls
          secret:
            secretName: postgresql-server-cert

dev-preview, dev-preview-cardanojs-stake-pool-provider, Deployment (apps) would change:

  # Source: cardanojs/templates/stake-pool-provider-deployment.yaml
  apiVersion: apps/v1
  kind: Deployment
  metadata:
    labels:
      app: stake-pool-provider
      network: preview
      release: dev-preview-cardanojs
    name: dev-preview-cardanojs-stake-pool-provider
  spec:
    selector:
      matchLabels:
        app: stake-pool-provider
        network: preview
        release: dev-preview-cardanojs
    template:
      metadata:
        labels:
          app: stake-pool-provider
          network: preview
          release: dev-preview-cardanojs
      spec:
        containers:
        - args:
          - start-provider-server
          env:
          - name: ALLOWED_ORIGINS
            value: chrome-extension://gafhhkghbfjjkeiendhlofajokpaflmk,chrome-extension://efeiemlfnahiidnjglmehaihacglceia,chrome-extension://bjlhpephaokolembmpdcbobbpkjnoheb,chrome-extension://djcdfchkaijggdjokfomholkalbffgil,http://localhost/,http://localhost
          - name: DISABLE_STAKE_POOL_METRIC_APY
            value: "true"
          - name: ENABLE_METRICS
            value: "true"
          - name: LOGGER_MIN_SEVERITY
            value: info
          - name: NETWORK
            value: preview
          - name: NODE_ENV
            value: null
          - name: OGMIOS_SRV_SERVICE_NAME
            value: dev-preview-cardano-core.dev-preview.svc.cluster.local
          - name: OVERRIDE_FUZZY_OPTIONS
            value: "true"
          - name: PAGINATION_PAGE_SIZE_LIMIT
            value: "5500"
          - name: POSTGRES_DB_STAKE_POOL
            value: stakepoolv2
          - name: POSTGRES_HOST_STAKE_POOL
            value: dev-preview-postgresql
          - name: POSTGRES_PASSWORD_STAKE_POOL
            valueFrom:
              secretKeyRef:
                key: password
                name: stakepoolv2-owner-user.dev-preview-postgresql.credentials.postgresql.acid.zalan.do
          - name: POSTGRES_POOL_MAX_STAKE_POOL
            value: "10"
          - name: POSTGRES_PORT_STAKE_POOL
            value: "5432"
          - name: POSTGRES_SSL_CA_FILE_STAKE_POOL
            value: /tls/ca.crt
          - name: POSTGRES_SSL_STAKE_POOL
            value: "true"
          - name: POSTGRES_USER_STAKE_POOL
            valueFrom:
              secretKeyRef:
                key: username
                name: stakepoolv2-owner-user.dev-preview-postgresql.credentials.postgresql.acid.zalan.do
          - name: SERVICE_NAMES
            value: stake-pool
          - name: TOKEN_METADATA_SERVER_URL
            value: http://dev-preview-cardano-stack-metadata.dev-preview.svc.cluster.local
          - name: USE_TYPEORM_STAKE_POOL_PROVIDER
            value: "true"
-         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:k6qiffajlfppp0cl4f1z0dd53g0v23w8
+         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:cizaa5rbpjcb13mmn3axq0vsz2d7hswi
          livenessProbe:
            httpGet:
              path: /v1.0.0/health
              port: 3000
            timeoutSeconds: 5
          name: stake-pool-provider
          ports:
          - containerPort: 3000
            name: http
          resources:
            requests:
              cpu: 700m
              memory: 150Mi
          securityContext:
            runAsGroup: 0
            runAsUser: 0
          volumeMounts:
          - mountPath: /tls
            name: tls
        imagePullSecrets:
        - name: dockerconfigjson
        volumes:
        - name: tls
          secret:
            secretName: postgresql-server-cert

dev-preview, dev-preview-cardanojs-wallet-api-projector, Deployment (apps) would change:

  # Source: cardanojs/templates/wallet-api-projector-deployment.yaml
  apiVersion: apps/v1
  kind: Deployment
  metadata:
    labels:
      app: wallet-api-projector
      network: preview
      release: dev-preview-cardanojs
    name: dev-preview-cardanojs-wallet-api-projector
  spec:
    selector:
      matchLabels:
        app: wallet-api-projector
        network: preview
        release: dev-preview-cardanojs
    template:
      metadata:
        labels:
          app: wallet-api-projector
          network: preview
          release: dev-preview-cardanojs
      spec:
        containers:
        - args:
          - start-projector
          env:
          - name: LOGGER_MIN_SEVERITY
            value: info
          - name: NETWORK
            value: preview
          - name: OGMIOS_SRV_SERVICE_NAME
            value: dev-preview-cardano-core.dev-preview.svc.cluster.local
          - name: POSTGRES_DB
            value: wallet_api
          - name: POSTGRES_HOST
            value: dev-preview-postgresql
          - name: POSTGRES_PASSWORD
            valueFrom:
              secretKeyRef:
                key: password
                name: wallet-api-owner-user.dev-preview-postgresql.credentials.postgresql.acid.zalan.do
          - name: POSTGRES_POOL_MAX
            value: "2"
          - name: POSTGRES_PORT
            value: "5432"
          - name: POSTGRES_SSL
            value: "true"
          - name: POSTGRES_SSL_CA_FILE
            value: /tls/ca.crt
          - name: POSTGRES_USER
            valueFrom:
              secretKeyRef:
                key: username
                name: wallet-api-owner-user.dev-preview-postgresql.credentials.postgresql.acid.zalan.do
          - name: PROJECTION_NAMES
            value: protocol-parameters
-         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:k6qiffajlfppp0cl4f1z0dd53g0v23w8
+         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:cizaa5rbpjcb13mmn3axq0vsz2d7hswi
          livenessProbe:
            httpGet:
              path: /v1.0.0/health
              port: 3000
            timeoutSeconds: 5
          name: wallet-api-projector
          ports:
          - containerPort: 3000
            name: http
          resources:
            limits:
              cpu: 1000m
              memory: 300Mi
            requests:
              cpu: 100m
              memory: 150Mi
          securityContext:
            runAsGroup: 0
            runAsUser: 0
          volumeMounts:
          - mountPath: /tls
            name: tls
        imagePullSecrets:
        - name: dockerconfigjson
        volumes:
        - name: tls
          secret:
            secretName: postgresql-server-cert

dev-preview, dev-preview-cardanojs-ws-server, Deployment (apps) would change:

  # Source: cardanojs/templates/ws-server-deployment.yaml
  apiVersion: apps/v1
  kind: Deployment
  metadata:
    labels:
      app: ws-server
      network: preview
      release: dev-preview-cardanojs
    name: dev-preview-cardanojs-ws-server
  spec:
    selector:
      matchLabels:
        app: ws-server
        network: preview
        release: dev-preview-cardanojs
    template:
      metadata:
        labels:
          app: ws-server
          network: preview
          release: dev-preview-cardanojs
      spec:
        containers:
        - args:
          - start-ws-server
          env:
          - name: DB_CACHE_TTL
            value: "7200"
          - name: NETWORK
            value: preview
          - name: OGMIOS_URL
            value: ws://dev-preview-cardano-core.dev-preview.svc.cluster.local:1337
          - name: POSTGRES_DB_DB_SYNC
            value: cardano
          - name: POSTGRES_HOST_DB_SYNC
            value: dev-preview-postgresql
          - name: POSTGRES_PASSWORD_DB_SYNC
            valueFrom:
              secretKeyRef:
                key: password
                name: cardano-owner-user.dev-preview-postgresql.credentials.postgresql.acid.zalan.do
          - name: POSTGRES_POOL_MAX_DB_SYNC
            value: "2"
          - name: POSTGRES_PORT_DB_SYNC
            value: "5432"
          - name: POSTGRES_SSL_CA_FILE_DB_SYNC
            value: /tls/ca.crt
          - name: POSTGRES_SSL_DB_SYNC
            value: "true"
          - name: POSTGRES_USER_DB_SYNC
            valueFrom:
              secretKeyRef:
                key: username
                name: cardano-owner-user.dev-preview-postgresql.credentials.postgresql.acid.zalan.do
-         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:k6qiffajlfppp0cl4f1z0dd53g0v23w8
+         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:cizaa5rbpjcb13mmn3axq0vsz2d7hswi
          livenessProbe:
            httpGet:
              path: /health
              port: 3000
          name: ws-server
          ports:
          - containerPort: 3000
            name: http
          resources:
            limits:
              cpu: 300m
              memory: 300Mi
            requests:
              cpu: 200m
              memory: 150Mi
          securityContext:
            runAsGroup: 0
            runAsUser: 0
          volumeMounts:
          - mountPath: /tls
            name: tls
        imagePullSecrets:
        - name: dockerconfigjson
        volumes:
        - name: tls
          secret:
            secretName: postgresql-server-cert
dev-preprod@us-east-1@v2 would change:

dev-preprod, dev-preprod-cardanojs-v2-asset-projector, Deployment (apps) would change:

  # Source: cardanojs/templates/asset-projector-deployment.yaml
  apiVersion: apps/v1
  kind: Deployment
  metadata:
    labels:
      app: asset-projector
      network: preprod
      release: dev-preprod-cardanojs-v2
    name: dev-preprod-cardanojs-v2-asset-projector
  spec:
    selector:
      matchLabels:
        app: asset-projector
        network: preprod
        release: dev-preprod-cardanojs-v2
    template:
      metadata:
        labels:
          app: asset-projector
          network: preprod
          release: dev-preprod-cardanojs-v2
      spec:
        containers:
        - args:
          - start-projector
          env:
          - name: LOGGER_MIN_SEVERITY
            value: info
          - name: NETWORK
            value: preprod
          - name: OGMIOS_SRV_SERVICE_NAME
            value: dev-preprod-cardano-core.dev-preprod.svc.cluster.local
          - name: POSTGRES_DB
            value: asset
          - name: POSTGRES_HOST
            value: dev-preprod-postgresql
          - name: POSTGRES_PASSWORD
            valueFrom:
              secretKeyRef:
                key: password
                name: asset-owner-user.dev-preprod-postgresql.credentials.postgresql.acid.zalan.do
          - name: POSTGRES_POOL_MAX
            value: "2"
          - name: POSTGRES_PORT
            value: "5432"
          - name: POSTGRES_SSL
            value: "true"
          - name: POSTGRES_SSL_CA_FILE
            value: /tls/ca.crt
          - name: POSTGRES_USER
            valueFrom:
              secretKeyRef:
                key: username
                name: asset-owner-user.dev-preprod-postgresql.credentials.postgresql.acid.zalan.do
          - name: PROJECTION_NAMES
            value: asset
-         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:nnmbiabf7l6ifxkl751m8r8bwjbcs38x
+         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:cizaa5rbpjcb13mmn3axq0vsz2d7hswi
          livenessProbe:
            httpGet:
              path: /v1.0.0/health
              port: 3000
            timeoutSeconds: 5
          name: asset-projector
          ports:
          - containerPort: 3000
            name: http
          resources:
            limits:
              cpu: 700m
              memory: 300Mi
            requests:
              cpu: 700m
              memory: 150Mi
          securityContext:
            runAsGroup: 0
            runAsUser: 0
          volumeMounts:
          - mountPath: /tls
            name: tls
        imagePullSecrets:
        - name: dockerconfigjson
        volumes:
        - name: tls
          secret:
            secretName: postgresql-server-cert

dev-preprod, dev-preprod-cardanojs-v2-asset-provider, Deployment (apps) would change:

  # Source: cardanojs/templates/asset-provider-deployment.yaml
  apiVersion: apps/v1
  kind: Deployment
  metadata:
    labels:
      app: asset-provider
      network: preprod
      release: dev-preprod-cardanojs-v2
    name: dev-preprod-cardanojs-v2-asset-provider
  spec:
    selector:
      matchLabels:
        app: asset-provider
        network: preprod
        release: dev-preprod-cardanojs-v2
    template:
      metadata:
        labels:
          app: asset-provider
          network: preprod
          release: dev-preprod-cardanojs-v2
      spec:
        containers:
        - args:
          - start-provider-server
          env:
          - name: ALLOWED_ORIGINS
            value: chrome-extension://gafhhkghbfjjkeiendhlofajokpaflmk,chrome-extension://efeiemlfnahiidnjglmehaihacglceia,chrome-extension://bjlhpephaokolembmpdcbobbpkjnoheb,chrome-extension://djcdfchkaijggdjokfomholkalbffgil,http://localhost/,http://localhost
          - name: ENABLE_METRICS
            value: "true"
          - name: LOGGER_MIN_SEVERITY
            value: info
          - name: NETWORK
            value: preprod
          - name: NODE_ENV
            value: null
          - name: OGMIOS_SRV_SERVICE_NAME
            value: dev-preprod-cardano-core.dev-preprod.svc.cluster.local
          - name: PAGINATION_PAGE_SIZE_LIMIT
            value: "5500"
          - name: POSTGRES_DB_ASSET
            value: asset
          - name: POSTGRES_HOST_ASSET
            value: dev-preprod-postgresql
          - name: POSTGRES_PASSWORD_ASSET
            valueFrom:
              secretKeyRef:
                key: password
                name: asset-owner-user.dev-preprod-postgresql.credentials.postgresql.acid.zalan.do
          - name: POSTGRES_POOL_MAX_ASSET
            value: "500"
          - name: POSTGRES_PORT_ASSET
            value: "5432"
          - name: POSTGRES_SSL_ASSET
            value: "true"
          - name: POSTGRES_SSL_CA_FILE_ASSET
            value: /tls/ca.crt
          - name: POSTGRES_USER_ASSET
            valueFrom:
              secretKeyRef:
                key: username
                name: asset-owner-user.dev-preprod-postgresql.credentials.postgresql.acid.zalan.do
          - name: SERVICE_NAMES
            value: asset
          - name: TOKEN_METADATA_SERVER_URL
            value: http://dev-preprod-cardano-stack-metadata.dev-preprod.svc.cluster.local
          - name: USE_TYPEORM_ASSET_PROVIDER
            value: "true"
-         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:nnmbiabf7l6ifxkl751m8r8bwjbcs38x
+         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:cizaa5rbpjcb13mmn3axq0vsz2d7hswi
          livenessProbe:
            httpGet:
              path: /v1.0.0/health
              port: 3000
            timeoutSeconds: 5
          name: asset-provider
          ports:
          - containerPort: 3000
            name: http
          resources:
            requests:
              cpu: 1100m
              memory: 512Mi
          securityContext:
            runAsGroup: 0
            runAsUser: 0
          volumeMounts:
          - mountPath: /tls
            name: tls
        imagePullSecrets:
        - name: dockerconfigjson
        volumes:
        - name: tls
          secret:
            secretName: postgresql-server-cert

dev-preprod, dev-preprod-cardanojs-v2-backend, Deployment (apps) would change:

  # Source: cardanojs/templates/backend-deployment.yaml
  apiVersion: apps/v1
  kind: Deployment
  metadata:
    labels:
      app: backend
      network: preprod
      release: dev-preprod-cardanojs-v2
    name: dev-preprod-cardanojs-v2-backend
  spec:
    selector:
      matchLabels:
        app: backend
        network: preprod
        release: dev-preprod-cardanojs-v2
    template:
      metadata:
        labels:
          app: backend
          network: preprod
          release: dev-preprod-cardanojs-v2
      spec:
        containers:
        - args:
          - start-provider-server
          env:
          - name: ALLOWED_ORIGINS
            value: chrome-extension://gafhhkghbfjjkeiendhlofajokpaflmk,chrome-extension://efeiemlfnahiidnjglmehaihacglceia,chrome-extension://bjlhpephaokolembmpdcbobbpkjnoheb,chrome-extension://djcdfchkaijggdjokfomholkalbffgil,http://localhost/,http://localhost
          - name: BUILD_INFO
-           value: '{"lastModifiedDate":"20240927062502","rev":"74bfac03fe2603750bdfccb43aea7ecb6d8029bd","shortRev":"74bfac0"}'
+           value: '{"lastModifiedDate":"20241001080037","rev":"9bda2b74a6b12e2b28ba00c283fd78f1a97e6657","shortRev":"9bda2b7"}'
          - name: DISABLE_STAKE_POOL_METRIC_APY
            value: "true"
          - name: ENABLE_METRICS
            value: "true"
          - name: HANDLE_POLICY_IDS
            value: f0ff48bbb7bbe9d59a40f1ce90e9e9d0ff5002ec48f232b49ca0fb9a
          - name: HANDLE_PROVIDER_SERVER_URL
            value: https://preprod.api.handle.me
          - name: LOGGER_MIN_SEVERITY
            value: info
          - name: NETWORK
            value: preprod
          - name: NODE_ENV
            value: null
          - name: OGMIOS_SRV_SERVICE_NAME
            value: dev-preprod-cardano-core.dev-preprod.svc.cluster.local
          - name: PAGINATION_PAGE_SIZE_LIMIT
            value: "5500"
          - name: POSTGRES_DB_DB_SYNC
            value: cardano
          - name: POSTGRES_DB_HANDLE
            value: handle
          - name: POSTGRES_HOST_DB_SYNC
            value: dev-preprod-postgresql
          - name: POSTGRES_HOST_HANDLE
            value: dev-preprod-postgresql
          - name: POSTGRES_PASSWORD_DB_SYNC
            valueFrom:
              secretKeyRef:
                key: password
                name: cardano-owner-user.dev-preprod-postgresql.credentials.postgresql.acid.zalan.do
          - name: POSTGRES_PASSWORD_HANDLE
            valueFrom:
              secretKeyRef:
                key: password
                name: handle-owner-user.dev-preprod-postgresql.credentials.postgresql.acid.zalan.do
          - name: POSTGRES_POOL_MAX_DB_SYNC
            value: "50"
          - name: POSTGRES_POOL_MAX_HANDLE
            value: "10"
          - name: POSTGRES_PORT_DB_SYNC
            value: "5432"
          - name: POSTGRES_PORT_HANDLE
            value: "5432"
          - name: POSTGRES_SSL_CA_FILE_DB_SYNC
            value: /tls/ca.crt
          - name: POSTGRES_SSL_CA_FILE_HANDLE
            value: /tls/ca.crt
          - name: POSTGRES_SSL_DB_SYNC
            value: "true"
          - name: POSTGRES_SSL_HANDLE
            value: "true"
          - name: POSTGRES_USER_DB_SYNC
            valueFrom:
              secretKeyRef:
                key: username
                name: cardano-owner-user.dev-preprod-postgresql.credentials.postgresql.acid.zalan.do
          - name: POSTGRES_USER_HANDLE
            valueFrom:
              secretKeyRef:
                key: username
                name: handle-owner-user.dev-preprod-postgresql.credentials.postgresql.acid.zalan.do
          - name: SERVICE_NAMES
            value: asset,network-info,rewards,stake-pool,tx-submit,utxo
          - name: TOKEN_METADATA_SERVER_URL
            value: http://dev-preprod-cardano-stack-metadata.dev-preprod.svc.cluster.local
          - name: USE_BLOCKFROST
            value: "true"
          - name: USE_KORA_LABS
            value: "true"
-         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:nnmbiabf7l6ifxkl751m8r8bwjbcs38x
+         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:cizaa5rbpjcb13mmn3axq0vsz2d7hswi
          livenessProbe:
            httpGet:
              path: /v1.0.0/health
              port: 3000
            periodSeconds: 60
            timeoutSeconds: 30
          name: backend
          ports:
          - containerPort: 3000
            name: http
          resources:
            requests:
              cpu: 1000m
              memory: 350Mi
          securityContext:
            runAsGroup: 0
            runAsUser: 0
          volumeMounts:
          - mountPath: /tls
            name: tls
        imagePullSecrets:
        - name: dockerconfigjson
        volumes:
        - name: tls
          secret:
            secretName: postgresql-server-cert

dev-preprod, dev-preprod-cardanojs-v2-blockfrost-worker, Deployment (apps) would change:

  # Source: cardanojs/templates/blockfrost-worker-deployment.yaml
  apiVersion: apps/v1
  kind: Deployment
  metadata:
    labels:
      app: blockfrost-worker
      network: preprod
      release: dev-preprod-cardanojs-v2
    name: dev-preprod-cardanojs-v2-blockfrost-worker
  spec:
    selector:
      matchLabels:
        app: blockfrost-worker
        network: preprod
        release: dev-preprod-cardanojs-v2
    template:
      metadata:
        labels:
          app: blockfrost-worker
          network: preprod
          release: dev-preprod-cardanojs-v2
      spec:
        containers:
        - args:
          - start-blockfrost-worker
          env:
          - name: BLOCKFROST_API_KEY
            valueFrom:
              secretKeyRef:
                key: api-key
                name: blockfrost
          - name: LOGGER_MIN_SEVERITY
            value: info
          - name: NETWORK
            value: preprod
          - name: NODE_ENV
            value: null
          - name: POSTGRES_DB_DB_SYNC
            value: cardano
          - name: POSTGRES_HOST_DB_SYNC
            value: dev-preprod-postgresql
          - name: POSTGRES_PASSWORD_DB_SYNC
            valueFrom:
              secretKeyRef:
                key: password
                name: cardano-owner-user.dev-preprod-postgresql.credentials.postgresql.acid.zalan.do
          - name: POSTGRES_PORT_DB_SYNC
            value: "5432"
          - name: POSTGRES_SSL_CA_FILE_DB_SYNC
            value: /tls/ca.crt
          - name: POSTGRES_SSL_DB_SYNC
            value: "true"
          - name: POSTGRES_USER_DB_SYNC
            valueFrom:
              secretKeyRef:
                key: username
                name: cardano-owner-user.dev-preprod-postgresql.credentials.postgresql.acid.zalan.do
-         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:nnmbiabf7l6ifxkl751m8r8bwjbcs38x
+         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:cizaa5rbpjcb13mmn3axq0vsz2d7hswi
          livenessProbe:
            httpGet:
              path: /v1.0.0/health
              port: 3000
            timeoutSeconds: 5
          name: blockfrost-worker
          ports:
          - containerPort: 3000
            name: http
          resources:
            limits:
              cpu: 500m
              memory: 300Mi
            requests:
              cpu: 100m
              memory: 150Mi
          securityContext:
            runAsGroup: 0
            runAsUser: 0
          volumeMounts:
          - mountPath: /tls
            name: tls
        imagePullSecrets:
        - name: dockerconfigjson
        volumes:
        - name: tls
          secret:
            secretName: postgresql-server-cert

dev-preprod, dev-preprod-cardanojs-v2-chain-history-provider, Deployment (apps) would change:

  # Source: cardanojs/templates/chain-history-provider-deployment.yaml
  apiVersion: apps/v1
  kind: Deployment
  metadata:
    labels:
      app: chain-history-provider
      network: preprod
      release: dev-preprod-cardanojs-v2
    name: dev-preprod-cardanojs-v2-chain-history-provider
  spec:
    selector:
      matchLabels:
        app: chain-history-provider
        network: preprod
        release: dev-preprod-cardanojs-v2
    template:
      metadata:
        labels:
          app: chain-history-provider
          network: preprod
          release: dev-preprod-cardanojs-v2
      spec:
        containers:
        - args:
          - start-provider-server
          env:
          - name: ALLOWED_ORIGINS
            value: chrome-extension://gafhhkghbfjjkeiendhlofajokpaflmk,chrome-extension://efeiemlfnahiidnjglmehaihacglceia,chrome-extension://bjlhpephaokolembmpdcbobbpkjnoheb,chrome-extension://djcdfchkaijggdjokfomholkalbffgil,http://localhost/,http://localhost
          - name: DISABLE_STAKE_POOL_METRIC_APY
            value: "true"
          - name: ENABLE_METRICS
            value: "true"
          - name: HANDLE_POLICY_IDS
            value: f0ff48bbb7bbe9d59a40f1ce90e9e9d0ff5002ec48f232b49ca0fb9a
          - name: LOGGER_MIN_SEVERITY
            value: info
          - name: NETWORK
            value: preprod
          - name: NODE_ENV
            value: null
          - name: OGMIOS_SRV_SERVICE_NAME
            value: dev-preprod-cardano-core.dev-preprod.svc.cluster.local
          - name: PAGINATION_PAGE_SIZE_LIMIT
            value: "5500"
          - name: POSTGRES_DB_DB_SYNC
            value: cardano
          - name: POSTGRES_HOST_DB_SYNC
            value: dev-preprod-postgresql
          - name: POSTGRES_PASSWORD_DB_SYNC
            valueFrom:
              secretKeyRef:
                key: password
                name: cardano-owner-user.dev-preprod-postgresql.credentials.postgresql.acid.zalan.do
          - name: POSTGRES_POOL_MAX_DB_SYNC
            value: "50"
          - name: POSTGRES_PORT_DB_SYNC
            value: "5432"
          - name: POSTGRES_SSL_CA_FILE_DB_SYNC
            value: /tls/ca.crt
          - name: POSTGRES_SSL_DB_SYNC
            value: "true"
          - name: POSTGRES_USER_DB_SYNC
            valueFrom:
              secretKeyRef:
                key: username
                name: cardano-owner-user.dev-preprod-postgresql.credentials.postgresql.acid.zalan.do
          - name: SERVICE_NAMES
            value: chain-history
          - name: TOKEN_METADATA_SERVER_URL
            value: http://dev-preprod-cardano-stack-metadata.dev-preprod.svc.cluster.local
          - name: USE_BLOCKFROST
            value: "true"
          - name: USE_KORA_LABS
            value: "true"
-         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:nnmbiabf7l6ifxkl751m8r8bwjbcs38x
+         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:cizaa5rbpjcb13mmn3axq0vsz2d7hswi
          livenessProbe:
            httpGet:
              path: /v1.0.0/health
              port: 3000
            timeoutSeconds: 5
          name: chain-history-provider
          ports:
          - containerPort: 3000
            name: http
          resources:
            requests:
              cpu: 1000m
              memory: 512Mi
          securityContext:
            runAsGroup: 0
            runAsUser: 0
          volumeMounts:
          - mountPath: /tls
            name: tls
        imagePullSecrets:
        - name: dockerconfigjson
        volumes:
        - name: tls
          secret:
            secretName: postgresql-server-cert

dev-preprod, dev-preprod-cardanojs-v2-handle-projector, Deployment (apps) would change:

  # Source: cardanojs/templates/handle-projector-deployment.yaml
  apiVersion: apps/v1
  kind: Deployment
  metadata:
    labels:
      app: handle-projector
      network: preprod
      release: dev-preprod-cardanojs-v2
    name: dev-preprod-cardanojs-v2-handle-projector
  spec:
    selector:
      matchLabels:
        app: handle-projector
        network: preprod
        release: dev-preprod-cardanojs-v2
    template:
      metadata:
        labels:
          app: handle-projector
          network: preprod
          release: dev-preprod-cardanojs-v2
      spec:
        containers:
        - args:
          - start-projector
          env:
          - name: HANDLE_POLICY_IDS
            value: f0ff48bbb7bbe9d59a40f1ce90e9e9d0ff5002ec48f232b49ca0fb9a
          - name: LOGGER_MIN_SEVERITY
            value: info
          - name: NETWORK
            value: preprod
          - name: NODE_ENV
            value: null
          - name: OGMIOS_SRV_SERVICE_NAME
            value: dev-preprod-cardano-core.dev-preprod.svc.cluster.local
          - name: POSTGRES_DB
            value: handle
          - name: POSTGRES_HOST
            value: dev-preprod-postgresql
          - name: POSTGRES_PASSWORD
            valueFrom:
              secretKeyRef:
                key: password
                name: handle-owner-user.dev-preprod-postgresql.credentials.postgresql.acid.zalan.do
          - name: POSTGRES_POOL_MAX
            value: "2"
          - name: POSTGRES_PORT
            value: "5432"
          - name: POSTGRES_SSL
            value: "true"
          - name: POSTGRES_SSL_CA_FILE
            value: /tls/ca.crt
          - name: POSTGRES_USER
            valueFrom:
              secretKeyRef:
                key: username
                name: handle-owner-user.dev-preprod-postgresql.credentials.postgresql.acid.zalan.do
          - name: PROJECTION_NAMES
            value: handle
-         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:nnmbiabf7l6ifxkl751m8r8bwjbcs38x
+         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:cizaa5rbpjcb13mmn3axq0vsz2d7hswi
          livenessProbe:
            httpGet:
              path: /v1.0.0/health
              port: 3000
            timeoutSeconds: 5
          name: handle-projector
          ports:
          - containerPort: 3000
            name: http
          resources:
            limits:
              cpu: 1000m
              memory: 300Mi
            requests:
              cpu: 100m
              memory: 150Mi
          securityContext:
            runAsGroup: 0
            runAsUser: 0
          volumeMounts:
          - mountPath: /tls
            name: tls
        imagePullSecrets:
        - name: dockerconfigjson
        volumes:
        - name: tls
          secret:
            secretName: postgresql-server-cert

dev-preprod, dev-preprod-cardanojs-v2-handle-provider, Deployment (apps) would change:

  # Source: cardanojs/templates/handle-provider-deployment.yaml
  apiVersion: apps/v1
  kind: Deployment
  metadata:
    labels:
      app: handle-provider
      network: preprod
      release: dev-preprod-cardanojs-v2
    name: dev-preprod-cardanojs-v2-handle-provider
  spec:
    selector:
      matchLabels:
        app: handle-provider
        network: preprod
        release: dev-preprod-cardanojs-v2
    template:
      metadata:
        labels:
          app: handle-provider
          network: preprod
          release: dev-preprod-cardanojs-v2
      spec:
        containers:
        - args:
          - start-provider-server
          env:
          - name: ALLOWED_ORIGINS
            value: chrome-extension://gafhhkghbfjjkeiendhlofajokpaflmk,chrome-extension://efeiemlfnahiidnjglmehaihacglceia,chrome-extension://bjlhpephaokolembmpdcbobbpkjnoheb,chrome-extension://djcdfchkaijggdjokfomholkalbffgil,http://localhost/,http://localhost
          - name: ENABLE_METRICS
            value: "true"
          - name: HANDLE_POLICY_IDS
            value: f0ff48bbb7bbe9d59a40f1ce90e9e9d0ff5002ec48f232b49ca0fb9a
          - name: LOGGER_MIN_SEVERITY
            value: info
          - name: NETWORK
            value: preprod
          - name: NODE_ENV
            value: null
          - name: OGMIOS_SRV_SERVICE_NAME
            value: dev-preprod-cardano-core.dev-preprod.svc.cluster.local
          - name: POSTGRES_DB_HANDLE
            value: handle
          - name: POSTGRES_HOST_HANDLE
            value: dev-preprod-postgresql
          - name: POSTGRES_PASSWORD_HANDLE
            valueFrom:
              secretKeyRef:
                key: password
                name: handle-owner-user.dev-preprod-postgresql.credentials.postgresql.acid.zalan.do
          - name: POSTGRES_POOL_MAX_HANDLE
            value: "10"
          - name: POSTGRES_PORT_HANDLE
            value: "5432"
          - name: POSTGRES_SSL_CA_FILE_HANDLE
            value: /tls/ca.crt
          - name: POSTGRES_SSL_HANDLE
            value: "true"
          - name: POSTGRES_USER_HANDLE
            valueFrom:
              secretKeyRef:
                key: username
                name: handle-owner-user.dev-preprod-postgresql.credentials.postgresql.acid.zalan.do
          - name: SERVICE_NAMES
            value: handle
-         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:nnmbiabf7l6ifxkl751m8r8bwjbcs38x
+         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:cizaa5rbpjcb13mmn3axq0vsz2d7hswi
          livenessProbe:
            httpGet:
              path: /v1.0.0/health
              port: 3000
            timeoutSeconds: 5
          name: handle-provider
          ports:
          - containerPort: 3000
            name: http
          resources:
            requests:
              cpu: 700m
              memory: 150Mi
          securityContext:
            runAsGroup: 0
            runAsUser: 0
          volumeMounts:
          - mountPath: /tls
            name: tls
        imagePullSecrets:
        - name: dockerconfigjson
        volumes:
        - name: tls
          secret:
            secretName: postgresql-server-cert

dev-preprod, dev-preprod-cardanojs-v2-pg-boss-worker, Deployment (apps) would change:

  # Source: cardanojs/templates/pgboss-deployment.yaml
  apiVersion: apps/v1
  kind: Deployment
  metadata:
    labels:
      app: pg-boss-worker
      network: preprod
      release: dev-preprod-cardanojs-v2
    name: dev-preprod-cardanojs-v2-pg-boss-worker
  spec:
    selector:
      matchLabels:
        app: pg-boss-worker
        network: preprod
        release: dev-preprod-cardanojs-v2
    template:
      metadata:
        labels:
          app: pg-boss-worker
          network: preprod
          release: dev-preprod-cardanojs-v2
      spec:
        containers:
        - args:
          - start-pg-boss-worker
          env:
          - name: LOGGER_MIN_SEVERITY
            value: info
          - name: METADATA_FETCH_MODE
            value: smash
          - name: NETWORK
            value: preprod
          - name: NETWORK_INFO_PROVIDER_URL
            value: http://dev-preprod-cardanojs-v2-backend.dev-preprod.svc.cluster.local
          - name: NODE_ENV
            value: null
          - name: POSTGRES_DB_DB_SYNC
            value: cardano
          - name: POSTGRES_DB_STAKE_POOL
            value: stakepoolv2
          - name: POSTGRES_HOST_DB_SYNC
            value: dev-preprod-postgresql
          - name: POSTGRES_HOST_STAKE_POOL
            value: dev-preprod-postgresql
          - name: POSTGRES_PASSWORD_DB_SYNC
            valueFrom:
              secretKeyRef:
                key: password
                name: cardano-owner-user.dev-preprod-postgresql.credentials.postgresql.acid.zalan.do
          - name: POSTGRES_PASSWORD_STAKE_POOL
            valueFrom:
              secretKeyRef:
                key: password
                name: stakepoolv2-owner-user.dev-preprod-postgresql.credentials.postgresql.acid.zalan.do
          - name: POSTGRES_POOL_MAX_DB_SYNC
            value: "5"
          - name: POSTGRES_POOL_MAX_STAKE_POOL
            value: "5"
          - name: POSTGRES_PORT_DB_SYNC
            value: "5432"
          - name: POSTGRES_PORT_STAKE_POOL
            value: "5432"
          - name: POSTGRES_SSL_CA_FILE_DB_SYNC
            value: /tls/ca.crt
          - name: POSTGRES_SSL_CA_FILE_STAKE_POOL
            value: /tls/ca.crt
          - name: POSTGRES_SSL_DB_SYNC
            value: "true"
          - name: POSTGRES_SSL_STAKE_POOL
            value: "true"
          - name: POSTGRES_USER_DB_SYNC
            valueFrom:
              secretKeyRef:
                key: username
                name: cardano-owner-user.dev-preprod-postgresql.credentials.postgresql.acid.zalan.do
          - name: POSTGRES_USER_STAKE_POOL
            valueFrom:
              secretKeyRef:
                key: username
                name: stakepoolv2-owner-user.dev-preprod-postgresql.credentials.postgresql.acid.zalan.do
          - name: QUEUES
            value: pool-delist-schedule,pool-metadata,pool-metrics,pool-rewards
          - name: SMASH_URL
            value: https://preprod-smash.world.dev.cardano.org/api/v1
          - name: STAKE_POOL_PROVIDER_URL
            value: http://dev-preprod-cardanojs-v2-backend.dev-preprod.svc.cluster.local
-         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:nnmbiabf7l6ifxkl751m8r8bwjbcs38x
+         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:cizaa5rbpjcb13mmn3axq0vsz2d7hswi
          livenessProbe:
            httpGet:
              path: /v1.0.0/health
              port: 3000
          name: pg-boss-worker
          ports:
          - containerPort: 3000
            name: http
          resources:
            limits:
              cpu: 300m
              memory: 300Mi
            requests:
              cpu: 200m
              memory: 150Mi
          securityContext:
            runAsGroup: 0
            runAsUser: 0
          startupProbe:
            httpGet:
              path: /v1.0.0/ready
              port: 3000
            initialDelaySeconds: 80
            periodSeconds: 5
          volumeMounts:
          - mountPath: /tls
            name: tls
        imagePullSecrets:
        - name: dockerconfigjson
        volumes:
        - name: tls
          secret:
            secretName: postgresql-server-cert

dev-preprod, dev-preprod-cardanojs-v2-stake-pool-projector, Deployment (apps) would change:

  # Source: cardanojs/templates/stake-pool-projector-deployment.yaml
  apiVersion: apps/v1
  kind: Deployment
  metadata:
    labels:
      app: stake-pool-projector
      network: preprod
      release: dev-preprod-cardanojs-v2
    name: dev-preprod-cardanojs-v2-stake-pool-projector
  spec:
    selector:
      matchLabels:
        app: stake-pool-projector
        network: preprod
        release: dev-preprod-cardanojs-v2
    template:
      metadata:
        labels:
          app: stake-pool-projector
          network: preprod
          release: dev-preprod-cardanojs-v2
      spec:
        containers:
        - args:
          - start-projector
          env:
          - name: LOGGER_MIN_SEVERITY
            value: info
          - name: NETWORK
            value: preprod
          - name: NODE_ENV
            value: null
          - name: OGMIOS_SRV_SERVICE_NAME
            value: dev-preprod-cardano-core.dev-preprod.svc.cluster.local
          - name: POSTGRES_DB
            value: stakepoolv2
          - name: POSTGRES_HOST
            value: dev-preprod-postgresql
          - name: POSTGRES_PASSWORD
            valueFrom:
              secretKeyRef:
                key: password
                name: stakepoolv2-owner-user.dev-preprod-postgresql.credentials.postgresql.acid.zalan.do
          - name: POSTGRES_POOL_MAX
            value: "2"
          - name: POSTGRES_PORT
            value: "5432"
          - name: POSTGRES_SSL
            value: "true"
          - name: POSTGRES_SSL_CA_FILE
            value: /tls/ca.crt
          - name: POSTGRES_USER
            valueFrom:
              secretKeyRef:
                key: username
                name: stakepoolv2-owner-user.dev-preprod-postgresql.credentials.postgresql.acid.zalan.do
          - name: PROJECTION_NAMES
            value: stake-pool,stake-pool-metadata-job,stake-pool-metrics-job,stake-pool-rewards-job
-         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:nnmbiabf7l6ifxkl751m8r8bwjbcs38x
+         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:cizaa5rbpjcb13mmn3axq0vsz2d7hswi
          livenessProbe:
            httpGet:
              path: /v1.0.0/health
              port: 3000
            timeoutSeconds: 5
          name: stake-pool-projector
          ports:
          - containerPort: 3000
            name: http
          resources:
            limits:
              cpu: 700m
              memory: 300Mi
            requests:
              cpu: 700m
              memory: 150Mi
          securityContext:
            runAsGroup: 0
            runAsUser: 0
          volumeMounts:
          - mountPath: /tls
            name: tls
        imagePullSecrets:
        - name: dockerconfigjson
        volumes:
        - name: tls
          secret:
            secretName: postgresql-server-cert

dev-preprod, dev-preprod-cardanojs-v2-stake-pool-provider, Deployment (apps) would change:

  # Source: cardanojs/templates/stake-pool-provider-deployment.yaml
  apiVersion: apps/v1
  kind: Deployment
  metadata:
    labels:
      app: stake-pool-provider
      network: preprod
      release: dev-preprod-cardanojs-v2
    name: dev-preprod-cardanojs-v2-stake-pool-provider
  spec:
    selector:
      matchLabels:
        app: stake-pool-provider
        network: preprod
        release: dev-preprod-cardanojs-v2
    template:
      metadata:
        labels:
          app: stake-pool-provider
          network: preprod
          release: dev-preprod-cardanojs-v2
      spec:
        containers:
        - args:
          - start-provider-server
          env:
          - name: ALLOWED_ORIGINS
            value: chrome-extension://gafhhkghbfjjkeiendhlofajokpaflmk,chrome-extension://efeiemlfnahiidnjglmehaihacglceia,chrome-extension://bjlhpephaokolembmpdcbobbpkjnoheb,chrome-extension://djcdfchkaijggdjokfomholkalbffgil,http://localhost/,http://localhost
          - name: DISABLE_STAKE_POOL_METRIC_APY
            value: "true"
          - name: ENABLE_METRICS
            value: "true"
          - name: LOGGER_MIN_SEVERITY
            value: info
          - name: NETWORK
            value: preprod
          - name: NODE_ENV
            value: null
          - name: OGMIOS_SRV_SERVICE_NAME
            value: dev-preprod-cardano-core.dev-preprod.svc.cluster.local
          - name: OVERRIDE_FUZZY_OPTIONS
            value: "true"
          - name: PAGINATION_PAGE_SIZE_LIMIT
            value: "5500"
          - name: POSTGRES_DB_STAKE_POOL
            value: stakepoolv2
          - name: POSTGRES_HOST_STAKE_POOL
            value: dev-preprod-postgresql
          - name: POSTGRES_PASSWORD_STAKE_POOL
            valueFrom:
              secretKeyRef:
                key: password
                name: stakepoolv2-owner-user.dev-preprod-postgresql.credentials.postgresql.acid.zalan.do
          - name: POSTGRES_POOL_MAX_STAKE_POOL
            value: "10"
          - name: POSTGRES_PORT_STAKE_POOL
            value: "5432"
          - name: POSTGRES_SSL_CA_FILE_STAKE_POOL
            value: /tls/ca.crt
          - name: POSTGRES_SSL_STAKE_POOL
            value: "true"
          - name: POSTGRES_USER_STAKE_POOL
            valueFrom:
              secretKeyRef:
                key: username
                name: stakepoolv2-owner-user.dev-preprod-postgresql.credentials.postgresql.acid.zalan.do
          - name: SERVICE_NAMES
            value: stake-pool
          - name: TOKEN_METADATA_SERVER_URL
            value: http://dev-preprod-cardano-stack-metadata.dev-preprod.svc.cluster.local
          - name: USE_TYPEORM_STAKE_POOL_PROVIDER
            value: "true"
-         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:nnmbiabf7l6ifxkl751m8r8bwjbcs38x
+         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:cizaa5rbpjcb13mmn3axq0vsz2d7hswi
          livenessProbe:
            httpGet:
              path: /v1.0.0/health
              port: 3000
            timeoutSeconds: 5
          name: stake-pool-provider
          ports:
          - containerPort: 3000
            name: http
          resources:
            requests:
              cpu: 700m
              memory: 150Mi
          securityContext:
            runAsGroup: 0
            runAsUser: 0
          volumeMounts:
          - mountPath: /tls
            name: tls
        imagePullSecrets:
        - name: dockerconfigjson
        volumes:
        - name: tls
          secret:
            secretName: postgresql-server-cert

dev-preprod, dev-preprod-cardanojs-v2-wallet-api-projector, Deployment (apps) would change:

  # Source: cardanojs/templates/wallet-api-projector-deployment.yaml
  apiVersion: apps/v1
  kind: Deployment
  metadata:
    labels:
      app: wallet-api-projector
      network: preprod
      release: dev-preprod-cardanojs-v2
    name: dev-preprod-cardanojs-v2-wallet-api-projector
  spec:
    selector:
      matchLabels:
        app: wallet-api-projector
        network: preprod
        release: dev-preprod-cardanojs-v2
    template:
      metadata:
        labels:
          app: wallet-api-projector
          network: preprod
          release: dev-preprod-cardanojs-v2
      spec:
        containers:
        - args:
          - start-projector
          env:
          - name: LOGGER_MIN_SEVERITY
            value: info
          - name: NETWORK
            value: preprod
          - name: OGMIOS_SRV_SERVICE_NAME
            value: dev-preprod-cardano-core.dev-preprod.svc.cluster.local
          - name: POSTGRES_DB
            value: wallet_api
          - name: POSTGRES_HOST
            value: dev-preprod-postgresql
          - name: POSTGRES_PASSWORD
            valueFrom:
              secretKeyRef:
                key: password
                name: wallet-api-owner-user.dev-preprod-postgresql.credentials.postgresql.acid.zalan.do
          - name: POSTGRES_POOL_MAX
            value: "2"
          - name: POSTGRES_PORT
            value: "5432"
          - name: POSTGRES_SSL
            value: "true"
          - name: POSTGRES_SSL_CA_FILE
            value: /tls/ca.crt
          - name: POSTGRES_USER
            valueFrom:
              secretKeyRef:
                key: username
                name: wallet-api-owner-user.dev-preprod-postgresql.credentials.postgresql.acid.zalan.do
          - name: PROJECTION_NAMES
            value: protocol-parameters
-         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:nnmbiabf7l6ifxkl751m8r8bwjbcs38x
+         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:cizaa5rbpjcb13mmn3axq0vsz2d7hswi
          livenessProbe:
            httpGet:
              path: /v1.0.0/health
              port: 3000
            timeoutSeconds: 5
          name: wallet-api-projector
          ports:
          - containerPort: 3000
            name: http
          resources:
            limits:
              cpu: 1000m
              memory: 300Mi
            requests:
              cpu: 100m
              memory: 150Mi
          securityContext:
            runAsGroup: 0
            runAsUser: 0
          volumeMounts:
          - mountPath: /tls
            name: tls
        imagePullSecrets:
        - name: dockerconfigjson
        volumes:
        - name: tls
          secret:
            secretName: postgresql-server-cert

dev-preprod, dev-preprod-cardanojs-v2-ws-server, Deployment (apps) would change:

  # Source: cardanojs/templates/ws-server-deployment.yaml
  apiVersion: apps/v1
  kind: Deployment
  metadata:
    labels:
      app: ws-server
      network: preprod
      release: dev-preprod-cardanojs-v2
    name: dev-preprod-cardanojs-v2-ws-server
  spec:
    selector:
      matchLabels:
        app: ws-server
        network: preprod
        release: dev-preprod-cardanojs-v2
    template:
      metadata:
        labels:
          app: ws-server
          network: preprod
          release: dev-preprod-cardanojs-v2
      spec:
        containers:
        - args:
          - start-ws-server
          env:
          - name: DB_CACHE_TTL
            value: "7200"
          - name: NETWORK
            value: preprod
          - name: OGMIOS_URL
            value: ws://dev-preprod-cardano-core.dev-preprod.svc.cluster.local:1337
          - name: POSTGRES_DB_DB_SYNC
            value: cardano
          - name: POSTGRES_HOST_DB_SYNC
            value: dev-preprod-postgresql
          - name: POSTGRES_PASSWORD_DB_SYNC
            valueFrom:
              secretKeyRef:
                key: password
                name: cardano-owner-user.dev-preprod-postgresql.credentials.postgresql.acid.zalan.do
          - name: POSTGRES_POOL_MAX_DB_SYNC
            value: "2"
          - name: POSTGRES_PORT_DB_SYNC
            value: "5432"
          - name: POSTGRES_SSL_CA_FILE_DB_SYNC
            value: /tls/ca.crt
          - name: POSTGRES_SSL_DB_SYNC
            value: "true"
          - name: POSTGRES_USER_DB_SYNC
            valueFrom:
              secretKeyRef:
                key: username
                name: cardano-owner-user.dev-preprod-postgresql.credentials.postgresql.acid.zalan.do
-         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:nnmbiabf7l6ifxkl751m8r8bwjbcs38x
+         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:cizaa5rbpjcb13mmn3axq0vsz2d7hswi
          livenessProbe:
            httpGet:
              path: /health
              port: 3000
          name: ws-server
          ports:
          - containerPort: 3000
            name: http
          resources:
            limits:
              cpu: 300m
              memory: 300Mi
            requests:
              cpu: 200m
              memory: 150Mi
          securityContext:
            runAsGroup: 0
            runAsUser: 0
          volumeMounts:
          - mountPath: /tls
            name: tls
        imagePullSecrets:
        - name: dockerconfigjson
        volumes:
        - name: tls
          secret:
            secretName: postgresql-server-cert
dev-mainnet@us-east-1 would change:

dev-mainnet, dev-mainnet-cardanojs-asset-projector, Deployment (apps) would change:

  # Source: cardanojs/templates/asset-projector-deployment.yaml
  apiVersion: apps/v1
  kind: Deployment
  metadata:
    labels:
      app: asset-projector
      network: mainnet
      release: dev-mainnet-cardanojs
    name: dev-mainnet-cardanojs-asset-projector
  spec:
    selector:
      matchLabels:
        app: asset-projector
        network: mainnet
        release: dev-mainnet-cardanojs
    template:
      metadata:
        labels:
          app: asset-projector
          network: mainnet
          release: dev-mainnet-cardanojs
      spec:
        containers:
        - args:
          - start-projector
          env:
          - name: LOGGER_MIN_SEVERITY
            value: info
          - name: NETWORK
            value: mainnet
          - name: OGMIOS_SRV_SERVICE_NAME
            value: dev-mainnet-cardano-core.dev-mainnet.svc.cluster.local
          - name: POSTGRES_DB
            value: asset
          - name: POSTGRES_HOST
            value: dev-mainnet-postgresql
          - name: POSTGRES_PASSWORD
            valueFrom:
              secretKeyRef:
                key: password
                name: asset-owner-user.dev-mainnet-postgresql.credentials.postgresql.acid.zalan.do
          - name: POSTGRES_POOL_MAX
            value: "2"
          - name: POSTGRES_PORT
            value: "5432"
          - name: POSTGRES_SSL
            value: "true"
          - name: POSTGRES_SSL_CA_FILE
            value: /tls/ca.crt
          - name: POSTGRES_USER
            valueFrom:
              secretKeyRef:
                key: username
                name: asset-owner-user.dev-mainnet-postgresql.credentials.postgresql.acid.zalan.do
          - name: PROJECTION_NAMES
            value: asset
-         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:k6qiffajlfppp0cl4f1z0dd53g0v23w8
+         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:cizaa5rbpjcb13mmn3axq0vsz2d7hswi
          livenessProbe:
            httpGet:
              path: /v1.0.0/health
              port: 3000
            timeoutSeconds: 5
          name: asset-projector
          ports:
          - containerPort: 3000
            name: http
          resources:
            limits:
              cpu: 700m
              memory: 300Mi
            requests:
              cpu: 700m
              memory: 150Mi
          securityContext:
            runAsGroup: 0
            runAsUser: 0
          volumeMounts:
          - mountPath: /tls
            name: tls
        imagePullSecrets:
        - name: dockerconfigjson
        volumes:
        - name: tls
          secret:
            secretName: postgresql-server-cert

dev-mainnet, dev-mainnet-cardanojs-backend, Deployment (apps) would change:

  # Source: cardanojs/templates/backend-deployment.yaml
  apiVersion: apps/v1
  kind: Deployment
  metadata:
    labels:
      app: backend
      network: mainnet
      release: dev-mainnet-cardanojs
    name: dev-mainnet-cardanojs-backend
  spec:
    replicas: 2
    selector:
      matchLabels:
        app: backend
        network: mainnet
        release: dev-mainnet-cardanojs
    template:
      metadata:
        labels:
          app: backend
          network: mainnet
          release: dev-mainnet-cardanojs
      spec:
        containers:
        - args:
          - start-provider-server
          env:
          - name: ALLOWED_ORIGINS
            value: chrome-extension://gafhhkghbfjjkeiendhlofajokpaflmk,chrome-extension://efeiemlfnahiidnjglmehaihacglceia,chrome-extension://bjlhpephaokolembmpdcbobbpkjnoheb,chrome-extension://djcdfchkaijggdjokfomholkalbffgil,http://localhost/,http://localhost
          - name: BUILD_INFO
-           value: '{"lastModifiedDate":"20240930190455","rev":"b0f2e4c86f5279ff4fc18d2d2cbc86bb19b24432","shortRev":"b0f2e4c"}'
+           value: '{"lastModifiedDate":"20241001080037","rev":"9bda2b74a6b12e2b28ba00c283fd78f1a97e6657","shortRev":"9bda2b7"}'
          - name: DISABLE_STAKE_POOL_METRIC_APY
            value: "true"
          - name: ENABLE_METRICS
            value: "true"
          - name: HANDLE_POLICY_IDS
            value: f0ff48bbb7bbe9d59a40f1ce90e9e9d0ff5002ec48f232b49ca0fb9a
          - name: HANDLE_PROVIDER_SERVER_URL
            value: https://api.handle.me
          - name: LOGGER_MIN_SEVERITY
            value: info
          - name: NETWORK
            value: mainnet
          - name: NODE_ENV
            value: null
          - name: OGMIOS_SRV_SERVICE_NAME
            value: dev-mainnet-cardano-core.dev-mainnet.svc.cluster.local
          - name: PAGINATION_PAGE_SIZE_LIMIT
            value: "5500"
          - name: POSTGRES_DB_DB_SYNC
            value: cardano
          - name: POSTGRES_DB_HANDLE
            value: handle
          - name: POSTGRES_HOST_DB_SYNC
            value: dev-mainnet-postgresql
          - name: POSTGRES_HOST_HANDLE
            value: dev-mainnet-postgresql
          - name: POSTGRES_PASSWORD_DB_SYNC
            valueFrom:
              secretKeyRef:
                key: password
                name: cardano-owner-user.dev-mainnet-postgresql.credentials.postgresql.acid.zalan.do
          - name: POSTGRES_PASSWORD_HANDLE
            valueFrom:
              secretKeyRef:
                key: password
                name: handle-owner-user.dev-mainnet-postgresql.credentials.postgresql.acid.zalan.do
          - name: POSTGRES_POOL_MAX_DB_SYNC
            value: "50"
          - name: POSTGRES_POOL_MAX_HANDLE
            value: "10"
          - name: POSTGRES_PORT_DB_SYNC
            value: "5432"
          - name: POSTGRES_PORT_HANDLE
            value: "5432"
          - name: POSTGRES_SSL_CA_FILE_DB_SYNC
            value: /tls/ca.crt
          - name: POSTGRES_SSL_CA_FILE_HANDLE
            value: /tls/ca.crt
          - name: POSTGRES_SSL_DB_SYNC
            value: "true"
          - name: POSTGRES_SSL_HANDLE
            value: "true"
          - name: POSTGRES_USER_DB_SYNC
            valueFrom:
              secretKeyRef:
                key: username
                name: cardano-owner-user.dev-mainnet-postgresql.credentials.postgresql.acid.zalan.do
          - name: POSTGRES_USER_HANDLE
            valueFrom:
              secretKeyRef:
                key: username
                name: handle-owner-user.dev-mainnet-postgresql.credentials.postgresql.acid.zalan.do
          - name: SERVICE_NAMES
            value: asset,network-info,rewards,stake-pool,tx-submit,utxo
          - name: TOKEN_METADATA_SERVER_URL
            value: http://dev-mainnet-cardano-stack-metadata.dev-mainnet.svc.cluster.local
          - name: USE_BLOCKFROST
            value: "true"
          - name: USE_KORA_LABS
            value: "true"
-         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:k6qiffajlfppp0cl4f1z0dd53g0v23w8
+         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:cizaa5rbpjcb13mmn3axq0vsz2d7hswi
          livenessProbe:
            httpGet:
              path: /v1.0.0/health
              port: 3000
            periodSeconds: 60
            timeoutSeconds: 30
          name: backend
          ports:
          - containerPort: 3000
            name: http
          resources:
-           limits:
-             cpu: 1500m
-             memory: 512Mi
            requests:
              cpu: 1000m
              memory: 350Mi
          securityContext:
            runAsGroup: 0
            runAsUser: 0
          volumeMounts:
          - mountPath: /tls
            name: tls
        imagePullSecrets:
        - name: dockerconfigjson
        volumes:
        - name: tls
          secret:
            secretName: postgresql-server-cert

dev-mainnet, dev-mainnet-cardanojs-blockfrost-worker, Deployment (apps) would change:

  # Source: cardanojs/templates/blockfrost-worker-deployment.yaml
  apiVersion: apps/v1
  kind: Deployment
  metadata:
    labels:
      app: blockfrost-worker
      network: mainnet
      release: dev-mainnet-cardanojs
    name: dev-mainnet-cardanojs-blockfrost-worker
  spec:
    selector:
      matchLabels:
        app: blockfrost-worker
        network: mainnet
        release: dev-mainnet-cardanojs
    template:
      metadata:
        labels:
          app: blockfrost-worker
          network: mainnet
          release: dev-mainnet-cardanojs
      spec:
        containers:
        - args:
          - start-blockfrost-worker
          env:
          - name: BLOCKFROST_API_KEY
            valueFrom:
              secretKeyRef:
                key: api-key
                name: blockfrost
          - name: LOGGER_MIN_SEVERITY
            value: info
          - name: NETWORK
            value: mainnet
          - name: NODE_ENV
            value: null
          - name: POSTGRES_DB_DB_SYNC
            value: cardano
          - name: POSTGRES_HOST_DB_SYNC
            value: dev-mainnet-postgresql
          - name: POSTGRES_PASSWORD_DB_SYNC
            valueFrom:
              secretKeyRef:
                key: password
                name: cardano-owner-user.dev-mainnet-postgresql.credentials.postgresql.acid.zalan.do
          - name: POSTGRES_PORT_DB_SYNC
            value: "5432"
          - name: POSTGRES_SSL_CA_FILE_DB_SYNC
            value: /tls/ca.crt
          - name: POSTGRES_SSL_DB_SYNC
            value: "true"
          - name: POSTGRES_USER_DB_SYNC
            valueFrom:
              secretKeyRef:
                key: username
                name: cardano-owner-user.dev-mainnet-postgresql.credentials.postgresql.acid.zalan.do
-         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:k6qiffajlfppp0cl4f1z0dd53g0v23w8
+         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:cizaa5rbpjcb13mmn3axq0vsz2d7hswi
          livenessProbe:
            httpGet:
              path: /v1.0.0/health
              port: 3000
            timeoutSeconds: 5
          name: blockfrost-worker
          ports:
          - containerPort: 3000
            name: http
          resources:
            limits:
              cpu: 500m
              memory: 300Mi
            requests:
              cpu: 100m
              memory: 150Mi
          securityContext:
            runAsGroup: 0
            runAsUser: 0
          volumeMounts:
          - mountPath: /tls
            name: tls
        imagePullSecrets:
        - name: dockerconfigjson
        volumes:
        - name: tls
          secret:
            secretName: postgresql-server-cert

dev-mainnet, dev-mainnet-cardanojs-chain-history-provider, Deployment (apps) would change:

  # Source: cardanojs/templates/chain-history-provider-deployment.yaml
  apiVersion: apps/v1
  kind: Deployment
  metadata:
    labels:
      app: chain-history-provider
      network: mainnet
      release: dev-mainnet-cardanojs
    name: dev-mainnet-cardanojs-chain-history-provider
  spec:
    replicas: 2
    selector:
      matchLabels:
        app: chain-history-provider
        network: mainnet
        release: dev-mainnet-cardanojs
    template:
      metadata:
        labels:
          app: chain-history-provider
          network: mainnet
          release: dev-mainnet-cardanojs
      spec:
        containers:
        - args:
          - start-provider-server
          env:
          - name: ALLOWED_ORIGINS
            value: chrome-extension://gafhhkghbfjjkeiendhlofajokpaflmk,chrome-extension://efeiemlfnahiidnjglmehaihacglceia,chrome-extension://bjlhpephaokolembmpdcbobbpkjnoheb,chrome-extension://djcdfchkaijggdjokfomholkalbffgil,http://localhost/,http://localhost
          - name: DISABLE_STAKE_POOL_METRIC_APY
            value: "true"
          - name: ENABLE_METRICS
            value: "true"
          - name: HANDLE_POLICY_IDS
            value: f0ff48bbb7bbe9d59a40f1ce90e9e9d0ff5002ec48f232b49ca0fb9a
          - name: LOGGER_MIN_SEVERITY
            value: info
          - name: NETWORK
            value: mainnet
          - name: NODE_ENV
            value: null
          - name: OGMIOS_SRV_SERVICE_NAME
            value: dev-mainnet-cardano-core.dev-mainnet.svc.cluster.local
          - name: PAGINATION_PAGE_SIZE_LIMIT
            value: "5500"
          - name: POSTGRES_DB_DB_SYNC
            value: cardano
          - name: POSTGRES_HOST_DB_SYNC
            value: dev-mainnet-postgresql
          - name: POSTGRES_PASSWORD_DB_SYNC
            valueFrom:
              secretKeyRef:
                key: password
                name: cardano-owner-user.dev-mainnet-postgresql.credentials.postgresql.acid.zalan.do
          - name: POSTGRES_POOL_MAX_DB_SYNC
            value: "50"
          - name: POSTGRES_PORT_DB_SYNC
            value: "5432"
          - name: POSTGRES_SSL_CA_FILE_DB_SYNC
            value: /tls/ca.crt
          - name: POSTGRES_SSL_DB_SYNC
            value: "true"
          - name: POSTGRES_USER_DB_SYNC
            valueFrom:
              secretKeyRef:
                key: username
                name: cardano-owner-user.dev-mainnet-postgresql.credentials.postgresql.acid.zalan.do
          - name: SERVICE_NAMES
            value: chain-history
          - name: TOKEN_METADATA_SERVER_URL
            value: http://dev-mainnet-cardano-stack-metadata.dev-mainnet.svc.cluster.local
          - name: USE_BLOCKFROST
            value: "true"
          - name: USE_KORA_LABS
            value: "true"
-         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:k6qiffajlfppp0cl4f1z0dd53g0v23w8
+         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:cizaa5rbpjcb13mmn3axq0vsz2d7hswi
          livenessProbe:
            httpGet:
              path: /v1.0.0/health
              port: 3000
            timeoutSeconds: 5
          name: chain-history-provider
          ports:
          - containerPort: 3000
            name: http
          resources:
-           limits:
-             cpu: 1200m
-             memory: 300Mi
            requests:
              cpu: 1000m
-             memory: 150Mi
+             memory: 512Mi
          securityContext:
            runAsGroup: 0
            runAsUser: 0
          volumeMounts:
          - mountPath: /tls
            name: tls
        imagePullSecrets:
        - name: dockerconfigjson
        volumes:
        - name: tls
          secret:
            secretName: postgresql-server-cert

dev-mainnet, dev-mainnet-cardanojs-handle-projector, Deployment (apps) would change:

  # Source: cardanojs/templates/handle-projector-deployment.yaml
  apiVersion: apps/v1
  kind: Deployment
  metadata:
    labels:
      app: handle-projector
      network: mainnet
      release: dev-mainnet-cardanojs
    name: dev-mainnet-cardanojs-handle-projector
  spec:
    selector:
      matchLabels:
        app: handle-projector
        network: mainnet
        release: dev-mainnet-cardanojs
    template:
      metadata:
        labels:
          app: handle-projector
          network: mainnet
          release: dev-mainnet-cardanojs
      spec:
        containers:
        - args:
          - start-projector
          env:
          - name: HANDLE_POLICY_IDS
            value: f0ff48bbb7bbe9d59a40f1ce90e9e9d0ff5002ec48f232b49ca0fb9a
          - name: LOGGER_MIN_SEVERITY
            value: info
          - name: NETWORK
            value: mainnet
          - name: NODE_ENV
            value: null
          - name: OGMIOS_SRV_SERVICE_NAME
            value: dev-mainnet-cardano-core.dev-mainnet.svc.cluster.local
          - name: POSTGRES_DB
            value: handle
          - name: POSTGRES_HOST
            value: dev-mainnet-postgresql
          - name: POSTGRES_PASSWORD
            valueFrom:
              secretKeyRef:
                key: password
                name: handle-owner-user.dev-mainnet-postgresql.credentials.postgresql.acid.zalan.do
          - name: POSTGRES_POOL_MAX
            value: "2"
          - name: POSTGRES_PORT
            value: "5432"
          - name: POSTGRES_SSL
            value: "true"
          - name: POSTGRES_SSL_CA_FILE
            value: /tls/ca.crt
          - name: POSTGRES_USER
            valueFrom:
              secretKeyRef:
                key: username
                name: handle-owner-user.dev-mainnet-postgresql.credentials.postgresql.acid.zalan.do
          - name: PROJECTION_NAMES
            value: handle
-         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:k6qiffajlfppp0cl4f1z0dd53g0v23w8
+         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:cizaa5rbpjcb13mmn3axq0vsz2d7hswi
          livenessProbe:
            httpGet:
              path: /v1.0.0/health
              port: 3000
            timeoutSeconds: 5
          name: handle-projector
          ports:
          - containerPort: 3000
            name: http
          resources:
            limits:
              cpu: 1000m
              memory: 300Mi
            requests:
              cpu: 100m
              memory: 150Mi
          securityContext:
            runAsGroup: 0
            runAsUser: 0
          volumeMounts:
          - mountPath: /tls
            name: tls
        imagePullSecrets:
        - name: dockerconfigjson
        volumes:
        - name: tls
          secret:
            secretName: postgresql-server-cert

dev-mainnet, dev-mainnet-cardanojs-handle-provider, Deployment (apps) would change:

  # Source: cardanojs/templates/handle-provider-deployment.yaml
  apiVersion: apps/v1
  kind: Deployment
  metadata:
    labels:
      app: handle-provider
      network: mainnet
      release: dev-mainnet-cardanojs
    name: dev-mainnet-cardanojs-handle-provider
  spec:
    selector:
      matchLabels:
        app: handle-provider
        network: mainnet
        release: dev-mainnet-cardanojs
    template:
      metadata:
        labels:
          app: handle-provider
          network: mainnet
          release: dev-mainnet-cardanojs
      spec:
        containers:
        - args:
          - start-provider-server
          env:
          - name: ALLOWED_ORIGINS
            value: chrome-extension://gafhhkghbfjjkeiendhlofajokpaflmk,chrome-extension://efeiemlfnahiidnjglmehaihacglceia,chrome-extension://bjlhpephaokolembmpdcbobbpkjnoheb,chrome-extension://djcdfchkaijggdjokfomholkalbffgil,http://localhost/,http://localhost
          - name: ENABLE_METRICS
            value: "true"
          - name: HANDLE_POLICY_IDS
            value: f0ff48bbb7bbe9d59a40f1ce90e9e9d0ff5002ec48f232b49ca0fb9a
          - name: LOGGER_MIN_SEVERITY
            value: info
          - name: NETWORK
            value: mainnet
          - name: NODE_ENV
            value: null
          - name: OGMIOS_SRV_SERVICE_NAME
            value: dev-mainnet-cardano-core.dev-mainnet.svc.cluster.local
          - name: POSTGRES_DB_HANDLE
            value: handle
          - name: POSTGRES_HOST_HANDLE
            value: dev-mainnet-postgresql
          - name: POSTGRES_PASSWORD_HANDLE
            valueFrom:
              secretKeyRef:
                key: password
                name: handle-owner-user.dev-mainnet-postgresql.credentials.postgresql.acid.zalan.do
          - name: POSTGRES_POOL_MAX_HANDLE
            value: "10"
          - name: POSTGRES_PORT_HANDLE
            value: "5432"
          - name: POSTGRES_SSL_CA_FILE_HANDLE
            value: /tls/ca.crt
          - name: POSTGRES_SSL_HANDLE
            value: "true"
          - name: POSTGRES_USER_HANDLE
            valueFrom:
              secretKeyRef:
                key: username
                name: handle-owner-user.dev-mainnet-postgresql.credentials.postgresql.acid.zalan.do
          - name: SERVICE_NAMES
            value: handle
-         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:k6qiffajlfppp0cl4f1z0dd53g0v23w8
+         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:cizaa5rbpjcb13mmn3axq0vsz2d7hswi
          livenessProbe:
            httpGet:
              path: /v1.0.0/health
              port: 3000
            timeoutSeconds: 5
          name: handle-provider
          ports:
          - containerPort: 3000
            name: http
          resources:
-           limits:
-             cpu: 500m
-             memory: 300Mi
            requests:
-             cpu: 100m
+             cpu: 700m
              memory: 150Mi
          securityContext:
            runAsGroup: 0
            runAsUser: 0
          volumeMounts:
          - mountPath: /tls
            name: tls
        imagePullSecrets:
        - name: dockerconfigjson
        volumes:
        - name: tls
          secret:
            secretName: postgresql-server-cert

dev-mainnet, dev-mainnet-cardanojs-pg-boss-worker, Deployment (apps) would change:

  # Source: cardanojs/templates/pgboss-deployment.yaml
  apiVersion: apps/v1
  kind: Deployment
  metadata:
    labels:
      app: pg-boss-worker
      network: mainnet
      release: dev-mainnet-cardanojs
    name: dev-mainnet-cardanojs-pg-boss-worker
  spec:
    selector:
      matchLabels:
        app: pg-boss-worker
        network: mainnet
        release: dev-mainnet-cardanojs
    template:
      metadata:
        labels:
          app: pg-boss-worker
          network: mainnet
          release: dev-mainnet-cardanojs
      spec:
        containers:
        - args:
          - start-pg-boss-worker
          env:
          - name: LOGGER_MIN_SEVERITY
            value: info
          - name: METADATA_FETCH_MODE
            value: smash
          - name: NETWORK
            value: mainnet
          - name: NETWORK_INFO_PROVIDER_URL
            value: http://dev-mainnet-cardanojs-backend.dev-mainnet.svc.cluster.local
          - name: NODE_ENV
            value: null
          - name: POSTGRES_DB_DB_SYNC
            value: cardano
          - name: POSTGRES_DB_STAKE_POOL
            value: stakepoolv2
          - name: POSTGRES_HOST_DB_SYNC
            value: dev-mainnet-postgresql
          - name: POSTGRES_HOST_STAKE_POOL
            value: dev-mainnet-postgresql
          - name: POSTGRES_PASSWORD_DB_SYNC
            valueFrom:
              secretKeyRef:
                key: password
                name: cardano-owner-user.dev-mainnet-postgresql.credentials.postgresql.acid.zalan.do
          - name: POSTGRES_PASSWORD_STAKE_POOL
            valueFrom:
              secretKeyRef:
                key: password
                name: stakepoolv2-owner-user.dev-mainnet-postgresql.credentials.postgresql.acid.zalan.do
          - name: POSTGRES_POOL_MAX_DB_SYNC
            value: "5"
          - name: POSTGRES_POOL_MAX_STAKE_POOL
            value: "5"
          - name: POSTGRES_PORT_DB_SYNC
            value: "5432"
          - name: POSTGRES_PORT_STAKE_POOL
            value: "5432"
          - name: POSTGRES_SSL_CA_FILE_DB_SYNC
            value: /tls/ca.crt
          - name: POSTGRES_SSL_CA_FILE_STAKE_POOL
            value: /tls/ca.crt
          - name: POSTGRES_SSL_DB_SYNC
            value: "true"
          - name: POSTGRES_SSL_STAKE_POOL
            value: "true"
          - name: POSTGRES_USER_DB_SYNC
            valueFrom:
              secretKeyRef:
                key: username
                name: cardano-owner-user.dev-mainnet-postgresql.credentials.postgresql.acid.zalan.do
          - name: POSTGRES_USER_STAKE_POOL
            valueFrom:
              secretKeyRef:
                key: username
                name: stakepoolv2-owner-user.dev-mainnet-postgresql.credentials.postgresql.acid.zalan.do
          - name: QUEUES
            value: pool-delist-schedule,pool-metadata,pool-metrics,pool-rewards
          - name: SMASH_URL
            value: https://smash.cardano-mainnet.iohk.io/api/v1
          - name: STAKE_POOL_PROVIDER_URL
            value: http://dev-mainnet-cardanojs-backend.dev-mainnet.svc.cluster.local
-         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:k6qiffajlfppp0cl4f1z0dd53g0v23w8
+         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:cizaa5rbpjcb13mmn3axq0vsz2d7hswi
          livenessProbe:
            httpGet:
              path: /v1.0.0/health
              port: 3000
          name: pg-boss-worker
          ports:
          - containerPort: 3000
            name: http
          resources:
            limits:
              cpu: 300m
              memory: 300Mi
            requests:
              cpu: 200m
              memory: 150Mi
          securityContext:
            runAsGroup: 0
            runAsUser: 0
          startupProbe:
            httpGet:
              path: /v1.0.0/ready
              port: 3000
            initialDelaySeconds: 80
            periodSeconds: 5
          volumeMounts:
          - mountPath: /tls
            name: tls
        imagePullSecrets:
        - name: dockerconfigjson
        volumes:
        - name: tls
          secret:
            secretName: postgresql-server-cert

dev-mainnet, dev-mainnet-cardanojs-stake-pool-projector, Deployment (apps) would change:

  # Source: cardanojs/templates/stake-pool-projector-deployment.yaml
  apiVersion: apps/v1
  kind: Deployment
  metadata:
    labels:
      app: stake-pool-projector
      network: mainnet
      release: dev-mainnet-cardanojs
    name: dev-mainnet-cardanojs-stake-pool-projector
  spec:
    selector:
      matchLabels:
        app: stake-pool-projector
        network: mainnet
        release: dev-mainnet-cardanojs
    template:
      metadata:
        labels:
          app: stake-pool-projector
          network: mainnet
          release: dev-mainnet-cardanojs
      spec:
        containers:
        - args:
          - start-projector
          env:
          - name: LOGGER_MIN_SEVERITY
            value: info
          - name: NETWORK
            value: mainnet
          - name: NODE_ENV
            value: null
          - name: OGMIOS_SRV_SERVICE_NAME
            value: dev-mainnet-cardano-core.dev-mainnet.svc.cluster.local
          - name: POSTGRES_DB
            value: stakepoolv2
          - name: POSTGRES_HOST
            value: dev-mainnet-postgresql
          - name: POSTGRES_PASSWORD
            valueFrom:
              secretKeyRef:
                key: password
                name: stakepoolv2-owner-user.dev-mainnet-postgresql.credentials.postgresql.acid.zalan.do
          - name: POSTGRES_POOL_MAX
            value: "2"
          - name: POSTGRES_PORT
            value: "5432"
          - name: POSTGRES_SSL
            value: "true"
          - name: POSTGRES_SSL_CA_FILE
            value: /tls/ca.crt
          - name: POSTGRES_USER
            valueFrom:
              secretKeyRef:
                key: username
                name: stakepoolv2-owner-user.dev-mainnet-postgresql.credentials.postgresql.acid.zalan.do
          - name: PROJECTION_NAMES
            value: stake-pool,stake-pool-metadata-job,stake-pool-metrics-job,stake-pool-rewards-job
-         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:k6qiffajlfppp0cl4f1z0dd53g0v23w8
+         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:cizaa5rbpjcb13mmn3axq0vsz2d7hswi
          livenessProbe:
            httpGet:
              path: /v1.0.0/health
              port: 3000
            timeoutSeconds: 5
          name: stake-pool-projector
          ports:
          - containerPort: 3000
            name: http
          resources:
            limits:
              cpu: 700m
              memory: 300Mi
            requests:
              cpu: 700m
              memory: 150Mi
          securityContext:
            runAsGroup: 0
            runAsUser: 0
          volumeMounts:
          - mountPath: /tls
            name: tls
        imagePullSecrets:
        - name: dockerconfigjson
        volumes:
        - name: tls
          secret:
            secretName: postgresql-server-cert

dev-mainnet, dev-mainnet-cardanojs-stake-pool-provider, Deployment (apps) would change:

  # Source: cardanojs/templates/stake-pool-provider-deployment.yaml
  apiVersion: apps/v1
  kind: Deployment
  metadata:
    labels:
      app: stake-pool-provider
      network: mainnet
      release: dev-mainnet-cardanojs
    name: dev-mainnet-cardanojs-stake-pool-provider
  spec:
    selector:
      matchLabels:
        app: stake-pool-provider
        network: mainnet
        release: dev-mainnet-cardanojs
    template:
      metadata:
        labels:
          app: stake-pool-provider
          network: mainnet
          release: dev-mainnet-cardanojs
      spec:
        containers:
        - args:
          - start-provider-server
          env:
          - name: ALLOWED_ORIGINS
            value: chrome-extension://gafhhkghbfjjkeiendhlofajokpaflmk,chrome-extension://efeiemlfnahiidnjglmehaihacglceia,chrome-extension://bjlhpephaokolembmpdcbobbpkjnoheb,chrome-extension://djcdfchkaijggdjokfomholkalbffgil,http://localhost/,http://localhost
          - name: DISABLE_STAKE_POOL_METRIC_APY
            value: "true"
          - name: ENABLE_METRICS
            value: "true"
          - name: LOGGER_MIN_SEVERITY
            value: info
          - name: NETWORK
            value: mainnet
          - name: NODE_ENV
            value: null
          - name: OGMIOS_SRV_SERVICE_NAME
            value: dev-mainnet-cardano-core.dev-mainnet.svc.cluster.local
          - name: OVERRIDE_FUZZY_OPTIONS
            value: "true"
          - name: PAGINATION_PAGE_SIZE_LIMIT
            value: "5500"
          - name: POSTGRES_DB_STAKE_POOL
            value: stakepoolv2
          - name: POSTGRES_HOST_STAKE_POOL
            value: dev-mainnet-postgresql
          - name: POSTGRES_PASSWORD_STAKE_POOL
            valueFrom:
              secretKeyRef:
                key: password
                name: stakepoolv2-owner-user.dev-mainnet-postgresql.credentials.postgresql.acid.zalan.do
          - name: POSTGRES_POOL_MAX_STAKE_POOL
            value: "10"
          - name: POSTGRES_PORT_STAKE_POOL
            value: "5432"
          - name: POSTGRES_SSL_CA_FILE_STAKE_POOL
            value: /tls/ca.crt
          - name: POSTGRES_SSL_STAKE_POOL
            value: "true"
          - name: POSTGRES_USER_STAKE_POOL
            valueFrom:
              secretKeyRef:
                key: username
                name: stakepoolv2-owner-user.dev-mainnet-postgresql.credentials.postgresql.acid.zalan.do
          - name: SERVICE_NAMES
            value: stake-pool
          - name: TOKEN_METADATA_SERVER_URL
            value: http://dev-mainnet-cardano-stack-metadata.dev-mainnet.svc.cluster.local
          - name: USE_TYPEORM_STAKE_POOL_PROVIDER
            value: "true"
-         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:k6qiffajlfppp0cl4f1z0dd53g0v23w8
+         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:cizaa5rbpjcb13mmn3axq0vsz2d7hswi
          livenessProbe:
            httpGet:
              path: /v1.0.0/health
              port: 3000
            timeoutSeconds: 5
          name: stake-pool-provider
          ports:
          - containerPort: 3000
            name: http
          resources:
-           limits:
-             cpu: 500m
-             memory: 300Mi
            requests:
-             cpu: 100m
+             cpu: 700m
              memory: 150Mi
          securityContext:
            runAsGroup: 0
            runAsUser: 0
          volumeMounts:
          - mountPath: /tls
            name: tls
        imagePullSecrets:
        - name: dockerconfigjson
        volumes:
        - name: tls
          secret:
            secretName: postgresql-server-cert

dev-mainnet, dev-mainnet-cardanojs-ws-server, Deployment (apps) would change:

  # Source: cardanojs/templates/ws-server-deployment.yaml
  apiVersion: apps/v1
  kind: Deployment
  metadata:
    labels:
      app: ws-server
      network: mainnet
      release: dev-mainnet-cardanojs
    name: dev-mainnet-cardanojs-ws-server
  spec:
    selector:
      matchLabels:
        app: ws-server
        network: mainnet
        release: dev-mainnet-cardanojs
    template:
      metadata:
        labels:
          app: ws-server
          network: mainnet
          release: dev-mainnet-cardanojs
      spec:
        containers:
        - args:
          - start-ws-server
          env:
          - name: DB_CACHE_TTL
            value: "7200"
          - name: NETWORK
            value: mainnet
          - name: OGMIOS_URL
            value: ws://dev-mainnet-cardano-core.dev-mainnet.svc.cluster.local:1337
          - name: POSTGRES_DB_DB_SYNC
            value: cardano
          - name: POSTGRES_HOST_DB_SYNC
            value: dev-mainnet-postgresql
          - name: POSTGRES_PASSWORD_DB_SYNC
            valueFrom:
              secretKeyRef:
                key: password
                name: cardano-owner-user.dev-mainnet-postgresql.credentials.postgresql.acid.zalan.do
          - name: POSTGRES_POOL_MAX_DB_SYNC
            value: "2"
          - name: POSTGRES_PORT_DB_SYNC
            value: "5432"
          - name: POSTGRES_SSL_CA_FILE_DB_SYNC
            value: /tls/ca.crt
          - name: POSTGRES_SSL_DB_SYNC
            value: "true"
          - name: POSTGRES_USER_DB_SYNC
            valueFrom:
              secretKeyRef:
                key: username
                name: cardano-owner-user.dev-mainnet-postgresql.credentials.postgresql.acid.zalan.do
-         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:k6qiffajlfppp0cl4f1z0dd53g0v23w8
+         image: 926093910549.dkr.ecr.us-east-1.amazonaws.com/cardano-services:cizaa5rbpjcb13mmn3axq0vsz2d7hswi
          livenessProbe:
            httpGet:
              path: /health
              port: 3000
          name: ws-server
          ports:
          - containerPort: 3000
            name: http
          resources:
            limits:
              cpu: 300m
              memory: 300Mi
            requests:
              cpu: 200m
              memory: 150Mi
          securityContext:
            runAsGroup: 0
            runAsUser: 0
          volumeMounts:
          - mountPath: /tls
            name: tls
        imagePullSecrets:
        - name: dockerconfigjson
        volumes:
        - name: tls
          secret:
            secretName: postgresql-server-cert

@iccicci iccicci force-pushed the feat/web-socket-chain-history-provider branch 4 times, most recently from 517a6a7 to 8b0e7ac Compare September 24, 2024 22:30
@iccicci iccicci marked this pull request as ready for review September 25, 2024 05:46
Copy link
Member

@mkazlauskas mkazlauskas left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Preliminary review with some questions

}

interface EmitHealthOptions {
notRecoverable?: boolean;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nitpick/suggestion: in general non-negated boolean variables result in more readable boolean logic

Suggested change
notRecoverable?: boolean;
recoverable?: boolean;

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes... in this case I used the negative form as it also has the meaning "this error needs to end up to a server restart".

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure there are exceptions to the rule 🙏

On a different topic:

has the meaning "this error needs to end up to a server restart".

In that case, server should probably die, and all ws connections get disconnected? 🤔

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes... in case of not recoverable error there is no alternative...
The server tries to, and often it does... due to the nature of a not recoverable error, sometimes it could be something is not correctly closed and self shutdown is not successful; anyway the health check is set to inform the orchestrator it has to perform a forced shutdown.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@gytis-ivaskevicius what is the preferred behavior for unrecoverable errors: die or report unhealthy?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We discussed this in deep: we are working on health checks since some weeks ago.
The ws-server implements the health check logic as specified by SRE (two distinct endpoints one for readiness one for the health status).
We didn't specifically discuss the self shutdown option, anyway if the required action is a restart, making the server able to do it by itself (rather than waiting for the orchestrator to do that) sounds as an improvement...
For sure, any insights from @gytis-ivaskevicius will be appreciated.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if a restart may resolve the error - either liveliness probe should fail or it should exit with non 0 exit code. Service shutting down in this case is a better option since it gives a faster feedback loop

if the error can not be resolved by restarting - it would be better if liveliness probe would fail to reduce restarts and possibly keep other parts of application working

const isEventError = (error: unknown): error is { error: Error } =>
// eslint-disable-next-line @typescript-eslint/no-explicit-any
typeof error === 'object' && !!error && (error as any).error instanceof Error;

export const isTxRelevant = (
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also need to check certificates

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actually no. This is not a general purpose function, it is dedicated to ChainHistoryProvider.transactionsByAddresses.
This is meant to check transaction only by addresses as DbSyncChainHistoryProvider.transactionsByAddresses does.

Copy link
Member

@mkazlauskas mkazlauskas Sep 25, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If DbSyncChainHistoryProvider.transactionsByAddresses doesn't check the certificates then it's an edge case bug. You can make a transaction that has a certificate (e.g. delegation) without using any inputs/outputs of an associated address

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It could be, anyway fixing pre-existing bugs is OT for this PR.
The intent here is to replicate what the (DbSync|http)Providers do.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please log this bug for separate consideration @iccicci

@iccicci iccicci force-pushed the feat/web-socket-chain-history-provider branch from 8b0e7ac to 84ef892 Compare September 27, 2024 15:08
@iccicci iccicci changed the title Feat/web socket chain history provider LW-11609 Web socket ChainHistoryProvider Sep 30, 2024
Copy link
Member

@rhyslbw rhyslbw left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking good @iccicci. Minor CR (change request)

nix/cardano-services/deployments/default.nix Show resolved Hide resolved
Comment on lines +95 to +101
const result: Cardano.TxOut = { address: txOut.address, value: txOut.value };

if (txOut.datum) result.datum = txOut.datum;
if (txOut.datumHash) result.datumHash = txOut.datumHash;
if (txOut.scriptReference) result.scriptReference = txOut.scriptReference;

return result;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not this?

Suggested change
const result: Cardano.TxOut = { address: txOut.address, value: txOut.value };
if (txOut.datum) result.datum = txOut.datum;
if (txOut.datumHash) result.datumHash = txOut.datumHash;
if (txOut.scriptReference) result.scriptReference = txOut.scriptReference;
return result;
return { address: txOut.address, value: txOut.value, datum: txOut.datum, datumHash: txOut.datumHash, scriptReference: txout.scriptReference };

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd prefer the suggested form as well, but I had to chose for the used approach to make the output exactly equal to the DbSyncChainSyncProvider ones.

In case of an output without any additional data, the DbSyncChainSyncProvider output is:

{
  "address": "abc",
  "value", 10n
}

while the output of the preferred form would be:

{
  "address": "abc",
  "value", 10n,
  "datum": undefined,
  "datumHash": undefined,
  "scriptReference": undefined
}

I know there is no difference between the two outputs, but the comparison tests would need a lot of additional work to inspect each value rather just comparing the serialized form of the two outputs.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ill leave this to the team to decide, not my code, not my call

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The target here is to produce an output exactly equal to the DbSyncChainSyncProvider one to be sure the change has no impacts.
Refactoring the original Provider is out of the scope of this PR.

Comment on lines +28 to +31
bytes,
tx.hash AS tx_id
FROM ${collateral ? 'collateral_tx_out' : 'tx_out'} AS tx_out
LEFT JOIN datum ON datum.id = inline_datum_id
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
bytes,
tx.hash AS tx_id
FROM ${collateral ? 'collateral_tx_out' : 'tx_out'} AS tx_out
LEFT JOIN datum ON datum.id = inline_datum_id
datum.bytes,
tx.hash AS tx_id
FROM ${collateral ? 'collateral_tx_out' : 'tx_out'} AS tx_out
LEFT JOIN datum ON datum.id = inline_datum_id

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

bytes is not an ambiguous column (otherwise the query would fail): there is no need to specify the source table.
Specifying the source table when it's not required would only (slightly) increases the DB workload to parse the query.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's just a readability improvement. If it was up to me, i'd say queries with multiple tables should always have explicitly defined select clause.

Load change will not be noticeable at all

@@ -97,6 +98,8 @@ export interface ScriptModel {
bytes: Buffer;
hash: Buffer;
serialised_size: number;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
json: any;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure how its used but unknown type might be a better option

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

any can be used as an Object while unknown can't be.
We know db-sync provides the data as a JSON Object.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes, that is the point for type safety. I am not sure where json is used, but ideally it would be unknown to force developers to type check before using it

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Being the source of this data db-sync, we know it returns an Object.
Adding a check which we know it will never fail sounds to me as a resources waste both in implementing and in running it.


const loadTransactions = async () => {
const addressesMap = new Map<Cardano.PaymentAddress, true>();
for (const ws of this.wss.clients) for (const address of ws.addresses) addressesMap.set(address, true);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
for (const ws of this.wss.clients) for (const address of ws.addresses) addressesMap.set(address, true);
const addressesMap = this.wss.clients
.flatMap(it => it.addresses)
.reduce((result, it) => ( {...result, `${it}`: true}))

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The proposed version, maybe is a bit more readable, but would have a considerably higher CPU cost.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was wondering how well v8 optimizes these functions, I ran a few benchmarks:
image
And here is an even faster option:
image

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Interesting!
Would you mind to have a pairing session to perform some more tests?

Comment on lines +372 to +393
const compound = <
C1 extends Cardano.HydratedCertificate,
C2 extends Cardano.HydratedCertificate,
C3 extends Cardano.HydratedCertificate
>(
certs1: (readonly [number, C1])[],
certs2: (readonly [number, C2])[],
merge: (c1: C1, c2: C2) => C3
) => {
const result1: (readonly [number, C1])[] = [];
const result: (readonly [number, C3])[] = [];
const foundIndexes2: number[] = [];

for (const c1 of certs1) {
const c2index = certs2.findIndex((c2) => c1[0] === c2[0]);

if (c2index === -1) result1.push(c1);
else {
foundIndexes2.push(c2index);
result.push([c1[0], merge(c1[1], certs2[c2index][1])]);
}
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I feel like a couple of comments would be nice here, at least I have no idea what it does

};

// eslint-disable-next-line complexity, max-statements, sonarjs/cognitive-complexity
const mapCertificates = (tx: TxModel) => {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

😓

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The functions in this file is the code which will run for 99% of time.
I preferred to chose the approach which will require the lower CPU load as possible.

Comment on lines +549 to +554
const result: Cardano.TxOut = {
address: output.address,
value: { coins: BigInt(output.value) }
};

if (assets) result.value.assets = assets;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
const result: Cardano.TxOut = {
address: output.address,
value: { coins: BigInt(output.value) }
};
if (assets) result.value.assets = assets;
const result: Cardano.TxOut = {
address: output.address,
value: { coins: BigInt(output.value) },
assets: assets ? assets : undefined,
// any issues with this? is it null sometimes or something?
assets: assets,
};

building object this way would be more readable

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same as here.

values: [ids]
});

const rows = onlyUtxos
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

for utxo this probalby should be a separate funciton

Comment on lines +9 to +13
const { HD_ACTIVE_ADDR_COUNT, HD_MAX_TX_HISTORY, TARGET_NET, WALLETS } = Object.assign(
{ HD_ACTIVE_ADDR_COUNT: '10', HD_MAX_TX_HISTORY: '100', TARGET_NET: 'mainnet', WALLETS: '100' },
// eslint-disable-next-line no-undef
__ENV
);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
const { HD_ACTIVE_ADDR_COUNT, HD_MAX_TX_HISTORY, TARGET_NET, WALLETS } = Object.assign(
{ HD_ACTIVE_ADDR_COUNT: '10', HD_MAX_TX_HISTORY: '100', TARGET_NET: 'mainnet', WALLETS: '100' },
// eslint-disable-next-line no-undef
__ENV
);
const { HD_ACTIVE_ADDR_COUNT, HD_MAX_TX_HISTORY, TARGET_NET, WALLETS } =
{ HD_ACTIVE_ADDR_COUNT: '10', HD_MAX_TX_HISTORY: '100', TARGET_NET: 'mainnet', WALLETS: '100', ...__ENV};

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

K6 JavaScript environment doesn't support the proposed syntax. 😞

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants