Skip to content

RPC Protocol

Sigilry uses JSON-RPC 2.0 for dApp to wallet communication. Methods and schemas are defined in OpenRPC and validated with Zod at runtime.

// Request
{
jsonrpc: '2.0',
id: 'request-id',
method: 'status',
params: undefined,
}
// Success response
{
jsonrpc: '2.0',
id: 'request-id',
result: { /* method result */ },
}
// Error response
{
jsonrpc: '2.0',
id: 'request-id',
error: { code: -32601, message: 'Method not found' },
}
MethodParamsResult
statusnoneStatusEvent
connectnoneStatusEvent
disconnectnonenull
getActiveNetworknoneNetwork
listAccountsnoneWallet[]
getPrimaryAccountnoneWallet
prepareExecuteJsPrepareSubmissionRequestnull
prepareExecuteAndWaitJsPrepareSubmissionRequest{ tx: TxChangedExecutedEvent }
signMessage{ message: string }{ signature: string }
ledgerApiLedgerApiRequest{ response: string }

Event methods are defined in the OpenRPC spec but delivered as provider events:

  • accountsChanged
  • txChanged

@sigilry/dapp exposes common error codes via RpcErrorCode and helpers like rpcError.

import { RpcClientError } from "@sigilry/dapp";
async function getStatus() {
try {
return await window.canton.request({ method: "status" });
} catch (err) {
const parsed = RpcClientError.fromError(err);
console.error(parsed.code, parsed.message);
throw parsed;
}
}
getStatus();

createCantonServer validates params using Zod schemas generated from OpenRPC. Invalid params return RpcErrorCode.INVALID_PARAMS with a concise error message.