Repository navigation
v0.18.0 — hashed identities, alloy 2
Breaking: identities are keyed by circuit-proved SHA-256 nodes, never plaintext. This is a fresh deployment: new canonical names, and the deterministic factory moves with OpenZeppelin v5.7.0.
Hashed identities (#87, #100, #101)
idNode = SHA256("libid.<p>.user-id" || id),handleNode = SHA256("libid.<p>.handle" || fold(handle)); the fold is A-Z to a-z only. The registry stores nodes; no per-platform handle rules remain.- X and GitHub prove under one
bearer-linkcircuit with 16 public inputs; the Platform Verifier supplies each platform's tags. Pinned to libid-circuits v0.7.1; each verifier requires its circuit's code hash (WrongCircuit). bind(platformId, version, payload, handle)discloses a handle beside the payload, checked against the proved node (HandleNotProved) and logged asHandlePublished;bindPrivatelydiscloses nothing.publish/unpublishdisclose later or withdraw.HandleEscrow:deposit(platformId, handleNode, …)anddepositToHandle(platformId, handle, …)(logsDepositedToHandle).acceptsBindingsrevertsUnknownPlatformfor a platform no profile names.- Rust:
libid_identity::platforms(platform table,HandleError,IdError); test vectors behind thetest-helpersfeature. Bindings bind the compiled ABIs. TS:@libid/contracts/platformsloads without viem (#103).
Dependencies
- alloy 2.5.0 (#104):
Providerand the contract bindings are alloy 2 types; consumers move to alloy 2 with this release. - OpenZeppelin v5.7.0, forge-std v1.17.0, Foundry v1.8.5 (#97); advisory bumps and the configure-aws-credentials v6 action (#98).
CI (#94, #102, #83): Dependabot no longer bumps submodules and waits 14 days for releases; the forge cache restores only an exact tree and release jobs build uncached; each network deploys with its own key.
Consumers that must move: libid-rs, keeper, notary, usernames-indexer, chain-configurations (alloy 2, platforms module, node-keyed registry); libID's browser prover (bearer-link).