@sea-pay/erc3009
v0.1.0
Published
TypeScript utilities for ERC-3009 (Transfer With Authorization) EIP-712 signing
Maintainers
Readme
@sea-pay/erc3009
TypeScript utilities for ERC-3009 (Transfer With Authorization) EIP-712 signing.
Installation
npm install @sea-pay/erc3009
# or
pnpm add @sea-pay/erc3009
# or
yarn add @sea-pay/erc3009Usage
Basic Example
import { Wallet } from "ethers";
import {
buildTypedData,
buildTypes,
message_5_minutes,
signTransferWithAuthorization,
type EIP712Domain,
type TransferWithAuthorization,
} from "@sea-pay/erc3009";
// Create a wallet
const wallet = new Wallet("0x...");
// Define the token domain (EIP-712 domain)
const domain: EIP712Domain = {
name: "USD Coin",
version: "2",
chainId: 84532, // Base Sepolia
verifyingContract: "0x036CbD53842c5426634e7929541eC2318f3dCF7e",
};
// Create a transfer authorization message
const message = message_5_minutes(
wallet.address, // from
"0x...", // to
BigInt("1000000") // value (1 USDC if 6 decimals)
);
// Sign the authorization
const signature = await signTransferWithAuthorization(wallet, domain, message);
// Or build typed data manually
const typedData = buildTypedData({ domain, message });
const types = buildTypes();
// Use with wallet.signTypedData(typedData.domain, types, typedData.message)API Reference
Types
TransferWithAuthorization: The message structure for ERC-3009 transfersEIP712Domain: The EIP-712 domain structure
Functions
buildDomain(domain: EIP712Domain): Converts EIP712Domain to TypedDataDomainbuildTypes(): Returns the EIP-712 types for TransferWithAuthorizationbuildMessage(message: TransferWithAuthorization): Normalizes message valuesbuildTypedData(params): Builds complete typed data for signingsignTransferWithAuthorization(wallet, domain, message): Convenience function to signmessage_5_minutes(from, to, value): Creates a message valid for 5 minutesUSDC_Domain(): Returns USDC domain for Base Sepolia (example)
Requirements
- Node.js 18+
- ethers v6
License
Apache-2.0
