Skip to content

Key.createP256

Creates a random P256 key. This generates a new elliptic curve key using the P-256 (secp256r1) curve.

Usage

Admin Key (Default)

import { Key } from 'porto/viem'
 
const key = Key.createP256() 

Session Key

import { Key } from 'porto/viem'
import { parseEther } from 'viem'
 
const key = Key.createP256({ 
  expiry: Math.floor(Date.now() / 1000) + 60 * 60, // 1 hour 
  role: 'session', 
  permissions: { 
    calls: [{ 
      signature: 'transfer(address,uint256)', 
      to: '0xaf3b0a5b4becc4fa1dfafe74580efa19a2ea49fa', 
    }], 
    spend: [{ 
      limit: parseEther('50'), 
      period: 'day', 
      token: '0xaf3b0a5b4becc4fa1dfafe74580efa19a2ea49fa', 
    }], 
  }, 
}) 

Parameters

expiry

  • Type: number | undefined

The expiry timestamp of the key.

permissions

The permissions of the key.

type Permissions = {
  /** Call permissions - which functions the key can call */
  calls?: {
    /** Function signature or 4-byte selector */
    signature?: string | undefined
    /** Target contract address */
    to?: `0x${string}` | undefined
  }[] | undefined
  
  /** Spend permissions - spending limits for tokens */
  spend?: {
    /** Spending limit per period (in wei) */
    limit: `0x${string}`
    /** Time period for the spending limit */
    period: 'minute' | 'hour' | 'day' | 'week' | 'month' | 'year'
    /** ERC20 token address (defaults to native token if not provided) */
    token?: `0x${string}` | undefined
  }[] | undefined
}

role

  • Type: "admin" | "session" | undefined

The role of the key.

Return Value

type P256Key = {
  /** Key expiry timestamp */
  expiry: number
  
  /** Key hash identifier */
  hash: `0x${string}`
  
  /** Key ID (lowercase public key) */
  id: `0x${string}`
  
  /** Optional permissions */
  permissions?: Permissions | undefined
  
  /** Private key function (returns the private key) */
  privateKey: () => `0x${string}`
  
  /** Public key (64 bytes, uncompressed, without 0x04 prefix) */
  publicKey: `0x${string}`
  
  /** Key role */
  role: 'admin' | 'session'
  
  /** Key type - always 'p256' */
  type: 'p256'
}