Repository navigation
Releases: libid-org/libID-contracts
Release list
v0.22.0
v0.21.0
What's Changed
- refactor(escrow): name Contribution's fields; advance anvil's clock typed by @xgreenx in #118
- feat(escrow)!: refunds open 30 days after the sender's last deposit by @SupremaLex in #106
- chore(release): v0.21.0 by @xgreenx in #119
Full Changelog: v0.20.0...v0.21.0
v0.20.0
NotaryService fees now go to a fee recipient the owner sets, and anyone can move them there. The storage change is an append, so 0.20 deploys as an upgrade of the 0.19 NotaryService.
Breaking
NotaryService.withdraw(to, amount)is removed (#116).
Added
setFeeRecipient(address)(owner, nonzero, emitsFeeRecipientSet) andfeeRecipient()(#116).sweep(): permissionless, sends the whole balance to the fee recipient and emitsFeesWithdrawn; revertsFeeRecipientUnsetwhile none is set (#116).
Upgrading
- After
upgradeToAndCall, the recipient is unset until the owner callssetFeeRecipient.
v0.19.0
One ceremony proof now binds on every EVM chain, and each wallet has one primary handle across platforms. Both change the registry's call shapes and its storage, so 0.19 deploys as a fresh stack, not an upgrade.
Breaking
- Authorization Digest commits no chain id:
CeremonyAuthorization.digest(operationDomain, version, nonce, transactionData);CeremonyProofVerifier.chainId()is removed (#110). - IdentityRegistry transaction data is exactly
abi.encode(target)underkeccak256("libid.bind-identity"); the service fee moves to call arguments (#110). - Calls:
bind(platformId, verifierVersion, payload, handle, primary, feeAmount, feeReceiver),bindPrivately(platformId, verifierVersion, payload, feeAmount, feeReceiver),reveal(platformId, handle),unpublish(),primaryHandleOf(holder)replacespublishedHandleOf(#110, #111). - Events:
HandlePublished(holder, platformId, handleNode)carries no text;HandleUnpublished(holder);HandleRevealed(platformId, handleNode, handle)from the registry and the escrow replacesDepositedToHandle(#111).
Added
- Rust
testingfeature shipsStubPlatformVerifierfor downstream test suites (#109).
Internal
- CI keys the forge cache on submodule pins (#112).
v0.18.1
handleNode, idNode and foldedHandleNode move into @libid/contracts/platforms, which loads without viem (#107), so a browser bundle derives identity nodes without viem. Same names, errors and lowercase 0x output; @libid/contracts/identity still exports them.
Changes
- TS: node derivation on
@noble/hashes(^1.8.0 || ^2.0.0, the range viem and browser bundles already resolve);identity/node.tsremoved. - Rust and Solidity: unchanged; the crates publish at 0.18.1 with the same code.
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).
v0.17.0
One factory per environment: the factory's genesis admin is a parameter, so each deployer key (testnet in libid-testnet, mainnet in libid-mainnet) gets its own factory address and its own canonical address table.
- Solidity:
FactoryGenesis.solremoved;FactoryDeployer.proxyInitCode(admin),predictFactoryAddress(admin),proxyDeployCalldata(admin). - Rust (breaking):
FactoryGenesis { admin }withproxy_init_code,address,ensurereplacesFACTORY_GENESIS_ADMIN,factory_proxy_init_code,predict_factory_address,ensure_factory. - Factory and proxy bytecode unchanged.
What's Changed
- feat(factory): the genesis admin is a parameter, one factory per environment by @xgreenx in #80
- chore: release v0.17.0 by @xgreenx in #81
Full Changelog: v0.16.0...v0.17.0
v0.16.0
Carries the Honk verifiers of libid-circuits v0.6.0, built by nargo 1.0.0-rc.3 and bb 6.0.0-rc.2.
In this release
- #78: both circuit verifiers (
BearerLinkHonkVerifier,OidcGoogleHonkVerifier) come from libid-circuits v0.6.0. Both verification keys and both verifier code hashes change; proof sizes, public inputs and the platform verifiers' interfaces do not. The five real-proof fixtures are proofs under the new keys; verify gas under Osaka: bearer-link 720,457, oidc-google 755,087. - #79:
libid-contracts,libid-identity,libid-profilesand@libid/contractsat 0.16.0.
Deploying: a stack on 0.15.x rotates its circuit verifiers to follow this release: a new libid.circuits.<circuit>.0.6.0 deployment per circuit and setTrustRoots on each platform verifier. Proxies and registrations stay. Provers must move to the v0.6.0 circuits with @noir-lang/* 1.0.0-rc.3 and @aztec-foundation/bb.js 6.0.0-rc.2 at the same time.
Full Changelog: v0.15.1...v0.16.0
v0.15.1
What's Changed
- ci: track the gas cost of claim verification by @xgreenx in #68
- fix(ts): make viem an optional peer of @libid/contracts by @Wondertan in #76
- chore: release v0.15.1 by @Wondertan in #77
Full Changelog: v0.15.0...v0.15.1