Skip to main content
Run VisualSign as a standalone gRPC service without AWS Nitro Enclave infrastructure. This provides the same parsing functionality and API without attestation.

When to use the gRPC server

The standalone gRPC server is appropriate for:
  • Development and testing environments
  • Internal services on trusted networks
  • Environments where TEE isn’t available or required
  • Prototyping before moving to TEE

Security considerations

Without TEE, there’s no cryptographic proof of parsing integrity. Only use this deployment model when you trust the network and host.
The standalone server model assumes:
  • The host running the parser is trusted
  • Network communication is secured (TLS, VPC, etc.)
  • You don’t need to prove parsing integrity to external parties

Running locally

The server binary is a single-process gRPC server that calls the parser directly, without the socket-based architecture used in TEE deployments.
The parser will be available at localhost:44020.

Configuration

Set the EPHEMERAL_FILE environment variable to specify a custom signing key:
For development, the binary defaults to integration/fixtures/ephemeral.secret.

ABI trust posture

Whether caller-supplied Ethereum abi_mappings are honoured when they carry no signature is chosen at startup, not per request. We recommend passing exactly one of these flags explicitly, rather than relying on the default described below:
With no flag, this binary defaults to --accept-unsigned-abis and prints a notice at startup. That default exists because the standalone server has no attestation and no signed deployment manifest to audit the posture against, so there is nothing to be gained by refusing to start. It does mean a deployment that passes no flag honours unsigned ABI mappings from any caller. The enclave binary (parser_app) has no such default and refuses to start without an explicit posture. If you self-host, state the flag explicitly so the choice is recorded in your deployment config rather than inherited from a default.
A dropped mapping is not an error: the transaction still parses and the affected call renders as raw calldata, and nothing in the response distinguishes it from a request that supplied no mappings.

Building a Docker image

The server binary can be containerized as a single static binary:
Build and run:
For production, generate your own ephemeral key file rather than using the test fixture.

Kubernetes deployment

Using the gRPC API

The API is identical to TEE deployments, minus attestation:

Alternative: Multi-process mode

For development, you can also run the full multi-process setup that mirrors the TEE architecture:
This starts three processes (parser_host, simulator_enclave, parser_app) communicating over Unix sockets. The single-process server binary is simpler for most use cases.

Migrating to TEE

The gRPC server uses the same API as TEE deployments. To migrate:
  1. Deploy TEE infrastructure (self-hosted or use Turnkey)
  2. Update your client to point to the TEE endpoint
  3. Add attestation verification to your client
No changes to request/response handling are required.

Health checks

The server implements the standard gRPC health checking protocol:
Response:
You can also list all available services:

Next steps