Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .github/workflows/test-suite-e2e-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,13 @@ jobs:
run: |
./fhevm-cli test random-subset
- name: Host listener poller test
working-directory: test-suite/fhevm
run: |
docker stop coprocessor-host-listener
./fhevm-cli test erc20
docker start coprocessor-host-listener
- name: Show logs on test failure
working-directory: test-suite/fhevm
if: always()
Expand Down
2 changes: 1 addition & 1 deletion charts/coprocessor/Chart.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name: coprocessor
description: A helm chart to distribute and deploy Zama fhevm Co-Processor services
version: 0.7.6
version: 0.7.7
apiVersion: v2
keywords:
- fhevm
Expand Down
7 changes: 6 additions & 1 deletion charts/coprocessor/templates/_helpers.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,11 @@
{{- default $hostListenerNameDefault .Values.hostListener.nameOverride | trunc 63 | trimSuffix "-" -}}
{{- end -}}

{{- define "hostListenerPollerName" -}}
{{- $hostListenerPollerNameDefault := printf "%s-%s" .Release.Name "host-listener-poller" }}
{{- default $hostListenerPollerNameDefault .Values.hostListenerPoller.nameOverride | trunc 63 | trimSuffix "-" -}}
{{- end -}}

{{- define "txSenderName" -}}
{{- $txSenderNameDefault := printf "%s-%s" .Release.Name "tx-sender" }}
{{- default $txSenderNameDefault .Values.txSender.nameOverride | trunc 63 | trimSuffix "-" -}}
Expand All @@ -26,4 +31,4 @@
{{- define "snsWorkerName" -}}
{{- $snsWorkerNameDefault := printf "%s-%s" .Release.Name "sns-worker" }}
{{- default $snsWorkerNameDefault .Values.zkProofWorker.nameOverride | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{- end -}}
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
{{- if .Values.hostListenerPoller.enabled -}}
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: coprocessor-host-listener-poller
app.kubernetes.io/name: {{ include "hostListenerPollerName" . }}
name: {{ include "hostListenerPollerName" . }}
spec:
replicas: {{ .Values.hostListenerPoller.replicas }}
selector:
matchLabels:
app: coprocessor-host-listener-poller
{{- if .Values.hostListenerPoller.updateStrategy }}
strategy:
{{- toYaml .Values.hostListenerPoller.updateStrategy | nindent 4 }}
{{- end }}
template:
metadata:
labels:
app: coprocessor-host-listener-poller
app.kubernetes.io/name: {{ include "hostListenerPollerName" . }}
{{- with .Values.podLabels }}
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.podAnnotations }}
annotations:
{{- toYaml . | nindent 8 }}
{{- end }}
spec:
imagePullSecrets:
- name: registry-credentials
restartPolicy: Always
{{- if and .Values.hostListenerPoller.affinity .Values.hostListenerPoller.affinity.enabled }}
affinity:
{{ toYaml (omit .Values.hostListenerPoller.affinity "enabled") | indent 8 }}
{{- end }}
{{- if and .Values.hostListenerPoller.tolerations .Values.hostListenerPoller.tolerations.enabled }}
tolerations:
{{ toYaml .Values.hostListenerPoller.tolerations.items | indent 8 }}
{{- end }}
{{- if .Values.hostListenerPoller.serviceAccountName }}
serviceAccountName: {{ .Values.hostListenerPoller.serviceAccountName }}
{{- end }}
containers:
- name: coprocessor-host-listener-poller
image: {{ .Values.hostListenerPoller.image.name }}:{{ .Values.hostListenerPoller.image.tag }}
command: ["host_listener_poller"]
args:
{{ toYaml .Values.hostListenerPoller.args | nindent 12 }}
env:
{{ toYaml .Values.hostListenerPoller.env | nindent 12 }}
ports:
{{- range $portName, $portValue := .Values.hostListenerPoller.ports }}
- name: {{ $portName }}
containerPort: {{ $portValue }}
protocol: TCP
{{- end }}
resources:
requests:
cpu: {{ .Values.hostListenerPoller.resources.requests.cpu | default "100m" }}
memory: {{ .Values.hostListenerPoller.resources.requests.memory | default "256Mi" }}
limits:
cpu: {{ .Values.hostListenerPoller.resources.limits.cpu | default "500m" }}
memory: {{ .Values.hostListenerPoller.resources.limits.memory | default "512Mi" }}
{{- if and .Values.hostListenerPoller.probes .Values.hostListenerPoller.probes.liveness.enabled }}
livenessProbe:
{{ toYaml (omit .Values.hostListenerPoller.probes.liveness "enabled") | nindent 12 }}
{{- end }}
{{- if and .Values.hostListenerPoller.probes .Values.hostListenerPoller.probes.readiness.enabled }}
readinessProbe:
{{ toYaml (omit .Values.hostListenerPoller.probes.readiness "enabled") | nindent 12 }}
{{- end }}
{{- end -}}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{{- if .Values.hostListenerPoller.serviceMonitor.enabled -}}
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
labels:
app: coprocessor-host-listener-poller
app.kubernetes.io/name: {{ include "hostListenerPollerName" . }}
name: {{ include "hostListenerPollerName" . }}
spec:
selector:
matchLabels:
app: coprocessor-host-listener-poller
app.kubernetes.io/name: {{ include "hostListenerPollerName" . }}
endpoints:
- port: metrics
{{- end -}}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{{- if .Values.hostListenerPoller.enabled }}
apiVersion: v1
kind: Service
metadata:
labels:
app: coprocessor-host-listener-poller
app.kubernetes.io/name: {{ include "hostListenerPollerName" . }}
name: {{ include "hostListenerPollerName" . }}
spec:
ports:
- name: metrics
port: {{ .Values.hostListenerPoller.ports.metrics }}
targetPort: metrics
- name: healthcheck
port: {{ .Values.hostListenerPoller.ports.healthcheck }}
targetPort: healthcheck
selector:
app: coprocessor-host-listener-poller
app.kubernetes.io/name: {{ include "hostListenerPollerName" . }}
type: ClusterIP
{{- end }}
100 changes: 100 additions & 0 deletions charts/coprocessor/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,106 @@ hostListener:
maxSurge: 1
maxUnavailable: 0

