Universal Signature Verification for ethers.js, with support for:
- Externally Owned Accounts
- Contract Accounts via ERC-1271
- Predeployed Contract Accounts via ERC-6492
- Predelegated Contract Accounts via ERC-8010
npm i unver
import * as ethers from 'ethers'
import { UnverProvider } from 'unver'
const provider = UnverProvider.wrap(
new ethers.JsonRpcProvider('https://eth.merkle.io')
)
const address = '0x...'
const digest = '0x...'
const signature = '0x...'
const valid = await provider.verifyHash(address, digest, signature)
Wraps an ethers.AbstractProvider
with the UnverProvider
interface.
const provider = UnverProvider.wrap(
new ethers.JsonRpcProvider('https://eth.merkle.io')
)
declare function wrap(provider: ethers.AbstractProvider):
Provider<ethers.AbstractProvider & UnverProvider>
Verifies a signature
for a given address
and digest
.
const address = '0x...'
const digest = '0x...'
const signature = '0x...'
// Provider usage
const valid = await provider.verifyHash(address, digest, signature)
// Function usage
import { Signature } from 'unver'
const valid = await Signature.verifyHash(provider, address, digest, signature)
declare function verifyHash(
provider: ethers.AbstractProvider,
address: string,
digest: Uint8Array | string,
signature: ethers.SignatureLike,
): Promise<boolean>
Verifies a signature
for a given address
and message
.
const address = '0x...'
const message = 'hello world'
const signature = '0x...'
// Provider usage
const valid = await provider.verifyMessage(address, message, signature)
// Function usage
import { Signature } from 'unver'
const valid = await Signature.verifyMessage(provider, address, message, signature)
declare function verifyMessage(
provider: ethers.AbstractProvider,
address: string,
message: Uint8Array | string,
signature: ethers.SignatureLike,
): Promise<boolean>
Verifies a signature
for a given address
and typedData
.
const address = '0x...'
const domain = {
name: 'My App',
version: '1.0.0',
chainId: 1,
verifyingContract: '0x...'
}
const types = {
Person: [
{ name: 'name', type: 'string' },
{ name: 'age', type: 'uint256' },
],
}
const value = {
name: 'John Doe',
age: 20,
}
const signature = '0x...'
// Provider usage
const valid = await provider.verifyTypedData(address, domain, types, value, signature)
// Function usage
import { Signature } from 'unver'
const valid = await Signature.verifyTypedData(provider, address, domain, types, value, signature)
declare function verifyTypedData(
provider: ethers.AbstractProvider,
address: string,
domain: ethers.TypedDataDomain,
types: Record<string, Array<ethers.TypedDataField>>,
value: Record<string, unknown>,
signature: ethers.SignatureLike,
): Promise<boolean>
bun install # Install dependencies
bun test # Run tests
Check out the following places for more content: