@tuwaio/siwx-evm
v0.2.1
Published
Layer 2 (L2) of the TUWA Ecosystem. EVM adapter for @tuwaio/siwx. Signs and verifies CAIP-122 messages for eip155 chains via viem and wagmi.
Downloads
2,754
Maintainers
Readme
@tuwaio/siwx-evm
EVM adapter for
@tuwaio/siwx(L2). Signs and verifies CAIP-122 messages foreip155chains viaviem, including EIP-1271 smart contract wallet support.
🏛️ Core Capabilities
- EIP-191 Verification: Standard EOA (Externally Owned Account) signature verification using
viem'srecoverAddress. - EIP-1271 Verification: Smart contract wallet verification (
isValidSignature) via an on-chainreadContractcall using aviemPublicClient. - Extracts and normalizes EVM addresses from CAIP-10 strings.
💾 Installation
pnpm add @tuwaio/siwx-evm @tuwaio/siwx-core viem @wagmi/core🚀 API & Module Architecture
createEvmSiwxSigner(target, account?)
Creates a standard SIWX signer callback for EVM chains. Automatically adapts to either a Wagmi Config or a Viem WalletClient.
import { createEvmSiwxSigner } from '@tuwaio/siwx-evm';
const signer = createEvmSiwxSigner(walletClient);
const signature = await signer('Message to sign');verifyEvmSignature(message, signature, options?): Promise<EvmVerifyResult>
Universal EVM signature verifier for CAIP-122 messages. Tries EIP-191 (EOA ecrecover) first; if that fails and options.publicClient is provided, automatically attempts EIP-1271 (isValidSignature) on-chain verification.
import { verifyEvmSignature } from '@tuwaio/siwx-evm';
const result = await verifyEvmSignature(rawMessage, '0xsignature...', { publicClient });
if (result.success) {
console.log(`Verified via ${result.method}. Address:`, result.data?.address);
}verifyEip191(message, signature, options?): Promise<EvmVerifyResult>
Verifies a standard EOA wallet signature. Recovers the signer address and compares it to the CAIP-10 address embedded in the message. Accepts optional options?: EvmVerifyOptions (e.g. { skipExpiration?: boolean }).
import { verifyEip191 } from '@tuwaio/siwx-evm';
const result = await verifyEip191(rawMessage, '0xsignature...');
if (result.success) {
console.log('Verified via EIP-191. Address:', result.data?.address);
}verifyEip1271(message, signature, options): Promise<EvmVerifyResult>
Verifies a smart contract wallet signature (Safe, Argent, Gnosis, etc.) by calling isValidSignature on-chain. Requires a viem PublicClient passed via options.publicClient. Accepts optional { skipExpiration?: boolean }.
import { verifyEip1271 } from '@tuwaio/siwx-evm';
import { createPublicClient, http } from 'viem';
import { mainnet } from 'viem/chains';
const publicClient = createPublicClient({ chain: mainnet, transport: http() });
const result = await verifyEip1271(rawMessage, '0xsignature...', { publicClient });
if (result.success) {
console.log('Verified via EIP-1271 (contract wallet)');
}Peer Dependencies
| Package | Version |
| ------------------- | ------------- |
| @tuwaio/siwx-core | workspace:* |
| viem | ^2.0.0 |
| @wagmi/core | ^3.0.0 |
📄 License
Licensed under the Apache-2.0 License. See the LICENSE file for details.