# -----------------------------------------------------------------------------
# Host Listener Poller
# -----------------------------------------------------------------------------
# Processes blockchain events from the host chain
hostListenerPoller:
enabled: false
nameOverride:

image:
name: ghcr.io/zama-ai/fhevm-coprocessor
tag: v0.10.0

replicas: 1

# Environment variables
env:
- name: DATABASE_URL
valueFrom:
secretKeyRef:
name: coprocessor-db-url
key: coprocessor-db-url
- name: TENANT_API_KEY
valueFrom:
secretKeyRef:
name: coprocessor-api-key
key: coprocessor-api-key

# Command line arguments for the host listener poller
args:
### Required parameters
- --database-url=$(DATABASE_URL)
- --coprocessor-api-key=$(TENANT_API_KEY)
- --url=$(ETHEREUM_RPC_HTTP_URL)
- --acl-contract-address=$(ACL_CONTRACT_ADDRESS)
- --tfhe-contract-address=$(FHEVM_EXECUTOR_CONTRACT_ADDRESS)

### Polling and block processing parameters
- --finality-lag=3
- --batch-size=100 # Maximum number of blocks to process per iteration
- --poll-interval-ms=6000 # Sleep duration between iterations in milliseconds (half block time ~6s for Ethereum)
- --retry-interval-ms=1000 # Backoff between retry attempts for RPC/DB failures in milliseconds
- --max-http-retries=45 # Maximum number of HTTP/RPC retry attempts before failing an operation
- --rpc-compute-units-per-second=1000 # Rate limiting budget for RPC calls during block catchup (compute units per second)

### Observability parameters
- --log-level=INFO
- --health-port=8080
- --service-name=host-listener-poller

### Prometheus metrics
- --metrics-addr=0.0.0.0:9100 # Address for Prometheus metrics HTTP server

# Service ports configuration
ports:
metrics: 9100
healthcheck: 8080

serviceMonitor:
enabled: false

serviceAccountName:

resources:
requests:
cpu: 100m
memory: 256Mi
limits:
cpu: 500m
memory: 512Mi

# Health check probes
probes:
liveness:
enabled: false
httpGet:
path: /liveness
port: healthcheck
initialDelaySeconds: 10
periodSeconds: 10
readiness:
enabled: false
httpGet:
path: /healthz
port: healthcheck
initialDelaySeconds: 5
periodSeconds: 10

affinity:
enabled: false

tolerations:
enabled: false
items: []

updateStrategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0

# -----------------------------------------------------------------------------
# Gateway Listener
# -----------------------------------------------------------------------------
Expand Down
Loading
Loading