Skip to content

Releases: libid-org/libID-contracts

v0.22.0

Choose a tag to compare

@xgreenx xgreenx released this 30 Oct 15:54
b80440f

What's Changed

Full Changelog: v0.21.0...v0.22.0

v0.21.0

Choose a tag to compare

@xgreenx xgreenx released this 26 Oct 21:39
7d6b397

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

Choose a tag to compare

@xgreenx xgreenx released this 26 Oct 20:11
bbb7f8b

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, emits FeeRecipientSet) and feeRecipient() (#116).
  • sweep(): permissionless, sends the whole balance to the fee recipient and emits FeesWithdrawn; reverts FeeRecipientUnset while none is set (#116).

Upgrading

  • After upgradeToAndCall, the recipient is unset until the owner calls setFeeRecipient.

v0.19.0

Choose a tag to compare

@xgreenx xgreenx released this 21 Oct 16:16
70300ac

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) under keccak256("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) replaces publishedHandleOf (#110, #111).
  • Events: HandlePublished(holder, platformId, handleNode) carries no text; HandleUnpublished(holder); HandleRevealed(platformId, handleNode, handle) from the registry and the escrow replaces DepositedToHandle (#111).

Added

  • Rust testing feature ships StubPlatformVerifier for downstream test suites (#109).

Internal

  • CI keys the forge cache on submodule pins (#112).

v0.18.1

Choose a tag to compare

@xgreenx xgreenx released this 19 Oct 18:19
aecc275

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.ts removed.
  • Rust and Solidity: unchanged; the crates publish at 0.18.1 with the same code.

v0.18.0 — hashed identities, alloy 2

Choose a tag to compare

@xgreenx xgreenx released this 17 Oct 14:43
6974c9b

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-link circuit 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 as HandlePublished; bindPrivately discloses nothing. publish / unpublish disclose later or withdraw.
  • HandleEscrow: deposit(platformId, handleNode, …) and depositToHandle(platformId, handle, …) (logs DepositedToHandle). acceptsBindings reverts UnknownPlatform for a platform no profile names.
  • Rust: libid_identity::platforms (platform table, HandleError, IdError); test vectors behind the test-helpers feature. Bindings bind the compiled ABIs. TS: @libid/contracts/platforms loads without viem (#103).

Dependencies

  • alloy 2.5.0 (#104): Provider and 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

Choose a tag to compare

@xgreenx xgreenx released this 04 Oct 00:54
4c0cbb1

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.sol removed; FactoryDeployer.proxyInitCode(admin), predictFactoryAddress(admin), proxyDeployCalldata(admin).
  • Rust (breaking): FactoryGenesis { admin } with proxy_init_code, address, ensure replaces FACTORY_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

Choose a tag to compare

@xgreenx xgreenx released this 03 Oct 14:45
c849b35

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-profiles and @libid/contracts at 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

Choose a tag to compare

@Wondertan Wondertan released this 02 Oct 18:33
cc0801d

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

v0.15.0

Choose a tag to compare

@xgreenx xgreenx released this 01 Oct 00:39
6538c48

What's Changed

  • feat(ceremony)!: the profile version fixes each validity window by @xgreenx in #70
  • refactor!: one naming dictionary; IdentityNames becomes IdentityRegistry by @xgreenx in #71
  • chore: release v0.15.0 by @xgreenx in #75

Full Changelog: v0.14.0...v0.15.0