Validate, resolve, paths
validateDescriptor
Section titled “validateDescriptor”Validates against the official ERC-7730 JSON Schema (v1 and v2). Returns { ok, descriptor, version } or { ok: false, errors } — it does not throw. Version comes from $schema (erc7730-v1 / erc7730-v2); if omitted, v2 is tried then v1.
validateDescriptorTests validates registry testsv2 files.
resolveDescriptor
Section titled “resolveDescriptor”import { resolveDescriptor, createMemoryIncludeLoader } from '@erc7730/sdk';
const resolved = await resolveDescriptor(input, loader);// { version, hash, input, merged, deployments }- Merges
includes, inlines field$refunder$.display.definitions, lowercases binding addresses. descriptorHashis keccak256 of sorted-key JSON with checksum addresses lowercased.- Enum
params.$refis kept; format keys stay ABI fragments / EIP-712encodeTypestrings (not converted to 4-byte selectors at resolve time). - Fields merge by
path(EIP overlay). Inject anIncludeLoader(createMemoryIncludeLoaderis public).
Known differences vs Ledger python-erc7730 resolve: divergences.
Path engine
Section titled “Path engine”resolvePath(path, ctx) reads:
| Root | Meaning |
|---|---|
#. |
Decoded args or EIP-712 message |
$. |
Merged descriptor |
@. |
Envelope: from / to / value / chainId only |
Rootless paths are #. unless ctx.base is set for nested tokenPath / collectionPath. Missing paths throw PathResolveError (not_found / invalid / missing_data).