{"id":42982797,"url":"https://github.com/wevm/unver","last_synced_at":"2026-01-31T02:06:54.287Z","repository":{"id":313182570,"uuid":"1050361828","full_name":"wevm/unver","owner":"wevm","description":"Universal Signature Verification for ethers.js","archived":false,"fork":false,"pushed_at":"2025-09-04T10:43:03.000Z","size":24,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-04T12:26:51.103Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wevm.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["wevm"],"custom":["drips.network/wevm.eth"]}},"created_at":"2025-09-04T10:21:37.000Z","updated_at":"2025-09-04T10:43:07.000Z","dependencies_parsed_at":"2025-09-04T12:26:52.502Z","dependency_job_id":"d41f5d2c-d44a-4288-8ad1-ea2fc10882b8","html_url":"https://github.com/wevm/unver","commit_stats":null,"previous_names":["wevm/unver"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/wevm/unver","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wevm%2Funver","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wevm%2Funver/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wevm%2Funver/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wevm%2Funver/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wevm","download_url":"https://codeload.github.com/wevm/unver/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wevm%2Funver/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28926633,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-30T22:32:35.345Z","status":"online","status_checked_at":"2026-01-31T02:00:09.179Z","response_time":128,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-31T02:06:53.778Z","updated_at":"2026-01-31T02:06:54.277Z","avatar_url":"https://github.com/wevm.png","language":"TypeScript","funding_links":["https://github.com/sponsors/wevm","drips.network/wevm.eth","https://github.com/sponsors/wevm?metadata_campaign=docs_support"],"categories":[],"sub_categories":[],"readme":"# unver\n\nUniversal Signature Verification for [ethers.js](https://github.com/ethers-io/ethers.js), with support for:\n- Externally Owned Accounts\n- Contract Accounts via [ERC-1271](https://eips.ethereum.org/EIPS/eip-1271)\n- Predeployed Contract Accounts via [ERC-6492](https://eips.ethereum.org/EIPS/eip-6492)\n- Predelegated Contract Accounts via [ERC-8010](https://github.com/jxom/ERCs/blob/799f618e1f9b7ad1dcdf3ccc46b9b7a9309c086f/ERCS/erc-8010.md)\n\n## Table of Contents\n\n- [Install](#install)\n- [Usage](#usage)\n- [API Reference](#api-reference)\n  - [`UnverProvider.wrap`](#unverproviderwrap)\n  - [`Signature.verifyHash`](#signatureverifyhash)\n  - [`Signature.verifyMessage`](#signatureverifymessage)\n  - [`Signature.verifyTypedData`](#signatureverifytypeddata)\n- [Development](#development)\n- [Community](#community)\n- [Support](#support)\n\n## Install\n\n```bash\nnpm i unver\n```\n\n## Usage\n\n```ts\nimport * as ethers from 'ethers'\nimport { UnverProvider } from 'unver'\n\nconst provider = UnverProvider.wrap(\n  new ethers.JsonRpcProvider('https://eth.merkle.io')\n)\n\nconst address = '0x...'\nconst digest = '0x...'\nconst signature = '0x...'\n\nconst valid = await provider.verifyHash(address, digest, signature)\n```\n\n## API Reference\n\n### `UnverProvider.wrap`\n\nWraps an `ethers.AbstractProvider` with the `UnverProvider` interface.\n\n```ts\nconst provider = UnverProvider.wrap(\n  new ethers.JsonRpcProvider('https://eth.merkle.io')\n)\n```\n\n#### Interface\n\n```ts\ndeclare function wrap(provider: ethers.AbstractProvider): \n  Provider\u003cethers.AbstractProvider \u0026 UnverProvider\u003e \n```\n\n### `Signature.verifyHash`\n\nVerifies a `signature` for a given `address` and `digest`.\n\n```ts\nconst address = '0x...'\nconst digest = '0x...'\nconst signature = '0x...'\n\n// Provider usage\nconst valid = await provider.verifyHash(address, digest, signature)\n\n// Function usage\nimport { Signature } from 'unver'\nconst valid = await Signature.verifyHash(provider, address, digest, signature)\n```\n\n#### Interface\n\n```ts\ndeclare function verifyHash(\n  provider: ethers.AbstractProvider,\n  address: string,\n  digest: Uint8Array | string,\n  signature: ethers.SignatureLike,\n): Promise\u003cboolean\u003e\n```\n\n### `Signature.verifyMessage`\n\nVerifies a `signature` for a given `address` and `message`.\n\n```ts\nconst address = '0x...'\nconst message = 'hello world'\nconst signature = '0x...'\n\n// Provider usage\nconst valid = await provider.verifyMessage(address, message, signature)\n\n// Function usage\nimport { Signature } from 'unver'\nconst valid = await Signature.verifyMessage(provider, address, message, signature)\n```\n\n#### Interface\n\n```ts\ndeclare function verifyMessage(\n  provider: ethers.AbstractProvider,\n  address: string,\n  message: Uint8Array | string,\n  signature: ethers.SignatureLike,\n): Promise\u003cboolean\u003e\n```\n\n### `Signature.verifyTypedData`\n\nVerifies a `signature` for a given `address` and `typedData`.\n\n```ts\nconst address = '0x...'\nconst domain = {\n  name: 'My App',\n  version: '1.0.0',\n  chainId: 1,\n  verifyingContract: '0x...'\n}\nconst types = {\n  Person: [\n    { name: 'name', type: 'string' },\n    { name: 'age', type: 'uint256' },\n  ],\n}\nconst value = {\n  name: 'John Doe',\n  age: 20,\n}\nconst signature = '0x...'\n\n// Provider usage\nconst valid = await provider.verifyTypedData(address, domain, types, value, signature)\n\n// Function usage\nimport { Signature } from 'unver'\nconst valid = await Signature.verifyTypedData(provider, address, domain, types, value, signature)\n```\n\n#### Interface\n\n```ts\ndeclare function verifyTypedData(\n  provider: ethers.AbstractProvider,\n  address: string,\n  domain: ethers.TypedDataDomain,\n  types: Record\u003cstring, Array\u003cethers.TypedDataField\u003e\u003e,\n  value: Record\u003cstring, unknown\u003e,\n  signature: ethers.SignatureLike,\n): Promise\u003cboolean\u003e\n```\n\n## Development\n\n```bash\nbun install  # Install dependencies\nbun test     # Run tests\n```\n\n## Community\n\nCheck out the following places for more content:\n\n- Follow [@wevm_dev](https://x.com/wevm_dev), [@jxom](https://x.com/_jxom), and [@awkweb](https://x.com/awkweb) on Twitter for project updates\n\n## Support\n\n- [GitHub Sponsors](https://github.com/sponsors/wevm?metadata_campaign=docs_support)\n- [Gitcoin Grant](https://wagmi.sh/gitcoin)\n- [wevm.eth](https://etherscan.io/enslookup-search?search=wevm.eth)\n \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwevm%2Funver","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwevm%2Funver","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwevm%2Funver/lists"}