gleeth/permit

EIP-2612 permit signing helper.

Signs a token permit off-chain using EIP-712, returning the v, r, s components ready to submit to a token’s permit() function on-chain. Automatically fetches the token’s EIP-712 domain (name, version) and the owner’s current nonce via RPC.

Examples

let assert Ok(sig) = permit.sign(
  provider,
  "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",  // USDC
  "0x70997970C51812dc3A010C7d01b50e0d17dc79C8",  // spender
  1_000_000,                                       // amount
  1_700_000_000,                                   // deadline
  wallet,
)
// sig.v, sig.r, sig.s ready for on-chain permit() call

Types

Permit signature components ready for on-chain submission.

pub type PermitSignature {
  PermitSignature(v: Int, r: String, s: String)
}

Constructors

  • PermitSignature(v: Int, r: String, s: String)

Values

pub fn sign(
  provider: provider.Provider,
  token_address: String,
  spender: String,
  amount: Int,
  deadline: Int,
  w: wallet.Wallet,
) -> Result(PermitSignature, types.GleethError)

Sign an EIP-2612 permit for a token.

Fetches the token’s name, EIP-712 version (“1” or “2”), and the owner’s permit nonce automatically. Constructs the EIP-712 Permit typed data and signs it.

Examples

let assert Ok(sig) = permit.sign(
  provider, token_address, spender, amount, deadline, wallet,
)
pub fn sign_with_domain(
  domain: eip712.Domain,
  owner: String,
  spender: String,
  amount: Int,
  nonce: Int,
  deadline: Int,
  w: wallet.Wallet,
) -> Result(PermitSignature, types.GleethError)

Sign a permit with an explicit domain. Useful when you already know the token’s EIP-712 domain parameters.

Examples

let domain = eip712.domain()
  |> eip712.domain_name("USD Coin")
  |> eip712.domain_version("2")
  |> eip712.domain_chain_id(1)
  |> eip712.domain_verifying_contract(usdc_address)

let assert Ok(sig) = permit.sign_with_domain(
  domain, owner, spender, amount, nonce, deadline, wallet,
)
Search Document