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,
)